vips_operation_math_get_type:
   13|      1|{
   14|      1|	static gsize gtype_id = 0;
   15|       |
   16|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
   17|      1|		static const GEnumValue values[] = {
   18|      1|			{ VIPS_OPERATION_MATH_SIN, "VIPS_OPERATION_MATH_SIN", "sin" },
   19|      1|			{ VIPS_OPERATION_MATH_COS, "VIPS_OPERATION_MATH_COS", "cos" },
   20|      1|			{ VIPS_OPERATION_MATH_TAN, "VIPS_OPERATION_MATH_TAN", "tan" },
   21|      1|			{ VIPS_OPERATION_MATH_ASIN, "VIPS_OPERATION_MATH_ASIN", "asin" },
   22|      1|			{ VIPS_OPERATION_MATH_ACOS, "VIPS_OPERATION_MATH_ACOS", "acos" },
   23|      1|			{ VIPS_OPERATION_MATH_ATAN, "VIPS_OPERATION_MATH_ATAN", "atan" },
   24|      1|			{ VIPS_OPERATION_MATH_LOG, "VIPS_OPERATION_MATH_LOG", "log" },
   25|      1|			{ VIPS_OPERATION_MATH_LOG10, "VIPS_OPERATION_MATH_LOG10", "log10" },
   26|      1|			{ VIPS_OPERATION_MATH_EXP, "VIPS_OPERATION_MATH_EXP", "exp" },
   27|      1|			{ VIPS_OPERATION_MATH_EXP10, "VIPS_OPERATION_MATH_EXP10", "exp10" },
   28|      1|			{ VIPS_OPERATION_MATH_SINH, "VIPS_OPERATION_MATH_SINH", "sinh" },
   29|      1|			{ VIPS_OPERATION_MATH_COSH, "VIPS_OPERATION_MATH_COSH", "cosh" },
   30|      1|			{ VIPS_OPERATION_MATH_TANH, "VIPS_OPERATION_MATH_TANH", "tanh" },
   31|      1|			{ VIPS_OPERATION_MATH_ASINH, "VIPS_OPERATION_MATH_ASINH", "asinh" },
   32|      1|			{ VIPS_OPERATION_MATH_ACOSH, "VIPS_OPERATION_MATH_ACOSH", "acosh" },
   33|      1|			{ VIPS_OPERATION_MATH_ATANH, "VIPS_OPERATION_MATH_ATANH", "atanh" },
   34|      1|			{ VIPS_OPERATION_MATH_LAST, "VIPS_OPERATION_MATH_LAST", "last" },
   35|      1|			{ 0, NULL, NULL }
   36|      1|		};
   37|       |
   38|      1|		GType new_type =
   39|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMath"), values);
   40|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   41|      1|	}
   42|       |
   43|      1|	return (GType) gtype_id;
   44|      1|}
vips_operation_math2_get_type:
   47|      2|{
   48|      2|	static gsize gtype_id = 0;
   49|       |
   50|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
   51|      1|		static const GEnumValue values[] = {
   52|      1|			{ VIPS_OPERATION_MATH2_POW, "VIPS_OPERATION_MATH2_POW", "pow" },
   53|      1|			{ VIPS_OPERATION_MATH2_WOP, "VIPS_OPERATION_MATH2_WOP", "wop" },
   54|      1|			{ VIPS_OPERATION_MATH2_ATAN2, "VIPS_OPERATION_MATH2_ATAN2", "atan2" },
   55|      1|			{ VIPS_OPERATION_MATH2_LAST, "VIPS_OPERATION_MATH2_LAST", "last" },
   56|      1|			{ 0, NULL, NULL }
   57|      1|		};
   58|       |
   59|      1|		GType new_type =
   60|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMath2"), values);
   61|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   62|      1|	}
   63|       |
   64|      2|	return (GType) gtype_id;
   65|      2|}
vips_operation_round_get_type:
   68|      1|{
   69|      1|	static gsize gtype_id = 0;
   70|       |
   71|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
   72|      1|		static const GEnumValue values[] = {
   73|      1|			{ VIPS_OPERATION_ROUND_RINT, "VIPS_OPERATION_ROUND_RINT", "rint" },
   74|      1|			{ VIPS_OPERATION_ROUND_CEIL, "VIPS_OPERATION_ROUND_CEIL", "ceil" },
   75|      1|			{ VIPS_OPERATION_ROUND_FLOOR, "VIPS_OPERATION_ROUND_FLOOR", "floor" },
   76|      1|			{ VIPS_OPERATION_ROUND_LAST, "VIPS_OPERATION_ROUND_LAST", "last" },
   77|      1|			{ 0, NULL, NULL }
   78|      1|		};
   79|       |
   80|      1|		GType new_type =
   81|      1|			g_enum_register_static(g_intern_static_string("VipsOperationRound"), values);
   82|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   83|      1|	}
   84|       |
   85|      1|	return (GType) gtype_id;
   86|      1|}
vips_operation_relational_get_type:
   89|      2|{
   90|      2|	static gsize gtype_id = 0;
   91|       |
   92|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
   93|      1|		static const GEnumValue values[] = {
   94|      1|			{ VIPS_OPERATION_RELATIONAL_EQUAL, "VIPS_OPERATION_RELATIONAL_EQUAL", "equal" },
   95|      1|			{ VIPS_OPERATION_RELATIONAL_NOTEQ, "VIPS_OPERATION_RELATIONAL_NOTEQ", "noteq" },
   96|      1|			{ VIPS_OPERATION_RELATIONAL_LESS, "VIPS_OPERATION_RELATIONAL_LESS", "less" },
   97|      1|			{ VIPS_OPERATION_RELATIONAL_LESSEQ, "VIPS_OPERATION_RELATIONAL_LESSEQ", "lesseq" },
   98|      1|			{ VIPS_OPERATION_RELATIONAL_MORE, "VIPS_OPERATION_RELATIONAL_MORE", "more" },
   99|      1|			{ VIPS_OPERATION_RELATIONAL_MOREEQ, "VIPS_OPERATION_RELATIONAL_MOREEQ", "moreeq" },
  100|      1|			{ VIPS_OPERATION_RELATIONAL_LAST, "VIPS_OPERATION_RELATIONAL_LAST", "last" },
  101|      1|			{ 0, NULL, NULL }
  102|      1|		};
  103|       |
  104|      1|		GType new_type =
  105|      1|			g_enum_register_static(g_intern_static_string("VipsOperationRelational"), values);
  106|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  107|      1|	}
  108|       |
  109|      2|	return (GType) gtype_id;
  110|      2|}
vips_operation_boolean_get_type:
  113|      3|{
  114|      3|	static gsize gtype_id = 0;
  115|       |
  116|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
  117|      1|		static const GEnumValue values[] = {
  118|      1|			{ VIPS_OPERATION_BOOLEAN_AND, "VIPS_OPERATION_BOOLEAN_AND", "and" },
  119|      1|			{ VIPS_OPERATION_BOOLEAN_OR, "VIPS_OPERATION_BOOLEAN_OR", "or" },
  120|      1|			{ VIPS_OPERATION_BOOLEAN_EOR, "VIPS_OPERATION_BOOLEAN_EOR", "eor" },
  121|      1|			{ VIPS_OPERATION_BOOLEAN_LSHIFT, "VIPS_OPERATION_BOOLEAN_LSHIFT", "lshift" },
  122|      1|			{ VIPS_OPERATION_BOOLEAN_RSHIFT, "VIPS_OPERATION_BOOLEAN_RSHIFT", "rshift" },
  123|      1|			{ VIPS_OPERATION_BOOLEAN_LAST, "VIPS_OPERATION_BOOLEAN_LAST", "last" },
  124|      1|			{ 0, NULL, NULL }
  125|      1|		};
  126|       |
  127|      1|		GType new_type =
  128|      1|			g_enum_register_static(g_intern_static_string("VipsOperationBoolean"), values);
  129|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  130|      1|	}
  131|       |
  132|      3|	return (GType) gtype_id;
  133|      3|}
vips_operation_complex_get_type:
  136|      1|{
  137|      1|	static gsize gtype_id = 0;
  138|       |
  139|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  140|      1|		static const GEnumValue values[] = {
  141|      1|			{ VIPS_OPERATION_COMPLEX_POLAR, "VIPS_OPERATION_COMPLEX_POLAR", "polar" },
  142|      1|			{ VIPS_OPERATION_COMPLEX_RECT, "VIPS_OPERATION_COMPLEX_RECT", "rect" },
  143|      1|			{ VIPS_OPERATION_COMPLEX_CONJ, "VIPS_OPERATION_COMPLEX_CONJ", "conj" },
  144|      1|			{ VIPS_OPERATION_COMPLEX_LAST, "VIPS_OPERATION_COMPLEX_LAST", "last" },
  145|      1|			{ 0, NULL, NULL }
  146|      1|		};
  147|       |
  148|      1|		GType new_type =
  149|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplex"), values);
  150|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  151|      1|	}
  152|       |
  153|      1|	return (GType) gtype_id;
  154|      1|}
vips_operation_complex2_get_type:
  157|      1|{
  158|      1|	static gsize gtype_id = 0;
  159|       |
  160|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  161|      1|		static const GEnumValue values[] = {
  162|      1|			{ VIPS_OPERATION_COMPLEX2_CROSS_PHASE, "VIPS_OPERATION_COMPLEX2_CROSS_PHASE", "cross-phase" },
  163|      1|			{ VIPS_OPERATION_COMPLEX2_LAST, "VIPS_OPERATION_COMPLEX2_LAST", "last" },
  164|      1|			{ 0, NULL, NULL }
  165|      1|		};
  166|       |
  167|      1|		GType new_type =
  168|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplex2"), values);
  169|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  170|      1|	}
  171|       |
  172|      1|	return (GType) gtype_id;
  173|      1|}
vips_operation_complexget_get_type:
  176|      1|{
  177|      1|	static gsize gtype_id = 0;
  178|       |
  179|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  180|      1|		static const GEnumValue values[] = {
  181|      1|			{ VIPS_OPERATION_COMPLEXGET_REAL, "VIPS_OPERATION_COMPLEXGET_REAL", "real" },
  182|      1|			{ VIPS_OPERATION_COMPLEXGET_IMAG, "VIPS_OPERATION_COMPLEXGET_IMAG", "imag" },
  183|      1|			{ VIPS_OPERATION_COMPLEXGET_LAST, "VIPS_OPERATION_COMPLEXGET_LAST", "last" },
  184|      1|			{ 0, NULL, NULL }
  185|      1|		};
  186|       |
  187|      1|		GType new_type =
  188|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplexget"), values);
  189|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  190|      1|	}
  191|       |
  192|      1|	return (GType) gtype_id;
  193|      1|}
vips_precision_get_type:
  197|      7|{
  198|      7|	static gsize gtype_id = 0;
  199|       |
  200|      7|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      7|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      7|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 6]
  |  |  ------------------
  |  |  249|      7|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      7|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      7|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      7|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     14|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      7|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     14|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      7|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     14|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     14|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     14|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     14|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     14|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 6]
  |  |  ------------------
  |  |  252|      7|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      7|  }))
  ------------------
  201|      1|		static const GEnumValue values[] = {
  202|      1|			{ VIPS_PRECISION_INTEGER, "VIPS_PRECISION_INTEGER", "integer" },
  203|      1|			{ VIPS_PRECISION_FLOAT, "VIPS_PRECISION_FLOAT", "float" },
  204|      1|			{ VIPS_PRECISION_APPROXIMATE, "VIPS_PRECISION_APPROXIMATE", "approximate" },
  205|      1|			{ VIPS_PRECISION_LAST, "VIPS_PRECISION_LAST", "last" },
  206|      1|			{ 0, NULL, NULL }
  207|      1|		};
  208|       |
  209|      1|		GType new_type =
  210|      1|			g_enum_register_static(g_intern_static_string("VipsPrecision"), values);
  211|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  212|      1|	}
  213|       |
  214|      7|	return (GType) gtype_id;
  215|      7|}
vips_intent_get_type:
  219|      2|{
  220|      2|	static gsize gtype_id = 0;
  221|       |
  222|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  223|      1|		static const GEnumValue values[] = {
  224|      1|			{ VIPS_INTENT_PERCEPTUAL, "VIPS_INTENT_PERCEPTUAL", "perceptual" },
  225|      1|			{ VIPS_INTENT_RELATIVE, "VIPS_INTENT_RELATIVE", "relative" },
  226|      1|			{ VIPS_INTENT_SATURATION, "VIPS_INTENT_SATURATION", "saturation" },
  227|      1|			{ VIPS_INTENT_ABSOLUTE, "VIPS_INTENT_ABSOLUTE", "absolute" },
  228|      1|			{ VIPS_INTENT_LAST, "VIPS_INTENT_LAST", "last" },
  229|      1|			{ 0, NULL, NULL }
  230|      1|		};
  231|       |
  232|      1|		GType new_type =
  233|      1|			g_enum_register_static(g_intern_static_string("VipsIntent"), values);
  234|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  235|      1|	}
  236|       |
  237|      2|	return (GType) gtype_id;
  238|      2|}
vips_pcs_get_type:
  241|      1|{
  242|      1|	static gsize gtype_id = 0;
  243|       |
  244|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  245|      1|		static const GEnumValue values[] = {
  246|      1|			{ VIPS_PCS_LAB, "VIPS_PCS_LAB", "lab" },
  247|      1|			{ VIPS_PCS_XYZ, "VIPS_PCS_XYZ", "xyz" },
  248|      1|			{ VIPS_PCS_LAST, "VIPS_PCS_LAST", "last" },
  249|      1|			{ 0, NULL, NULL }
  250|      1|		};
  251|       |
  252|      1|		GType new_type =
  253|      1|			g_enum_register_static(g_intern_static_string("VipsPCS"), values);
  254|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  255|      1|	}
  256|       |
  257|      1|	return (GType) gtype_id;
  258|      1|}
vips_extend_get_type:
  262|      3|{
  263|      3|	static gsize gtype_id = 0;
  264|       |
  265|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
  266|      1|		static const GEnumValue values[] = {
  267|      1|			{ VIPS_EXTEND_BLACK, "VIPS_EXTEND_BLACK", "black" },
  268|      1|			{ VIPS_EXTEND_COPY, "VIPS_EXTEND_COPY", "copy" },
  269|      1|			{ VIPS_EXTEND_REPEAT, "VIPS_EXTEND_REPEAT", "repeat" },
  270|      1|			{ VIPS_EXTEND_MIRROR, "VIPS_EXTEND_MIRROR", "mirror" },
  271|      1|			{ VIPS_EXTEND_WHITE, "VIPS_EXTEND_WHITE", "white" },
  272|      1|			{ VIPS_EXTEND_BACKGROUND, "VIPS_EXTEND_BACKGROUND", "background" },
  273|      1|			{ VIPS_EXTEND_LAST, "VIPS_EXTEND_LAST", "last" },
  274|      1|			{ 0, NULL, NULL }
  275|      1|		};
  276|       |
  277|      1|		GType new_type =
  278|      1|			g_enum_register_static(g_intern_static_string("VipsExtend"), values);
  279|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  280|      1|	}
  281|       |
  282|      3|	return (GType) gtype_id;
  283|      3|}
vips_compass_direction_get_type:
  286|      1|{
  287|      1|	static gsize gtype_id = 0;
  288|       |
  289|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  290|      1|		static const GEnumValue values[] = {
  291|      1|			{ VIPS_COMPASS_DIRECTION_CENTRE, "VIPS_COMPASS_DIRECTION_CENTRE", "centre" },
  292|      1|			{ VIPS_COMPASS_DIRECTION_NORTH, "VIPS_COMPASS_DIRECTION_NORTH", "north" },
  293|      1|			{ VIPS_COMPASS_DIRECTION_EAST, "VIPS_COMPASS_DIRECTION_EAST", "east" },
  294|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH, "VIPS_COMPASS_DIRECTION_SOUTH", "south" },
  295|      1|			{ VIPS_COMPASS_DIRECTION_WEST, "VIPS_COMPASS_DIRECTION_WEST", "west" },
  296|      1|			{ VIPS_COMPASS_DIRECTION_NORTH_EAST, "VIPS_COMPASS_DIRECTION_NORTH_EAST", "north-east" },
  297|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH_EAST, "VIPS_COMPASS_DIRECTION_SOUTH_EAST", "south-east" },
  298|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH_WEST, "VIPS_COMPASS_DIRECTION_SOUTH_WEST", "south-west" },
  299|      1|			{ VIPS_COMPASS_DIRECTION_NORTH_WEST, "VIPS_COMPASS_DIRECTION_NORTH_WEST", "north-west" },
  300|      1|			{ VIPS_COMPASS_DIRECTION_LAST, "VIPS_COMPASS_DIRECTION_LAST", "last" },
  301|      1|			{ 0, NULL, NULL }
  302|      1|		};
  303|       |
  304|      1|		GType new_type =
  305|      1|			g_enum_register_static(g_intern_static_string("VipsCompassDirection"), values);
  306|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  307|      1|	}
  308|       |
  309|      1|	return (GType) gtype_id;
  310|      1|}
vips_direction_get_type:
  313|      6|{
  314|      6|	static gsize gtype_id = 0;
  315|       |
  316|      6|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      6|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 5]
  |  |  ------------------
  |  |  249|      6|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      6|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      6|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      6|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     12|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     12|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      6|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     12|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     12|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     12|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     12|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     12|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 5]
  |  |  ------------------
  |  |  252|      6|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      6|  }))
  ------------------
  317|      1|		static const GEnumValue values[] = {
  318|      1|			{ VIPS_DIRECTION_HORIZONTAL, "VIPS_DIRECTION_HORIZONTAL", "horizontal" },
  319|      1|			{ VIPS_DIRECTION_VERTICAL, "VIPS_DIRECTION_VERTICAL", "vertical" },
  320|      1|			{ VIPS_DIRECTION_LAST, "VIPS_DIRECTION_LAST", "last" },
  321|      1|			{ 0, NULL, NULL }
  322|      1|		};
  323|       |
  324|      1|		GType new_type =
  325|      1|			g_enum_register_static(g_intern_static_string("VipsDirection"), values);
  326|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  327|      1|	}
  328|       |
  329|      6|	return (GType) gtype_id;
  330|      6|}
vips_align_get_type:
  333|      2|{
  334|      2|	static gsize gtype_id = 0;
  335|       |
  336|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  337|      1|		static const GEnumValue values[] = {
  338|      1|			{ VIPS_ALIGN_LOW, "VIPS_ALIGN_LOW", "low" },
  339|      1|			{ VIPS_ALIGN_CENTRE, "VIPS_ALIGN_CENTRE", "centre" },
  340|      1|			{ VIPS_ALIGN_HIGH, "VIPS_ALIGN_HIGH", "high" },
  341|      1|			{ VIPS_ALIGN_LAST, "VIPS_ALIGN_LAST", "last" },
  342|      1|			{ 0, NULL, NULL }
  343|      1|		};
  344|       |
  345|      1|		GType new_type =
  346|      1|			g_enum_register_static(g_intern_static_string("VipsAlign"), values);
  347|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  348|      1|	}
  349|       |
  350|      2|	return (GType) gtype_id;
  351|      2|}
vips_angle_get_type:
  354|      2|{
  355|      2|	static gsize gtype_id = 0;
  356|       |
  357|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  358|      1|		static const GEnumValue values[] = {
  359|      1|			{ VIPS_ANGLE_D0, "VIPS_ANGLE_D0", "d0" },
  360|      1|			{ VIPS_ANGLE_D90, "VIPS_ANGLE_D90", "d90" },
  361|      1|			{ VIPS_ANGLE_D180, "VIPS_ANGLE_D180", "d180" },
  362|      1|			{ VIPS_ANGLE_D270, "VIPS_ANGLE_D270", "d270" },
  363|      1|			{ VIPS_ANGLE_LAST, "VIPS_ANGLE_LAST", "last" },
  364|      1|			{ 0, NULL, NULL }
  365|      1|		};
  366|       |
  367|      1|		GType new_type =
  368|      1|			g_enum_register_static(g_intern_static_string("VipsAngle"), values);
  369|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  370|      1|	}
  371|       |
  372|      2|	return (GType) gtype_id;
  373|      2|}
vips_angle45_get_type:
  376|      2|{
  377|      2|	static gsize gtype_id = 0;
  378|       |
  379|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  380|      1|		static const GEnumValue values[] = {
  381|      1|			{ VIPS_ANGLE45_D0, "VIPS_ANGLE45_D0", "d0" },
  382|      1|			{ VIPS_ANGLE45_D45, "VIPS_ANGLE45_D45", "d45" },
  383|      1|			{ VIPS_ANGLE45_D90, "VIPS_ANGLE45_D90", "d90" },
  384|      1|			{ VIPS_ANGLE45_D135, "VIPS_ANGLE45_D135", "d135" },
  385|      1|			{ VIPS_ANGLE45_D180, "VIPS_ANGLE45_D180", "d180" },
  386|      1|			{ VIPS_ANGLE45_D225, "VIPS_ANGLE45_D225", "d225" },
  387|      1|			{ VIPS_ANGLE45_D270, "VIPS_ANGLE45_D270", "d270" },
  388|      1|			{ VIPS_ANGLE45_D315, "VIPS_ANGLE45_D315", "d315" },
  389|      1|			{ VIPS_ANGLE45_LAST, "VIPS_ANGLE45_LAST", "last" },
  390|      1|			{ 0, NULL, NULL }
  391|      1|		};
  392|       |
  393|      1|		GType new_type =
  394|      1|			g_enum_register_static(g_intern_static_string("VipsAngle45"), values);
  395|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  396|      1|	}
  397|       |
  398|      2|	return (GType) gtype_id;
  399|      2|}
vips_interesting_get_type:
  402|      2|{
  403|      2|	static gsize gtype_id = 0;
  404|       |
  405|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  406|      1|		static const GEnumValue values[] = {
  407|      1|			{ VIPS_INTERESTING_NONE, "VIPS_INTERESTING_NONE", "none" },
  408|      1|			{ VIPS_INTERESTING_CENTRE, "VIPS_INTERESTING_CENTRE", "centre" },
  409|      1|			{ VIPS_INTERESTING_ENTROPY, "VIPS_INTERESTING_ENTROPY", "entropy" },
  410|      1|			{ VIPS_INTERESTING_ATTENTION, "VIPS_INTERESTING_ATTENTION", "attention" },
  411|      1|			{ VIPS_INTERESTING_LOW, "VIPS_INTERESTING_LOW", "low" },
  412|      1|			{ VIPS_INTERESTING_HIGH, "VIPS_INTERESTING_HIGH", "high" },
  413|      1|			{ VIPS_INTERESTING_ALL, "VIPS_INTERESTING_ALL", "all" },
  414|      1|			{ VIPS_INTERESTING_LAST, "VIPS_INTERESTING_LAST", "last" },
  415|      1|			{ 0, NULL, NULL }
  416|      1|		};
  417|       |
  418|      1|		GType new_type =
  419|      1|			g_enum_register_static(g_intern_static_string("VipsInteresting"), values);
  420|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  421|      1|	}
  422|       |
  423|      2|	return (GType) gtype_id;
  424|      2|}
vips_blend_mode_get_type:
  427|      1|{
  428|      1|	static gsize gtype_id = 0;
  429|       |
  430|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  431|      1|		static const GEnumValue values[] = {
  432|      1|			{ VIPS_BLEND_MODE_CLEAR, "VIPS_BLEND_MODE_CLEAR", "clear" },
  433|      1|			{ VIPS_BLEND_MODE_SOURCE, "VIPS_BLEND_MODE_SOURCE", "source" },
  434|      1|			{ VIPS_BLEND_MODE_OVER, "VIPS_BLEND_MODE_OVER", "over" },
  435|      1|			{ VIPS_BLEND_MODE_IN, "VIPS_BLEND_MODE_IN", "in" },
  436|      1|			{ VIPS_BLEND_MODE_OUT, "VIPS_BLEND_MODE_OUT", "out" },
  437|      1|			{ VIPS_BLEND_MODE_ATOP, "VIPS_BLEND_MODE_ATOP", "atop" },
  438|      1|			{ VIPS_BLEND_MODE_DEST, "VIPS_BLEND_MODE_DEST", "dest" },
  439|      1|			{ VIPS_BLEND_MODE_DEST_OVER, "VIPS_BLEND_MODE_DEST_OVER", "dest-over" },
  440|      1|			{ VIPS_BLEND_MODE_DEST_IN, "VIPS_BLEND_MODE_DEST_IN", "dest-in" },
  441|      1|			{ VIPS_BLEND_MODE_DEST_OUT, "VIPS_BLEND_MODE_DEST_OUT", "dest-out" },
  442|      1|			{ VIPS_BLEND_MODE_DEST_ATOP, "VIPS_BLEND_MODE_DEST_ATOP", "dest-atop" },
  443|      1|			{ VIPS_BLEND_MODE_XOR, "VIPS_BLEND_MODE_XOR", "xor" },
  444|      1|			{ VIPS_BLEND_MODE_ADD, "VIPS_BLEND_MODE_ADD", "add" },
  445|      1|			{ VIPS_BLEND_MODE_SATURATE, "VIPS_BLEND_MODE_SATURATE", "saturate" },
  446|      1|			{ VIPS_BLEND_MODE_MULTIPLY, "VIPS_BLEND_MODE_MULTIPLY", "multiply" },
  447|      1|			{ VIPS_BLEND_MODE_SCREEN, "VIPS_BLEND_MODE_SCREEN", "screen" },
  448|      1|			{ VIPS_BLEND_MODE_OVERLAY, "VIPS_BLEND_MODE_OVERLAY", "overlay" },
  449|      1|			{ VIPS_BLEND_MODE_DARKEN, "VIPS_BLEND_MODE_DARKEN", "darken" },
  450|      1|			{ VIPS_BLEND_MODE_LIGHTEN, "VIPS_BLEND_MODE_LIGHTEN", "lighten" },
  451|      1|			{ VIPS_BLEND_MODE_COLOUR_DODGE, "VIPS_BLEND_MODE_COLOUR_DODGE", "colour-dodge" },
  452|      1|			{ VIPS_BLEND_MODE_COLOUR_BURN, "VIPS_BLEND_MODE_COLOUR_BURN", "colour-burn" },
  453|      1|			{ VIPS_BLEND_MODE_HARD_LIGHT, "VIPS_BLEND_MODE_HARD_LIGHT", "hard-light" },
  454|      1|			{ VIPS_BLEND_MODE_SOFT_LIGHT, "VIPS_BLEND_MODE_SOFT_LIGHT", "soft-light" },
  455|      1|			{ VIPS_BLEND_MODE_DIFFERENCE, "VIPS_BLEND_MODE_DIFFERENCE", "difference" },
  456|      1|			{ VIPS_BLEND_MODE_EXCLUSION, "VIPS_BLEND_MODE_EXCLUSION", "exclusion" },
  457|      1|			{ VIPS_BLEND_MODE_LAST, "VIPS_BLEND_MODE_LAST", "last" },
  458|      1|			{ 0, NULL, NULL }
  459|      1|		};
  460|       |
  461|      1|		GType new_type =
  462|      1|			g_enum_register_static(g_intern_static_string("VipsBlendMode"), values);
  463|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  464|      1|	}
  465|       |
  466|      1|	return (GType) gtype_id;
  467|      1|}
vips_combine_get_type:
  471|      2|{
  472|      2|	static gsize gtype_id = 0;
  473|       |
  474|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  475|      1|		static const GEnumValue values[] = {
  476|      1|			{ VIPS_COMBINE_MAX, "VIPS_COMBINE_MAX", "max" },
  477|      1|			{ VIPS_COMBINE_SUM, "VIPS_COMBINE_SUM", "sum" },
  478|      1|			{ VIPS_COMBINE_MIN, "VIPS_COMBINE_MIN", "min" },
  479|      1|			{ VIPS_COMBINE_LAST, "VIPS_COMBINE_LAST", "last" },
  480|      1|			{ 0, NULL, NULL }
  481|      1|		};
  482|       |
  483|      1|		GType new_type =
  484|      1|			g_enum_register_static(g_intern_static_string("VipsCombine"), values);
  485|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  486|      1|	}
  487|       |
  488|      2|	return (GType) gtype_id;
  489|      2|}
vips_sdf_shape_get_type:
  515|      1|{
  516|      1|	static gsize gtype_id = 0;
  517|       |
  518|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  519|      1|		static const GEnumValue values[] = {
  520|      1|			{ VIPS_SDF_SHAPE_CIRCLE, "VIPS_SDF_SHAPE_CIRCLE", "circle" },
  521|      1|			{ VIPS_SDF_SHAPE_BOX, "VIPS_SDF_SHAPE_BOX", "box" },
  522|      1|			{ VIPS_SDF_SHAPE_ROUNDED_BOX, "VIPS_SDF_SHAPE_ROUNDED_BOX", "rounded-box" },
  523|      1|			{ VIPS_SDF_SHAPE_LINE, "VIPS_SDF_SHAPE_LINE", "line" },
  524|      1|			{ VIPS_SDF_SHAPE_LAST, "VIPS_SDF_SHAPE_LAST", "last" },
  525|      1|			{ 0, NULL, NULL }
  526|      1|		};
  527|       |
  528|      1|		GType new_type =
  529|      1|			g_enum_register_static(g_intern_static_string("VipsSdfShape"), values);
  530|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  531|      1|	}
  532|       |
  533|      1|	return (GType) gtype_id;
  534|      1|}
vips_combine_mode_get_type:
  538|      1|{
  539|      1|	static gsize gtype_id = 0;
  540|       |
  541|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  542|      1|		static const GEnumValue values[] = {
  543|      1|			{ VIPS_COMBINE_MODE_SET, "VIPS_COMBINE_MODE_SET", "set" },
  544|      1|			{ VIPS_COMBINE_MODE_ADD, "VIPS_COMBINE_MODE_ADD", "add" },
  545|      1|			{ VIPS_COMBINE_MODE_LAST, "VIPS_COMBINE_MODE_LAST", "last" },
  546|      1|			{ 0, NULL, NULL }
  547|      1|		};
  548|       |
  549|      1|		GType new_type =
  550|      1|			g_enum_register_static(g_intern_static_string("VipsCombineMode"), values);
  551|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  552|      1|	}
  553|       |
  554|      1|	return (GType) gtype_id;
  555|      1|}
vips_foreign_flags_get_type:
  559|      1|{
  560|      1|	static gsize gtype_id = 0;
  561|       |
  562|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  563|      1|		static const GFlagsValue values[] = {
  564|      1|			{ VIPS_FOREIGN_NONE, "VIPS_FOREIGN_NONE", "none" },
  565|      1|			{ VIPS_FOREIGN_PARTIAL, "VIPS_FOREIGN_PARTIAL", "partial" },
  566|      1|			{ VIPS_FOREIGN_BIGENDIAN, "VIPS_FOREIGN_BIGENDIAN", "bigendian" },
  567|      1|			{ VIPS_FOREIGN_SEQUENTIAL, "VIPS_FOREIGN_SEQUENTIAL", "sequential" },
  568|      1|			{ VIPS_FOREIGN_ALL, "VIPS_FOREIGN_ALL", "all" },
  569|      1|			{ 0, NULL, NULL }
  570|      1|		};
  571|       |
  572|      1|		GType new_type =
  573|      1|			g_flags_register_static(g_intern_static_string("VipsForeignFlags"), values);
  574|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  575|      1|	}
  576|       |
  577|      1|	return (GType) gtype_id;
  578|      1|}
vips_fail_on_get_type:
  581|      2|{
  582|      2|	static gsize gtype_id = 0;
  583|       |
  584|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  585|      1|		static const GEnumValue values[] = {
  586|      1|			{ VIPS_FAIL_ON_NONE, "VIPS_FAIL_ON_NONE", "none" },
  587|      1|			{ VIPS_FAIL_ON_TRUNCATED, "VIPS_FAIL_ON_TRUNCATED", "truncated" },
  588|      1|			{ VIPS_FAIL_ON_ERROR, "VIPS_FAIL_ON_ERROR", "error" },
  589|      1|			{ VIPS_FAIL_ON_WARNING, "VIPS_FAIL_ON_WARNING", "warning" },
  590|      1|			{ VIPS_FAIL_ON_LAST, "VIPS_FAIL_ON_LAST", "last" },
  591|      1|			{ 0, NULL, NULL }
  592|      1|		};
  593|       |
  594|      1|		GType new_type =
  595|      1|			g_enum_register_static(g_intern_static_string("VipsFailOn"), values);
  596|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  597|      1|	}
  598|       |
  599|      2|	return (GType) gtype_id;
  600|      2|}
vips_foreign_keep_get_type:
  627|      1|{
  628|      1|	static gsize gtype_id = 0;
  629|       |
  630|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  631|      1|		static const GFlagsValue values[] = {
  632|      1|			{ VIPS_FOREIGN_KEEP_NONE, "VIPS_FOREIGN_KEEP_NONE", "none" },
  633|      1|			{ VIPS_FOREIGN_KEEP_EXIF, "VIPS_FOREIGN_KEEP_EXIF", "exif" },
  634|      1|			{ VIPS_FOREIGN_KEEP_XMP, "VIPS_FOREIGN_KEEP_XMP", "xmp" },
  635|      1|			{ VIPS_FOREIGN_KEEP_IPTC, "VIPS_FOREIGN_KEEP_IPTC", "iptc" },
  636|      1|			{ VIPS_FOREIGN_KEEP_ICC, "VIPS_FOREIGN_KEEP_ICC", "icc" },
  637|      1|			{ VIPS_FOREIGN_KEEP_OTHER, "VIPS_FOREIGN_KEEP_OTHER", "other" },
  638|      1|			{ VIPS_FOREIGN_KEEP_ALL, "VIPS_FOREIGN_KEEP_ALL", "all" },
  639|      1|			{ 0, NULL, NULL }
  640|      1|		};
  641|       |
  642|      1|		GType new_type =
  643|      1|			g_flags_register_static(g_intern_static_string("VipsForeignKeep"), values);
  644|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  645|      1|	}
  646|       |
  647|      1|	return (GType) gtype_id;
  648|      1|}
vips_foreign_subsample_get_type:
  651|      2|{
  652|      2|	static gsize gtype_id = 0;
  653|       |
  654|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  655|      1|		static const GEnumValue values[] = {
  656|      1|			{ VIPS_FOREIGN_SUBSAMPLE_AUTO, "VIPS_FOREIGN_SUBSAMPLE_AUTO", "auto" },
  657|      1|			{ VIPS_FOREIGN_SUBSAMPLE_ON, "VIPS_FOREIGN_SUBSAMPLE_ON", "on" },
  658|      1|			{ VIPS_FOREIGN_SUBSAMPLE_OFF, "VIPS_FOREIGN_SUBSAMPLE_OFF", "off" },
  659|      1|			{ VIPS_FOREIGN_SUBSAMPLE_LAST, "VIPS_FOREIGN_SUBSAMPLE_LAST", "last" },
  660|      1|			{ 0, NULL, NULL }
  661|      1|		};
  662|       |
  663|      1|		GType new_type =
  664|      1|			g_enum_register_static(g_intern_static_string("VipsForeignSubsample"), values);
  665|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  666|      1|	}
  667|       |
  668|      2|	return (GType) gtype_id;
  669|      2|}
vips_foreign_webp_preset_get_type:
  672|      1|{
  673|      1|	static gsize gtype_id = 0;
  674|       |
  675|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  676|      1|		static const GEnumValue values[] = {
  677|      1|			{ VIPS_FOREIGN_WEBP_PRESET_DEFAULT, "VIPS_FOREIGN_WEBP_PRESET_DEFAULT", "default" },
  678|      1|			{ VIPS_FOREIGN_WEBP_PRESET_PICTURE, "VIPS_FOREIGN_WEBP_PRESET_PICTURE", "picture" },
  679|      1|			{ VIPS_FOREIGN_WEBP_PRESET_PHOTO, "VIPS_FOREIGN_WEBP_PRESET_PHOTO", "photo" },
  680|      1|			{ VIPS_FOREIGN_WEBP_PRESET_DRAWING, "VIPS_FOREIGN_WEBP_PRESET_DRAWING", "drawing" },
  681|      1|			{ VIPS_FOREIGN_WEBP_PRESET_ICON, "VIPS_FOREIGN_WEBP_PRESET_ICON", "icon" },
  682|      1|			{ VIPS_FOREIGN_WEBP_PRESET_TEXT, "VIPS_FOREIGN_WEBP_PRESET_TEXT", "text" },
  683|      1|			{ VIPS_FOREIGN_WEBP_PRESET_LAST, "VIPS_FOREIGN_WEBP_PRESET_LAST", "last" },
  684|      1|			{ 0, NULL, NULL }
  685|      1|		};
  686|       |
  687|      1|		GType new_type =
  688|      1|			g_enum_register_static(g_intern_static_string("VipsForeignWebpPreset"), values);
  689|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  690|      1|	}
  691|       |
  692|      1|	return (GType) gtype_id;
  693|      1|}
vips_foreign_tiff_compression_get_type:
  696|      1|{
  697|      1|	static gsize gtype_id = 0;
  698|       |
  699|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  700|      1|		static const GEnumValue values[] = {
  701|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_NONE, "VIPS_FOREIGN_TIFF_COMPRESSION_NONE", "none" },
  702|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_JPEG, "VIPS_FOREIGN_TIFF_COMPRESSION_JPEG", "jpeg" },
  703|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE, "VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE", "deflate" },
  704|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS, "VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS", "packbits" },
  705|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4, "VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4", "ccittfax4" },
  706|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_LZW, "VIPS_FOREIGN_TIFF_COMPRESSION_LZW", "lzw" },
  707|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_WEBP, "VIPS_FOREIGN_TIFF_COMPRESSION_WEBP", "webp" },
  708|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD, "VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD", "zstd" },
  709|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_JP2K, "VIPS_FOREIGN_TIFF_COMPRESSION_JP2K", "jp2k" },
  710|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_LAST, "VIPS_FOREIGN_TIFF_COMPRESSION_LAST", "last" },
  711|      1|			{ 0, NULL, NULL }
  712|      1|		};
  713|       |
  714|      1|		GType new_type =
  715|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffCompression"), values);
  716|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  717|      1|	}
  718|       |
  719|      1|	return (GType) gtype_id;
  720|      1|}
vips_foreign_tiff_predictor_get_type:
  723|      1|{
  724|      1|	static gsize gtype_id = 0;
  725|       |
  726|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  727|      1|		static const GEnumValue values[] = {
  728|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_NONE, "VIPS_FOREIGN_TIFF_PREDICTOR_NONE", "none" },
  729|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL, "VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL", "horizontal" },
  730|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT, "VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT", "float" },
  731|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_LAST, "VIPS_FOREIGN_TIFF_PREDICTOR_LAST", "last" },
  732|      1|			{ 0, NULL, NULL }
  733|      1|		};
  734|       |
  735|      1|		GType new_type =
  736|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffPredictor"), values);
  737|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  738|      1|	}
  739|       |
  740|      1|	return (GType) gtype_id;
  741|      1|}
vips_foreign_tiff_resunit_get_type:
  744|      1|{
  745|      1|	static gsize gtype_id = 0;
  746|       |
  747|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  748|      1|		static const GEnumValue values[] = {
  749|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_CM, "VIPS_FOREIGN_TIFF_RESUNIT_CM", "cm" },
  750|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_INCH, "VIPS_FOREIGN_TIFF_RESUNIT_INCH", "inch" },
  751|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_LAST, "VIPS_FOREIGN_TIFF_RESUNIT_LAST", "last" },
  752|      1|			{ 0, NULL, NULL }
  753|      1|		};
  754|       |
  755|      1|		GType new_type =
  756|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffResunit"), values);
  757|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  758|      1|	}
  759|       |
  760|      1|	return (GType) gtype_id;
  761|      1|}
vips_foreign_png_filter_get_type:
  764|      1|{
  765|      1|	static gsize gtype_id = 0;
  766|       |
  767|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  768|      1|		static const GFlagsValue values[] = {
  769|      1|			{ VIPS_FOREIGN_PNG_FILTER_NONE, "VIPS_FOREIGN_PNG_FILTER_NONE", "none" },
  770|      1|			{ VIPS_FOREIGN_PNG_FILTER_SUB, "VIPS_FOREIGN_PNG_FILTER_SUB", "sub" },
  771|      1|			{ VIPS_FOREIGN_PNG_FILTER_UP, "VIPS_FOREIGN_PNG_FILTER_UP", "up" },
  772|      1|			{ VIPS_FOREIGN_PNG_FILTER_AVG, "VIPS_FOREIGN_PNG_FILTER_AVG", "avg" },
  773|      1|			{ VIPS_FOREIGN_PNG_FILTER_PAETH, "VIPS_FOREIGN_PNG_FILTER_PAETH", "paeth" },
  774|      1|			{ VIPS_FOREIGN_PNG_FILTER_ALL, "VIPS_FOREIGN_PNG_FILTER_ALL", "all" },
  775|      1|			{ 0, NULL, NULL }
  776|      1|		};
  777|       |
  778|      1|		GType new_type =
  779|      1|			g_flags_register_static(g_intern_static_string("VipsForeignPngFilter"), values);
  780|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  781|      1|	}
  782|       |
  783|      1|	return (GType) gtype_id;
  784|      1|}
vips_foreign_ppm_format_get_type:
  787|      1|{
  788|      1|	static gsize gtype_id = 0;
  789|       |
  790|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  791|      1|		static const GEnumValue values[] = {
  792|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PBM, "VIPS_FOREIGN_PPM_FORMAT_PBM", "pbm" },
  793|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PGM, "VIPS_FOREIGN_PPM_FORMAT_PGM", "pgm" },
  794|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PPM, "VIPS_FOREIGN_PPM_FORMAT_PPM", "ppm" },
  795|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PFM, "VIPS_FOREIGN_PPM_FORMAT_PFM", "pfm" },
  796|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PNM, "VIPS_FOREIGN_PPM_FORMAT_PNM", "pnm" },
  797|      1|			{ VIPS_FOREIGN_PPM_FORMAT_LAST, "VIPS_FOREIGN_PPM_FORMAT_LAST", "last" },
  798|      1|			{ 0, NULL, NULL }
  799|      1|		};
  800|       |
  801|      1|		GType new_type =
  802|      1|			g_enum_register_static(g_intern_static_string("VipsForeignPpmFormat"), values);
  803|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  804|      1|	}
  805|       |
  806|      1|	return (GType) gtype_id;
  807|      1|}
vips_foreign_dz_depth_get_type:
  833|      1|{
  834|      1|	static gsize gtype_id = 0;
  835|       |
  836|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  837|      1|		static const GEnumValue values[] = {
  838|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL, "VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL", "onepixel" },
  839|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONETILE, "VIPS_FOREIGN_DZ_DEPTH_ONETILE", "onetile" },
  840|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONE, "VIPS_FOREIGN_DZ_DEPTH_ONE", "one" },
  841|      1|			{ VIPS_FOREIGN_DZ_DEPTH_LAST, "VIPS_FOREIGN_DZ_DEPTH_LAST", "last" },
  842|      1|			{ 0, NULL, NULL }
  843|      1|		};
  844|       |
  845|      1|		GType new_type =
  846|      1|			g_enum_register_static(g_intern_static_string("VipsForeignDzDepth"), values);
  847|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  848|      1|	}
  849|       |
  850|      1|	return (GType) gtype_id;
  851|      1|}
vips_foreign_heif_compression_get_type:
  875|  4.78k|{
  876|  4.78k|	static gsize gtype_id = 0;
  877|       |
  878|  4.78k|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|  4.78k|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|  4.78k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 4.78k]
  |  |  ------------------
  |  |  249|  4.78k|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|  4.78k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|  4.78k|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|  4.78k|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|  9.57k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  4.78k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|  9.57k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|  4.78k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|  9.57k|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|  9.57k|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|  9.57k|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|  9.57k|    gapg_temp_newval;                                                        \
  |  |  |  |  131|  9.57k|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 4.78k]
  |  |  ------------------
  |  |  252|  4.78k|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|  4.78k|  }))
  ------------------
  879|      1|		static const GEnumValue values[] = {
  880|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_HEVC, "VIPS_FOREIGN_HEIF_COMPRESSION_HEVC", "hevc" },
  881|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_AVC, "VIPS_FOREIGN_HEIF_COMPRESSION_AVC", "avc" },
  882|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_JPEG, "VIPS_FOREIGN_HEIF_COMPRESSION_JPEG", "jpeg" },
  883|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_AV1, "VIPS_FOREIGN_HEIF_COMPRESSION_AV1", "av1" },
  884|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_LAST, "VIPS_FOREIGN_HEIF_COMPRESSION_LAST", "last" },
  885|      1|			{ 0, NULL, NULL }
  886|      1|		};
  887|       |
  888|      1|		GType new_type =
  889|      1|			g_enum_register_static(g_intern_static_string("VipsForeignHeifCompression"), values);
  890|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  891|      1|	}
  892|       |
  893|  4.78k|	return (GType) gtype_id;
  894|  4.78k|}
vips_foreign_heif_encoder_get_type:
  897|      1|{
  898|      1|	static gsize gtype_id = 0;
  899|       |
  900|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  901|      1|		static const GEnumValue values[] = {
  902|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_AUTO, "VIPS_FOREIGN_HEIF_ENCODER_AUTO", "auto" },
  903|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_AOM, "VIPS_FOREIGN_HEIF_ENCODER_AOM", "aom" },
  904|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_RAV1E, "VIPS_FOREIGN_HEIF_ENCODER_RAV1E", "rav1e" },
  905|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_SVT, "VIPS_FOREIGN_HEIF_ENCODER_SVT", "svt" },
  906|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_X265, "VIPS_FOREIGN_HEIF_ENCODER_X265", "x265" },
  907|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_LAST, "VIPS_FOREIGN_HEIF_ENCODER_LAST", "last" },
  908|      1|			{ 0, NULL, NULL }
  909|      1|		};
  910|       |
  911|      1|		GType new_type =
  912|      1|			g_enum_register_static(g_intern_static_string("VipsForeignHeifEncoder"), values);
  913|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  914|      1|	}
  915|       |
  916|      1|	return (GType) gtype_id;
  917|      1|}
vips_demand_style_get_type:
  921|      1|{
  922|      1|	static gsize gtype_id = 0;
  923|       |
  924|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  925|      1|		static const GEnumValue values[] = {
  926|      1|			{ VIPS_DEMAND_STYLE_ERROR, "VIPS_DEMAND_STYLE_ERROR", "error" },
  927|      1|			{ VIPS_DEMAND_STYLE_SMALLTILE, "VIPS_DEMAND_STYLE_SMALLTILE", "smalltile" },
  928|      1|			{ VIPS_DEMAND_STYLE_FATSTRIP, "VIPS_DEMAND_STYLE_FATSTRIP", "fatstrip" },
  929|      1|			{ VIPS_DEMAND_STYLE_THINSTRIP, "VIPS_DEMAND_STYLE_THINSTRIP", "thinstrip" },
  930|      1|			{ VIPS_DEMAND_STYLE_ANY, "VIPS_DEMAND_STYLE_ANY", "any" },
  931|      1|			{ 0, NULL, NULL }
  932|      1|		};
  933|       |
  934|      1|		GType new_type =
  935|      1|			g_enum_register_static(g_intern_static_string("VipsDemandStyle"), values);
  936|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  937|      1|	}
  938|       |
  939|      1|	return (GType) gtype_id;
  940|      1|}
vips_interpretation_get_type:
  969|      5|{
  970|      5|	static gsize gtype_id = 0;
  971|       |
  972|      5|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      5|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      5|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 4]
  |  |  ------------------
  |  |  249|      5|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      5|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      5|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      5|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     10|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      5|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     10|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      5|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     10|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     10|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     10|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     10|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     10|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 4]
  |  |  ------------------
  |  |  252|      5|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      5|  }))
  ------------------
  973|      1|		static const GEnumValue values[] = {
  974|      1|			{ VIPS_INTERPRETATION_ERROR, "VIPS_INTERPRETATION_ERROR", "error" },
  975|      1|			{ VIPS_INTERPRETATION_MULTIBAND, "VIPS_INTERPRETATION_MULTIBAND", "multiband" },
  976|      1|			{ VIPS_INTERPRETATION_B_W, "VIPS_INTERPRETATION_B_W", "b-w" },
  977|      1|			{ VIPS_INTERPRETATION_HISTOGRAM, "VIPS_INTERPRETATION_HISTOGRAM", "histogram" },
  978|      1|			{ VIPS_INTERPRETATION_XYZ, "VIPS_INTERPRETATION_XYZ", "xyz" },
  979|      1|			{ VIPS_INTERPRETATION_LAB, "VIPS_INTERPRETATION_LAB", "lab" },
  980|      1|			{ VIPS_INTERPRETATION_CMYK, "VIPS_INTERPRETATION_CMYK", "cmyk" },
  981|      1|			{ VIPS_INTERPRETATION_LABQ, "VIPS_INTERPRETATION_LABQ", "labq" },
  982|      1|			{ VIPS_INTERPRETATION_RGB, "VIPS_INTERPRETATION_RGB", "rgb" },
  983|      1|			{ VIPS_INTERPRETATION_CMC, "VIPS_INTERPRETATION_CMC", "cmc" },
  984|      1|			{ VIPS_INTERPRETATION_LCH, "VIPS_INTERPRETATION_LCH", "lch" },
  985|      1|			{ VIPS_INTERPRETATION_LABS, "VIPS_INTERPRETATION_LABS", "labs" },
  986|      1|			{ VIPS_INTERPRETATION_sRGB, "VIPS_INTERPRETATION_sRGB", "srgb" },
  987|      1|			{ VIPS_INTERPRETATION_YXY, "VIPS_INTERPRETATION_YXY", "yxy" },
  988|      1|			{ VIPS_INTERPRETATION_FOURIER, "VIPS_INTERPRETATION_FOURIER", "fourier" },
  989|      1|			{ VIPS_INTERPRETATION_RGB16, "VIPS_INTERPRETATION_RGB16", "rgb16" },
  990|      1|			{ VIPS_INTERPRETATION_GREY16, "VIPS_INTERPRETATION_GREY16", "grey16" },
  991|      1|			{ VIPS_INTERPRETATION_MATRIX, "VIPS_INTERPRETATION_MATRIX", "matrix" },
  992|      1|			{ VIPS_INTERPRETATION_scRGB, "VIPS_INTERPRETATION_scRGB", "scrgb" },
  993|      1|			{ VIPS_INTERPRETATION_HSV, "VIPS_INTERPRETATION_HSV", "hsv" },
  994|      1|			{ VIPS_INTERPRETATION_LAST, "VIPS_INTERPRETATION_LAST", "last" },
  995|      1|			{ 0, NULL, NULL }
  996|      1|		};
  997|       |
  998|      1|		GType new_type =
  999|      1|			g_enum_register_static(g_intern_static_string("VipsInterpretation"), values);
 1000|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1001|      1|	}
 1002|       |
 1003|      5|	return (GType) gtype_id;
 1004|      5|}
vips_band_format_get_type:
 1007|      4|{
 1008|      4|	static gsize gtype_id = 0;
 1009|       |
 1010|      4|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      4|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 3]
  |  |  ------------------
  |  |  249|      4|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      4|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      4|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      8|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      8|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      8|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      8|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      8|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      8|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      8|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 3]
  |  |  ------------------
  |  |  252|      4|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      4|  }))
  ------------------
 1011|      1|		static const GEnumValue values[] = {
 1012|      1|			{ VIPS_FORMAT_NOTSET, "VIPS_FORMAT_NOTSET", "notset" },
 1013|      1|			{ VIPS_FORMAT_UCHAR, "VIPS_FORMAT_UCHAR", "uchar" },
 1014|      1|			{ VIPS_FORMAT_CHAR, "VIPS_FORMAT_CHAR", "char" },
 1015|      1|			{ VIPS_FORMAT_USHORT, "VIPS_FORMAT_USHORT", "ushort" },
 1016|      1|			{ VIPS_FORMAT_SHORT, "VIPS_FORMAT_SHORT", "short" },
 1017|      1|			{ VIPS_FORMAT_UINT, "VIPS_FORMAT_UINT", "uint" },
 1018|      1|			{ VIPS_FORMAT_INT, "VIPS_FORMAT_INT", "int" },
 1019|      1|			{ VIPS_FORMAT_FLOAT, "VIPS_FORMAT_FLOAT", "float" },
 1020|      1|			{ VIPS_FORMAT_COMPLEX, "VIPS_FORMAT_COMPLEX", "complex" },
 1021|      1|			{ VIPS_FORMAT_DOUBLE, "VIPS_FORMAT_DOUBLE", "double" },
 1022|      1|			{ VIPS_FORMAT_DPCOMPLEX, "VIPS_FORMAT_DPCOMPLEX", "dpcomplex" },
 1023|      1|			{ VIPS_FORMAT_LAST, "VIPS_FORMAT_LAST", "last" },
 1024|      1|			{ 0, NULL, NULL }
 1025|      1|		};
 1026|       |
 1027|      1|		GType new_type =
 1028|      1|			g_enum_register_static(g_intern_static_string("VipsBandFormat"), values);
 1029|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1030|      1|	}
 1031|       |
 1032|      4|	return (GType) gtype_id;
 1033|      4|}
vips_coding_get_type:
 1036|      2|{
 1037|      2|	static gsize gtype_id = 0;
 1038|       |
 1039|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
 1040|      1|		static const GEnumValue values[] = {
 1041|      1|			{ VIPS_CODING_ERROR, "VIPS_CODING_ERROR", "error" },
 1042|      1|			{ VIPS_CODING_NONE, "VIPS_CODING_NONE", "none" },
 1043|      1|			{ VIPS_CODING_LABQ, "VIPS_CODING_LABQ", "labq" },
 1044|      1|			{ VIPS_CODING_RAD, "VIPS_CODING_RAD", "rad" },
 1045|      1|			{ VIPS_CODING_LAST, "VIPS_CODING_LAST", "last" },
 1046|      1|			{ 0, NULL, NULL }
 1047|      1|		};
 1048|       |
 1049|      1|		GType new_type =
 1050|      1|			g_enum_register_static(g_intern_static_string("VipsCoding"), values);
 1051|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1052|      1|	}
 1053|       |
 1054|      2|	return (GType) gtype_id;
 1055|      2|}
vips_access_get_type:
 1058|      3|{
 1059|      3|	static gsize gtype_id = 0;
 1060|       |
 1061|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
 1062|      1|		static const GEnumValue values[] = {
 1063|      1|			{ VIPS_ACCESS_RANDOM, "VIPS_ACCESS_RANDOM", "random" },
 1064|      1|			{ VIPS_ACCESS_SEQUENTIAL, "VIPS_ACCESS_SEQUENTIAL", "sequential" },
 1065|      1|			{ VIPS_ACCESS_SEQUENTIAL_UNBUFFERED, "VIPS_ACCESS_SEQUENTIAL_UNBUFFERED", "sequential-unbuffered" },
 1066|      1|			{ VIPS_ACCESS_LAST, "VIPS_ACCESS_LAST", "last" },
 1067|      1|			{ 0, NULL, NULL }
 1068|      1|		};
 1069|       |
 1070|      1|		GType new_type =
 1071|      1|			g_enum_register_static(g_intern_static_string("VipsAccess"), values);
 1072|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1073|      1|	}
 1074|       |
 1075|      3|	return (GType) gtype_id;
 1076|      3|}
vips_operation_morphology_get_type:
 1080|      1|{
 1081|      1|	static gsize gtype_id = 0;
 1082|       |
 1083|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1084|      1|		static const GEnumValue values[] = {
 1085|      1|			{ VIPS_OPERATION_MORPHOLOGY_ERODE, "VIPS_OPERATION_MORPHOLOGY_ERODE", "erode" },
 1086|      1|			{ VIPS_OPERATION_MORPHOLOGY_DILATE, "VIPS_OPERATION_MORPHOLOGY_DILATE", "dilate" },
 1087|      1|			{ VIPS_OPERATION_MORPHOLOGY_LAST, "VIPS_OPERATION_MORPHOLOGY_LAST", "last" },
 1088|      1|			{ 0, NULL, NULL }
 1089|      1|		};
 1090|       |
 1091|      1|		GType new_type =
 1092|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMorphology"), values);
 1093|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1094|      1|	}
 1095|       |
 1096|      1|	return (GType) gtype_id;
 1097|      1|}
vips_region_shrink_get_type:
 1155|      1|{
 1156|      1|	static gsize gtype_id = 0;
 1157|       |
 1158|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1159|      1|		static const GEnumValue values[] = {
 1160|      1|			{ VIPS_REGION_SHRINK_MEAN, "VIPS_REGION_SHRINK_MEAN", "mean" },
 1161|      1|			{ VIPS_REGION_SHRINK_MEDIAN, "VIPS_REGION_SHRINK_MEDIAN", "median" },
 1162|      1|			{ VIPS_REGION_SHRINK_MODE, "VIPS_REGION_SHRINK_MODE", "mode" },
 1163|      1|			{ VIPS_REGION_SHRINK_MAX, "VIPS_REGION_SHRINK_MAX", "max" },
 1164|      1|			{ VIPS_REGION_SHRINK_MIN, "VIPS_REGION_SHRINK_MIN", "min" },
 1165|      1|			{ VIPS_REGION_SHRINK_NEAREST, "VIPS_REGION_SHRINK_NEAREST", "nearest" },
 1166|      1|			{ VIPS_REGION_SHRINK_LAST, "VIPS_REGION_SHRINK_LAST", "last" },
 1167|      1|			{ 0, NULL, NULL }
 1168|      1|		};
 1169|       |
 1170|      1|		GType new_type =
 1171|      1|			g_enum_register_static(g_intern_static_string("VipsRegionShrink"), values);
 1172|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1173|      1|	}
 1174|       |
 1175|      1|	return (GType) gtype_id;
 1176|      1|}
vips_kernel_get_type:
 1180|      4|{
 1181|      4|	static gsize gtype_id = 0;
 1182|       |
 1183|      4|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      4|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 3]
  |  |  ------------------
  |  |  249|      4|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      4|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      4|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      8|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      8|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      8|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      8|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      8|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      8|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      8|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 3]
  |  |  ------------------
  |  |  252|      4|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      4|  }))
  ------------------
 1184|      1|		static const GEnumValue values[] = {
 1185|      1|			{ VIPS_KERNEL_NEAREST, "VIPS_KERNEL_NEAREST", "nearest" },
 1186|      1|			{ VIPS_KERNEL_LINEAR, "VIPS_KERNEL_LINEAR", "linear" },
 1187|      1|			{ VIPS_KERNEL_CUBIC, "VIPS_KERNEL_CUBIC", "cubic" },
 1188|      1|			{ VIPS_KERNEL_MITCHELL, "VIPS_KERNEL_MITCHELL", "mitchell" },
 1189|      1|			{ VIPS_KERNEL_LANCZOS2, "VIPS_KERNEL_LANCZOS2", "lanczos2" },
 1190|      1|			{ VIPS_KERNEL_LANCZOS3, "VIPS_KERNEL_LANCZOS3", "lanczos3" },
 1191|      1|			{ VIPS_KERNEL_MKS2013, "VIPS_KERNEL_MKS2013", "mks2013" },
 1192|      1|			{ VIPS_KERNEL_MKS2021, "VIPS_KERNEL_MKS2021", "mks2021" },
 1193|      1|			{ VIPS_KERNEL_LAST, "VIPS_KERNEL_LAST", "last" },
 1194|      1|			{ 0, NULL, NULL }
 1195|      1|		};
 1196|       |
 1197|      1|		GType new_type =
 1198|      1|			g_enum_register_static(g_intern_static_string("VipsKernel"), values);
 1199|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1200|      1|	}
 1201|       |
 1202|      4|	return (GType) gtype_id;
 1203|      4|}
vips_size_get_type:
 1206|      1|{
 1207|      1|	static gsize gtype_id = 0;
 1208|       |
 1209|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1210|      1|		static const GEnumValue values[] = {
 1211|      1|			{ VIPS_SIZE_BOTH, "VIPS_SIZE_BOTH", "both" },
 1212|      1|			{ VIPS_SIZE_UP, "VIPS_SIZE_UP", "up" },
 1213|      1|			{ VIPS_SIZE_DOWN, "VIPS_SIZE_DOWN", "down" },
 1214|      1|			{ VIPS_SIZE_FORCE, "VIPS_SIZE_FORCE", "force" },
 1215|      1|			{ VIPS_SIZE_LAST, "VIPS_SIZE_LAST", "last" },
 1216|      1|			{ 0, NULL, NULL }
 1217|      1|		};
 1218|       |
 1219|      1|		GType new_type =
 1220|      1|			g_enum_register_static(g_intern_static_string("VipsSize"), values);
 1221|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1222|      1|	}
 1223|       |
 1224|      1|	return (GType) gtype_id;
 1225|      1|}

vips_INT__VOID:
   60|   835k|{
   61|   835k|  typedef gint (*GMarshalFunc_INT__VOID) (gpointer data1,
   62|   835k|                                          gpointer data2);
   63|   835k|  GCClosure *cc = (GCClosure *) closure;
   64|   835k|  gpointer data1, data2;
   65|   835k|  GMarshalFunc_INT__VOID callback;
   66|   835k|  gint v_return;
   67|       |
   68|   835k|  g_return_if_fail (return_value != NULL);
  ------------------
  |  |  572|   835k|#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   835k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   835k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|   835k|  g_return_if_fail (n_param_values == 1);
  ------------------
  |  |  572|   835k|#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   835k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   835k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   70|       |
   71|   835k|  if (G_CCLOSURE_SWAP_DATA (closure))
  ------------------
  |  |   63|   835k|#define	G_CCLOSURE_SWAP_DATA(cclosure)	 (((GClosure*) (cclosure))->derivative_flag)
  |  |  ------------------
  |  |  |  Branch (63:41): [True: 0, False: 835k]
  |  |  ------------------
  ------------------
   72|      0|    {
   73|      0|      data1 = closure->data;
   74|      0|      data2 = g_value_peek_pointer (param_values + 0);
   75|      0|    }
   76|   835k|  else
   77|   835k|    {
   78|   835k|      data1 = g_value_peek_pointer (param_values + 0);
   79|   835k|      data2 = closure->data;
   80|   835k|    }
   81|   835k|  callback = (GMarshalFunc_INT__VOID) (marshal_data ? marshal_data : cc->callback);
  ------------------
  |  Branch (81:40): [True: 835k, False: 0]
  ------------------
   82|       |
   83|   835k|  v_return = callback (data1,
   84|   835k|                       data2);
   85|       |
   86|   835k|  g_value_set_int (return_value, v_return);
   87|   835k|}

LLVMFuzzerInitialize:
   13|      2|{
   14|      2|	if (VIPS_INIT(*argv[0]))
  ------------------
  |  |  153|      2|	(vips_version(3) - vips_version(5) != \
  |  |  ------------------
  |  |  |  Branch (153:2): [True: 0, False: 2]
  |  |  |  Branch (153:3): [True: 0, False: 2]
  |  |  ------------------
  |  |  154|      2|				VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \
  |  |  ------------------
  |  |  |  |   15|      2|#define VIPS_LIBRARY_CURRENT (61)
  |  |  ------------------
  |  |               				VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \
  |  |  ------------------
  |  |  |  |   17|      2|#define VIPS_LIBRARY_AGE (19)
  |  |  ------------------
  |  |  155|      2|			? ( \
  |  |  156|      0|				  g_warning("ABI mismatch"), \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  157|      0|				  g_warning("library has ABI version %d", \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  158|      0|					  vips_version(3) - vips_version(5)), \
  |  |  159|      0|				  g_warning("application needs ABI version %d", \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  160|      0|					  VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE), \
  |  |  161|      0|				  vips_error("vips_init", "ABI mismatch"), \
  |  |  162|      0|				  -1) \
  |  |  163|      2|			: vips_init(ARGV0))
  ------------------
   15|      0|		return -1;
   16|       |
   17|      2|	vips_concurrency_set(1);
   18|       |
   19|       |#ifdef DEBUG
   20|       |	printf("available suffixes:\n");
   21|       |	GSList *suffixes = nullptr;
   22|       |	char **array = vips_foreign_get_suffixes();
   23|       |	for (int i = 0; array[i] != nullptr; i++) {
   24|       |		if (!g_slist_find_custom(suffixes, array[i],
   25|       |			(GCompareFunc) g_strcmp0)) {
   26|       |			printf("%s\n", array[i]);
   27|       |			suffixes = g_slist_append(suffixes, g_strdup(array[i]));
   28|       |		}
   29|       |
   30|       |		g_free(array[i]);
   31|       |	}
   32|       |	g_free(array);
   33|       |	g_slist_free_full(suffixes, g_free);
   34|       |#endif
   35|       |
   36|      2|	return 0;
   37|      2|}
LLVMFuzzerTestOneInput:
   41|  33.1k|{
   42|  33.1k|	VipsImage *image;
   43|  33.1k|	void *buf;
   44|  33.1k|	size_t len;
   45|       |
   46|  33.1k|	if (!(image = vips_image_new_from_buffer(data, size, "", nullptr)))
  ------------------
  |  Branch (46:6): [True: 16.3k, False: 16.8k]
  ------------------
   47|  16.3k|		return 0;
   48|       |
   49|  16.8k|	if (image->Xsize > 100 ||
  ------------------
  |  Branch (49:6): [True: 893, False: 15.9k]
  ------------------
   50|  16.8k|		image->Ysize > 100 ||
  ------------------
  |  Branch (50:3): [True: 318, False: 15.5k]
  ------------------
   51|  16.8k|		image->Bands > 4) {
  ------------------
  |  Branch (51:3): [True: 26, False: 15.5k]
  ------------------
   52|  1.23k|		g_object_unref(image);
   53|  1.23k|		return 0;
   54|  1.23k|	}
   55|       |
   56|  15.5k|	if (vips_image_write_to_buffer(image, SAVE_SUFFIX, &buf, &len, nullptr)) {
  ------------------
  |  Branch (56:6): [True: 8.25k, False: 7.30k]
  ------------------
   57|  8.25k|		g_object_unref(image);
   58|  8.25k|		return 0;
   59|  8.25k|	}
   60|       |
   61|  7.30k|	g_free(buf);
   62|  7.30k|	g_object_unref(image);
   63|       |
   64|  7.30k|	return 0;
   65|  15.5k|}

abs.c:vips_abs_class_init:
  195|      1|{
  196|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  197|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  198|       |
  199|      1|	object_class->nickname = "abs";
  200|      1|	object_class->description = _("absolute value of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  201|      1|	object_class->build = vips_abs_build;
  202|       |
  203|      1|	aclass->process_line = vips_abs_buffer;
  204|       |
  205|      1|	vips_arithmetic_set_format_table(aclass, vips_abs_format_table);
  206|      1|}

add.c:vips_add_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  175|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  176|       |
  177|      1|	object_class->nickname = "add";
  178|      1|	object_class->description = _("add two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	aclass->process_line = add_buffer;
  181|       |
  182|      1|	vips_arithmetic_set_format_table(aclass, vips_add_format_table);
  183|      1|}

vips__formatalike_vec:
  320|  13.9k|{
  321|  13.9k|	int i;
  322|  13.9k|	VipsBandFormat format;
  323|       |
  324|  13.9k|	g_assert(n >= 1);
  ------------------
  |  |  166|  13.9k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|       |
  326|  13.9k|	format = in[0]->BandFmt;
  327|  13.9k|	for (i = 1; i < n; i++)
  ------------------
  |  Branch (327:14): [True: 0, False: 13.9k]
  ------------------
  328|      0|		format = vips_format_common(format, in[i]->BandFmt);
  329|       |
  330|  27.9k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (330:14): [True: 13.9k, False: 13.9k]
  ------------------
  331|  13.9k|		if (in[i]->BandFmt == format) {
  ------------------
  |  Branch (331:7): [True: 13.9k, False: 0]
  ------------------
  332|       |			/* Already in the right format ... just copy the image
  333|       |			 * pointer and add a ref.
  334|       |			 */
  335|  13.9k|			out[i] = in[i];
  336|  13.9k|			g_object_ref(in[i]);
  337|  13.9k|		}
  338|      0|		else {
  339|      0|			if (vips_cast(in[i], &out[i], format, NULL))
  ------------------
  |  Branch (339:8): [True: 0, False: 0]
  ------------------
  340|      0|				return -1;
  341|      0|		}
  342|       |
  343|  13.9k|	return 0;
  344|  13.9k|}
vips__sizealike_vec:
  348|  13.9k|{
  349|  13.9k|	int i;
  350|  13.9k|	int width_max;
  351|  13.9k|	int height_max;
  352|       |
  353|  13.9k|	g_assert(n >= 1);
  ------------------
  |  |  166|  13.9k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|       |
  355|  13.9k|	width_max = in[0]->Xsize;
  356|  13.9k|	height_max = in[0]->Ysize;
  357|  13.9k|	for (i = 1; i < n; i++) {
  ------------------
  |  Branch (357:14): [True: 0, False: 13.9k]
  ------------------
  358|      0|		width_max = VIPS_MAX(width_max, in[i]->Xsize);
  ------------------
  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  359|      0|		height_max = VIPS_MAX(height_max, in[i]->Ysize);
  ------------------
  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  360|      0|	}
  361|       |
  362|  27.9k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (362:14): [True: 13.9k, False: 13.9k]
  ------------------
  363|  13.9k|		if (in[i]->Xsize == width_max &&
  ------------------
  |  Branch (363:7): [True: 13.9k, False: 0]
  ------------------
  364|  13.9k|			in[i]->Ysize == height_max) {
  ------------------
  |  Branch (364:4): [True: 13.9k, False: 0]
  ------------------
  365|       |			/* Already the right size ... just copy the image
  366|       |			 * pointer and add a ref.
  367|       |			 */
  368|  13.9k|			out[i] = in[i];
  369|  13.9k|			g_object_ref(in[i]);
  370|  13.9k|		}
  371|      0|		else {
  372|      0|			if (vips_embed(in[i], &out[i],
  ------------------
  |  Branch (372:8): [True: 0, False: 0]
  ------------------
  373|      0|					0, 0, width_max, height_max, NULL))
  374|      0|				return -1;
  375|      0|		}
  376|       |
  377|  13.9k|	return 0;
  378|  13.9k|}
vips__bandalike_vec:
  420|  3.42k|{
  421|  3.42k|	int i;
  422|  3.42k|	int max_bands;
  423|  3.42k|	VipsInterpretation interpretation;
  424|       |
  425|  3.42k|	g_assert(n >= 1);
  ------------------
  |  |  166|  3.42k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  3.42k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.42k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|       |
  427|       |	/* We try to set the interpretation of the output images from the
  428|       |	 * interpretation of the n-band input. For example, if we are matching
  429|       |	 * a set of BW images to an RGB image, we want the BW images to be
  430|       |	 * tagged as RGB.
  431|       |	 */
  432|  3.42k|	max_bands = base_bands;
  433|  3.42k|	interpretation = VIPS_INTERPRETATION_ERROR;
  434|  6.84k|	for (i = 0; i < n; i++) {
  ------------------
  |  Branch (434:14): [True: 3.42k, False: 3.42k]
  ------------------
  435|       |		/* >= so we can pick up interpretation if base_bands is equal
  436|       |		 * to the number of bands of the largest image.
  437|       |		 */
  438|  3.42k|		if (in[i]->Bands >= max_bands) {
  ------------------
  |  Branch (438:7): [True: 3.42k, False: 0]
  ------------------
  439|  3.42k|			max_bands = in[i]->Bands;
  440|  3.42k|			interpretation = in[i]->Type;
  441|  3.42k|		}
  442|  3.42k|	}
  443|       |
  444|  6.84k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (444:14): [True: 3.42k, False: 3.42k]
  ------------------
  445|  3.42k|		if (in[i]->Bands == max_bands) {
  ------------------
  |  Branch (445:7): [True: 3.42k, False: 0]
  ------------------
  446|       |			/* Already the right number of bands ... just copy the
  447|       |			 * image pointer and add a ref.
  448|       |			 */
  449|  3.42k|			out[i] = in[i];
  450|  3.42k|			g_object_ref(in[i]);
  451|  3.42k|		}
  452|      0|		else {
  453|      0|			if (vips__bandup(domain, in[i], &out[i], max_bands))
  ------------------
  |  Branch (453:8): [True: 0, False: 0]
  ------------------
  454|      0|				return -1;
  455|       |
  456|      0|			if (interpretation != VIPS_INTERPRETATION_ERROR)
  ------------------
  |  Branch (456:8): [True: 0, False: 0]
  ------------------
  457|      0|				out[i]->Type = interpretation;
  458|      0|		}
  459|       |
  460|  3.42k|	return 0;
  461|  3.42k|}
vips_arithmetic_set_format_table:
  747|     26|{
  748|     26|	g_assert(!class->format_table);
  ------------------
  |  |  166|     26|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|     26|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     26|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|       |
  750|     26|	class->format_table = format_table;
  751|     26|}
vips_arithmetic_operation_init:
  758|      2|{
  759|      2|	extern GType vips_add_get_type(void);
  760|      2|	extern GType vips_clamp_get_type(void);
  761|      2|	extern GType vips_minpair_get_type(void);
  762|      2|	extern GType vips_maxpair_get_type(void);
  763|      2|	extern GType vips_sum_get_type(void);
  764|      2|	extern GType vips_subtract_get_type(void);
  765|      2|	extern GType vips_multiply_get_type(void);
  766|      2|	extern GType vips_divide_get_type(void);
  767|      2|	extern GType vips_invert_get_type(void);
  768|      2|	extern GType vips_avg_get_type(void);
  769|      2|	extern GType vips_min_get_type(void);
  770|      2|	extern GType vips_max_get_type(void);
  771|      2|	extern GType vips_deviate_get_type(void);
  772|      2|	extern GType vips_linear_get_type(void);
  773|      2|	extern GType vips_math_get_type(void);
  774|      2|	extern GType vips_abs_get_type(void);
  775|      2|	extern GType vips_sign_get_type(void);
  776|      2|	extern GType vips_stats_get_type(void);
  777|      2|	extern GType vips_hist_find_get_type(void);
  778|      2|	extern GType vips_hist_find_ndim_get_type(void);
  779|      2|	extern GType vips_hist_find_indexed_get_type(void);
  780|      2|	extern GType vips_hough_line_get_type(void);
  781|      2|	extern GType vips_hough_circle_get_type(void);
  782|      2|	extern GType vips_project_get_type(void);
  783|      2|	extern GType vips_profile_get_type(void);
  784|      2|	extern GType vips_measure_get_type(void);
  785|      2|	extern GType vips_getpoint_get_type(void);
  786|      2|	extern GType vips_round_get_type(void);
  787|      2|	extern GType vips_relational_get_type(void);
  788|      2|	extern GType vips_relational_const_get_type(void);
  789|      2|	extern GType vips_remainder_get_type(void);
  790|      2|	extern GType vips_remainder_const_get_type(void);
  791|      2|	extern GType vips_boolean_get_type(void);
  792|      2|	extern GType vips_boolean_const_get_type(void);
  793|      2|	extern GType vips_math2_get_type(void);
  794|      2|	extern GType vips_math2_const_get_type(void);
  795|      2|	extern GType vips_complex_get_type(void);
  796|      2|	extern GType vips_complex2_get_type(void);
  797|      2|	extern GType vips_complexget_get_type(void);
  798|      2|	extern GType vips_complexform_get_type(void);
  799|      2|	extern GType vips_find_trim_get_type(void);
  800|       |
  801|      2|	vips_add_get_type();
  802|      2|	vips_clamp_get_type();
  803|      2|	vips_minpair_get_type();
  804|      2|	vips_maxpair_get_type();
  805|      2|	vips_sum_get_type();
  806|      2|	vips_subtract_get_type();
  807|      2|	vips_multiply_get_type();
  808|      2|	vips_divide_get_type();
  809|      2|	vips_invert_get_type();
  810|      2|	vips_avg_get_type();
  811|      2|	vips_min_get_type();
  812|      2|	vips_max_get_type();
  813|      2|	vips_deviate_get_type();
  814|      2|	vips_linear_get_type();
  815|      2|	vips_math_get_type();
  816|      2|	vips_abs_get_type();
  817|      2|	vips_sign_get_type();
  818|      2|	vips_stats_get_type();
  819|      2|	vips_hist_find_get_type();
  820|      2|	vips_hist_find_ndim_get_type();
  821|      2|	vips_hist_find_indexed_get_type();
  822|      2|	vips_hough_line_get_type();
  823|      2|	vips_hough_circle_get_type();
  824|      2|	vips_project_get_type();
  825|      2|	vips_profile_get_type();
  826|      2|	vips_measure_get_type();
  827|      2|	vips_getpoint_get_type();
  828|      2|	vips_round_get_type();
  829|      2|	vips_relational_get_type();
  830|      2|	vips_relational_const_get_type();
  831|      2|	vips_remainder_get_type();
  832|      2|	vips_remainder_const_get_type();
  833|      2|	vips_boolean_get_type();
  834|      2|	vips_boolean_const_get_type();
  835|      2|	vips_math2_get_type();
  836|      2|	vips_math2_const_get_type();
  837|      2|	vips_complex_get_type();
  838|      2|	vips_complex2_get_type();
  839|      2|	vips_complexget_get_type();
  840|      2|	vips_complexform_get_type();
  841|      2|	vips_find_trim_get_type();
  842|      2|}
arithmetic.c:vips_arithmetic_class_init:
  716|      1|{
  717|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  718|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  719|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  720|       |
  721|      1|	gobject_class->set_property = vips_object_set_property;
  722|      1|	gobject_class->get_property = vips_object_get_property;
  723|       |
  724|      1|	vobject_class->nickname = "arithmetic";
  725|      1|	vobject_class->description = _("arithmetic operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  726|      1|	vobject_class->build = vips_arithmetic_build;
  727|       |
  728|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  729|       |
  730|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  731|      1|		_("Output"),
  732|      1|		_("Output image"),
  733|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  734|      1|		G_STRUCT_OFFSET(VipsArithmetic, out));
  735|      1|}
arithmetic.c:vips_arithmetic_build:
  644|  3.42k|{
  645|  3.42k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  3.42k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  3.42k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.42k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|  3.42k|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  3.42k|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  647|  3.42k|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_GET_CLASS(arithmetic);
  ------------------
  |  |   52|  3.42k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  3.42k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.42k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  3.42k|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  648|       |
  649|  3.42k|	VipsImage **decode;
  650|  3.42k|	VipsImage **format;
  651|  3.42k|	VipsImage **band;
  652|  3.42k|	VipsImage **size;
  653|  3.42k|	int i;
  654|       |
  655|       |#ifdef DEBUG
  656|       |	printf("vips_arithmetic_build: ");
  657|       |	vips_object_print_name(object);
  658|       |	printf("\n");
  659|       |#endif /*DEBUG*/
  660|       |
  661|  3.42k|	if (VIPS_OBJECT_CLASS(vips_arithmetic_parent_class)->build(object))
  ------------------
  |  |  435|  3.42k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  3.42k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  3.42k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (661:6): [True: 0, False: 3.42k]
  ------------------
  662|      0|		return -1;
  663|       |
  664|  3.42k|	g_object_set(arithmetic, "out", vips_image_new(), NULL);
  665|       |
  666|  3.42k|	decode = (VipsImage **)
  667|  3.42k|		vips_object_local_array(object, arithmetic->n);
  668|  3.42k|	format = (VipsImage **)
  669|  3.42k|		vips_object_local_array(object, arithmetic->n);
  670|  3.42k|	band = (VipsImage **)
  671|  3.42k|		vips_object_local_array(object, arithmetic->n);
  672|  3.42k|	size = (VipsImage **)
  673|  3.42k|		vips_object_local_array(object, arithmetic->n);
  674|       |
  675|       |	/* Decode RAD/LABQ etc.
  676|       |	 */
  677|  6.84k|	for (i = 0; i < arithmetic->n; i++)
  ------------------
  |  Branch (677:14): [True: 3.42k, False: 3.42k]
  ------------------
  678|  3.42k|		if (vips_image_decode(arithmetic->in[i], &decode[i]))
  ------------------
  |  Branch (678:7): [True: 0, False: 3.42k]
  ------------------
  679|      0|			return -1;
  680|       |
  681|       |	/* Cast our input images up to a common format, bands and size.
  682|       |	 */
  683|  3.42k|	if (vips__formatalike_vec(decode, format, arithmetic->n) ||
  ------------------
  |  Branch (683:6): [True: 0, False: 3.42k]
  ------------------
  684|  3.42k|		vips__bandalike_vec(class->nickname,
  ------------------
  |  Branch (684:3): [True: 0, False: 3.42k]
  ------------------
  685|  3.42k|			format, band, arithmetic->n, arithmetic->base_bands) ||
  686|  3.42k|		vips__sizealike_vec(band, size, arithmetic->n))
  ------------------
  |  Branch (686:3): [True: 0, False: 3.42k]
  ------------------
  687|      0|		return -1;
  688|       |
  689|       |	/* Keep a copy of the processed images here for subclasses.
  690|       |	 */
  691|  3.42k|	arithmetic->ready = size;
  692|       |
  693|  3.42k|	if (vips_image_pipeline_array(arithmetic->out,
  ------------------
  |  Branch (693:6): [True: 0, False: 3.42k]
  ------------------
  694|  3.42k|			VIPS_DEMAND_STYLE_THINSTRIP, arithmetic->ready))
  695|      0|		return -1;
  696|       |
  697|  3.42k|	arithmetic->out->Bands = arithmetic->ready[0]->Bands;
  698|  3.42k|	if (arithmetic->format != VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (698:6): [True: 0, False: 3.42k]
  ------------------
  699|      0|		arithmetic->out->BandFmt = arithmetic->format;
  700|  3.42k|	else
  701|  3.42k|		arithmetic->out->BandFmt =
  702|  3.42k|			aclass->format_table[arithmetic->ready[0]->BandFmt];
  703|       |
  704|  3.42k|	if (vips_image_generate(arithmetic->out,
  ------------------
  |  Branch (704:6): [True: 0, False: 3.42k]
  ------------------
  705|  3.42k|			vips_arithmetic_start,
  706|  3.42k|			vips_arithmetic_gen,
  707|  3.42k|			vips_arithmetic_stop,
  708|  3.42k|			arithmetic->ready, arithmetic))
  709|      0|		return -1;
  710|       |
  711|  3.42k|	return 0;
  712|  3.42k|}
arithmetic.c:vips_arithmetic_start:
  557|  3.42k|{
  558|  3.42k|	VipsImage **in = (VipsImage **) a;
  559|  3.42k|	VipsArithmetic *arithmetic = (VipsArithmetic *) b;
  560|       |
  561|  3.42k|	VipsArithmeticSequence *seq;
  562|  3.42k|	int i, n;
  563|       |
  564|  3.42k|	if (!(seq = VIPS_NEW(NULL, VipsArithmeticSequence)))
  ------------------
  |  |   70|  3.42k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.42k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (564:6): [True: 0, False: 3.42k]
  ------------------
  565|      0|		return NULL;
  566|       |
  567|  3.42k|	seq->arithmetic = arithmetic;
  568|  3.42k|	seq->ir = NULL;
  569|  3.42k|	seq->p = NULL;
  570|       |
  571|       |	/* How many images?
  572|       |	 */
  573|  6.84k|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (573:14): [True: 3.42k, False: 3.42k]
  ------------------
  574|  3.42k|		;
  575|       |
  576|       |	/* Allocate space for region array.
  577|       |	 */
  578|  3.42k|	if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) {
  ------------------
  |  |   72|  3.42k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.42k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (578:6): [True: 0, False: 3.42k]
  ------------------
  579|      0|		vips_arithmetic_stop(seq, NULL, NULL);
  580|      0|		return NULL;
  581|      0|	}
  582|       |
  583|       |	/* Create a set of regions.
  584|       |	 */
  585|  6.84k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (585:14): [True: 3.42k, False: 3.42k]
  ------------------
  586|  3.42k|		if (!(seq->ir[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (586:7): [True: 0, False: 3.42k]
  ------------------
  587|      0|			vips_arithmetic_stop(seq, NULL, NULL);
  588|      0|			return NULL;
  589|      0|		}
  590|  3.42k|	seq->ir[n] = NULL;
  591|       |
  592|       |	/* Input pointers.
  593|       |	 */
  594|  3.42k|	if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) {
  ------------------
  |  |   72|  3.42k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.42k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (594:6): [True: 0, False: 3.42k]
  ------------------
  595|      0|		vips_arithmetic_stop(seq, NULL, NULL);
  596|      0|		return NULL;
  597|      0|	}
  598|       |
  599|  3.42k|	return seq;
  600|  3.42k|}
arithmetic.c:vips_arithmetic_gen:
  605|  3.95k|{
  606|  3.95k|	VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq;
  607|  3.95k|	VipsRegion **ir = seq->ir;
  608|  3.95k|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(b);
  ------------------
  |  |   42|  3.95k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  3.95k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.95k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  3.95k|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  609|  3.95k|	VipsArithmeticClass *class = VIPS_ARITHMETIC_GET_CLASS(arithmetic);
  ------------------
  |  |   52|  3.95k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  3.95k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.95k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  3.95k|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  610|  3.95k|	VipsRect *r = &out_region->valid;
  611|       |
  612|  3.95k|	VipsPel *q;
  613|  3.95k|	int i, y;
  614|       |
  615|       |	/* Prepare all input regions and make buffer pointers.
  616|       |	 */
  617|  3.95k|	if (vips_reorder_prepare_many(out_region->im, ir, r))
  ------------------
  |  Branch (617:6): [True: 2.49k, False: 1.46k]
  ------------------
  618|  2.49k|		return -1;
  619|  2.92k|	for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (619:14): [True: 1.46k, False: 1.46k]
  ------------------
  620|  1.46k|		seq->p[i] = (VipsPel *)
  621|  1.46k|			VIPS_REGION_ADDR(ir[i], r->left, r->top);
  ------------------
  |  |  227|  2.92k|	((R)->data + \
  |  |  228|  2.92k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.46k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  2.92k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.46k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.46k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.46k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|  1.46k|	seq->p[i] = NULL;
  623|  1.46k|	q = (VipsPel *) VIPS_REGION_ADDR(out_region, r->left, r->top);
  ------------------
  |  |  227|  1.46k|	((R)->data + \
  |  |  228|  1.46k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.46k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.46k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.46k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.46k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.46k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|       |
  625|  1.46k|	VIPS_GATE_START("vips_arithmetic_gen: work");
  ------------------
  |  |   41|  1.46k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.46k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  1.46k|	{ \
  |  |   43|  1.46k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 1.46k]
  |  |  ------------------
  |  |   44|  1.46k|			vips__thread_gate_start(NAME); \
  |  |   45|  1.46k|	} \
  |  |   46|  1.46k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.46k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|       |
  627|  21.3k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (627:14): [True: 19.9k, False: 1.46k]
  ------------------
  628|  19.9k|		class->process_line(arithmetic, q, seq->p, r->width);
  629|       |
  630|  39.8k|		for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (630:15): [True: 19.9k, False: 19.9k]
  ------------------
  631|  19.9k|			seq->p[i] += VIPS_REGION_LSKIP(ir[i]);
  ------------------
  |  |  195|  19.9k|	((size_t) ((R)->bpl))
  ------------------
  632|  19.9k|		q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|  19.9k|	((size_t) ((R)->bpl))
  ------------------
  633|  19.9k|	}
  634|       |
  635|  1.46k|	VIPS_GATE_STOP("vips_arithmetic_gen: work");
  ------------------
  |  |   49|  1.46k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.46k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  1.46k|	{ \
  |  |   51|  1.46k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 1.46k]
  |  |  ------------------
  |  |   52|  1.46k|			vips__thread_gate_stop(NAME); \
  |  |   53|  1.46k|	} \
  |  |   54|  1.46k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.46k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  636|       |
  637|  1.46k|	VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_CLASS(class)->nickname);
  ------------------
  |  |  189|  1.46k|#define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N)
  ------------------
  638|       |
  639|  1.46k|	return 0;
  640|  3.95k|}
arithmetic.c:vips_arithmetic_stop:
  537|  3.42k|{
  538|  3.42k|	VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq;
  539|       |
  540|  3.42k|	if (seq->ir) {
  ------------------
  |  Branch (540:6): [True: 3.42k, False: 0]
  ------------------
  541|  3.42k|		int i;
  542|       |
  543|  6.84k|		for (i = 0; seq->ir[i]; i++)
  ------------------
  |  Branch (543:15): [True: 3.42k, False: 3.42k]
  ------------------
  544|  3.42k|			VIPS_UNREF(seq->ir[i]);
  ------------------
  |  |   57|  3.42k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  3.42k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.42k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.42k|	{ \
  |  |  |  |   43|  3.42k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.42k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.42k|			(void) F((S)); \
  |  |  |  |   45|  3.42k|			(S) = 0; \
  |  |  |  |   46|  3.42k|		} \
  |  |  |  |   47|  3.42k|	} \
  |  |  |  |   48|  3.42k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.42k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|  3.42k|		VIPS_FREE(seq->ir);
  ------------------
  |  |   50|  3.42k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.42k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.42k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.42k|	{ \
  |  |  |  |   43|  3.42k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.42k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.42k|			(void) F((S)); \
  |  |  |  |   45|  3.42k|			(S) = 0; \
  |  |  |  |   46|  3.42k|		} \
  |  |  |  |   47|  3.42k|	} \
  |  |  |  |   48|  3.42k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.42k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|  3.42k|	}
  547|       |
  548|  3.42k|	VIPS_FREE(seq->p);
  ------------------
  |  |   50|  3.42k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.42k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.42k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.42k|	{ \
  |  |  |  |   43|  3.42k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.42k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.42k|			(void) F((S)); \
  |  |  |  |   45|  3.42k|			(S) = 0; \
  |  |  |  |   46|  3.42k|		} \
  |  |  |  |   47|  3.42k|	} \
  |  |  |  |   48|  3.42k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.42k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|  3.42k|	VIPS_FREE(seq);
  ------------------
  |  |   50|  3.42k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.42k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.42k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.42k|	{ \
  |  |  |  |   43|  3.42k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.42k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.42k|			(void) F((S)); \
  |  |  |  |   45|  3.42k|			(S) = 0; \
  |  |  |  |   46|  3.42k|		} \
  |  |  |  |   47|  3.42k|	} \
  |  |  |  |   48|  3.42k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.42k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|       |
  552|  3.42k|	return 0;
  553|  3.42k|}
arithmetic.c:vips_arithmetic_init:
  739|  3.42k|{
  740|  3.42k|	arithmetic->base_bands = 1;
  741|  3.42k|	arithmetic->format = VIPS_FORMAT_NOTSET;
  742|  3.42k|}

avg.c:vips_avg_class_init:
  218|      1|{
  219|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  221|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  222|       |
  223|      1|	gobject_class->set_property = vips_object_set_property;
  224|      1|	gobject_class->get_property = vips_object_get_property;
  225|       |
  226|      1|	object_class->nickname = "avg";
  227|      1|	object_class->description = _("find image average");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  228|      1|	object_class->build = vips_avg_build;
  229|       |
  230|      1|	sclass->start = vips_avg_start;
  231|      1|	sclass->scan = vips_avg_scan;
  232|      1|	sclass->stop = vips_avg_stop;
  233|       |
  234|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  235|      1|		_("Output"),
  236|      1|		_("Output value"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  238|      1|		G_STRUCT_OFFSET(VipsAvg, out),
  239|      1|		-INFINITY, INFINITY, 0.0);
  240|      1|}

binary.c:vips_binary_class_init:
   81|      1|{
   82|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|       |
   85|      1|	gobject_class->set_property = vips_object_set_property;
   86|      1|	gobject_class->get_property = vips_object_get_property;
   87|       |
   88|      1|	vobject_class->nickname = "binary";
   89|      1|	vobject_class->description = _("binary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   90|      1|	vobject_class->build = vips_binary_build;
   91|       |
   92|       |	/* Create properties.
   93|       |	 */
   94|       |
   95|      1|	VIPS_ARG_IMAGE(class, "left", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   96|      1|		_("Left"),
   97|      1|		_("Left-hand image argument"),
   98|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   99|      1|		G_STRUCT_OFFSET(VipsBinary, left));
  100|       |
  101|      1|	VIPS_ARG_IMAGE(class, "right", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  102|      1|		_("Right"),
  103|      1|		_("Right-hand image argument"),
  104|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  105|      1|		G_STRUCT_OFFSET(VipsBinary, right));
  106|      1|}

vips_rshift_const1:
  956|  3.39k|{
  957|  3.39k|	va_list ap;
  958|  3.39k|	int result;
  959|       |
  960|  3.39k|	va_start(ap, c);
  961|  3.39k|	result = vips_boolean_constv(in, out,
  962|  3.39k|		VIPS_OPERATION_BOOLEAN_RSHIFT, &c, 1, ap);
  963|  3.39k|	va_end(ap);
  964|       |
  965|  3.39k|	return result;
  966|  3.39k|}
boolean.c:vips_boolean_class_init:
  260|      1|{
  261|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  263|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  264|       |
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	object_class->nickname = "boolean";
  269|      1|	object_class->description = _("boolean operation on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	object_class->build = vips_boolean_build;
  271|       |
  272|      1|	aclass->process_line = vips_boolean_buffer;
  273|       |
  274|      1|	vips_arithmetic_set_format_table(aclass, vips_boolean_format_table);
  275|       |
  276|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  277|      1|		_("Operation"),
  278|      1|		_("Boolean to perform"),
  279|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsBoolean, operation),
  281|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  282|      1|		VIPS_OPERATION_BOOLEAN_AND);
  283|      1|}
boolean.c:vips_boolean_const_class_init:
  559|      1|{
  560|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  561|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  562|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  563|       |
  564|      1|	gobject_class->set_property = vips_object_set_property;
  565|      1|	gobject_class->get_property = vips_object_get_property;
  566|       |
  567|      1|	object_class->nickname = "boolean_const";
  568|      1|	object_class->description =
  569|      1|		_("boolean operations against a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  570|      1|	object_class->build = vips_boolean_const_build;
  571|       |
  572|      1|	aclass->process_line = vips_boolean_const_buffer;
  573|       |
  574|      1|	vips_arithmetic_set_format_table(aclass, vips_boolean_format_table);
  575|       |
  576|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  577|      1|		_("Operation"),
  578|      1|		_("Boolean to perform"),
  579|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  580|      1|		G_STRUCT_OFFSET(VipsBooleanConst, operation),
  581|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  582|      1|		VIPS_OPERATION_BOOLEAN_AND);
  583|      1|}
boolean.c:vips_boolean_const_build:
  484|  3.39k|{
  485|  3.39k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  3.39k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  3.39k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.39k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  486|  3.39k|	VipsUnary *unary = (VipsUnary *) object;
  487|       |
  488|  3.39k|	if (unary->in &&
  ------------------
  |  Branch (488:6): [True: 3.39k, False: 0]
  ------------------
  489|  3.39k|		vips_check_noncomplex(class->nickname, unary->in))
  ------------------
  |  Branch (489:3): [True: 0, False: 3.39k]
  ------------------
  490|      0|		return -1;
  491|       |
  492|  3.39k|	if (VIPS_OBJECT_CLASS(vips_boolean_const_parent_class)->build(object))
  ------------------
  |  |  435|  3.39k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  3.39k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  3.39k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (492:6): [True: 0, False: 3.39k]
  ------------------
  493|      0|		return -1;
  494|       |
  495|  3.39k|	return 0;
  496|  3.39k|}
boolean.c:vips_boolean_const_buffer:
  523|  19.8k|{
  524|  19.8k|	VipsUnaryConst *uconst = (VipsUnaryConst *) arithmetic;
  525|  19.8k|	VipsBooleanConst *bconst = (VipsBooleanConst *) arithmetic;
  526|  19.8k|	VipsImage *im = arithmetic->ready[0];
  527|  19.8k|	int bands = im->Bands;
  528|       |
  529|  19.8k|	int i, x, b;
  530|       |
  531|  19.8k|	switch (bconst->operation) {
  532|      0|	case VIPS_OPERATION_BOOLEAN_AND:
  ------------------
  |  Branch (532:2): [True: 0, False: 19.8k]
  ------------------
  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  ------------------
  |  |  132|      0|	switch (vips_image_get_format(im)) { \
  |  |  133|      0|	case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (133:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  134|      0|		I(unsigned char, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|		break; \
  |  |  136|      0|	case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (136:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|		I(signed char, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|		break; \
  |  |  139|      0|	case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (139:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|		I(unsigned short, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|		break; \
  |  |  142|      0|	case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  143|      0|		I(signed short, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      0|		break; \
  |  |  145|      0|	case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (145:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|		I(unsigned int, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      0|		break; \
  |  |  148|      0|	case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  149|      0|		I(signed int, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|		break; \
  |  |  151|      0|	case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (151:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|		F(float, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|      0|		break; \
  |  |  154|      0|	case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (154:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  155|      0|		F(double, OP); \
  |  |  ------------------
  |  |  |  |  533|      0|		SWITCH(LOOPC, FLOOPC, &);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      0|		break; \
  |  |  157|      0|\
  |  |  158|      0|	default: \
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  159|      0|		g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|	}
  ------------------
  534|      0|		break;
  535|       |
  536|      0|	case VIPS_OPERATION_BOOLEAN_OR:
  ------------------
  |  Branch (536:2): [True: 0, False: 19.8k]
  ------------------
  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  ------------------
  |  |  132|      0|	switch (vips_image_get_format(im)) { \
  |  |  133|      0|	case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (133:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  134|      0|		I(unsigned char, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|		break; \
  |  |  136|      0|	case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (136:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|		I(signed char, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|		break; \
  |  |  139|      0|	case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (139:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|		I(unsigned short, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|		break; \
  |  |  142|      0|	case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  143|      0|		I(signed short, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      0|		break; \
  |  |  145|      0|	case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (145:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|		I(unsigned int, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      0|		break; \
  |  |  148|      0|	case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  149|      0|		I(signed int, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|		break; \
  |  |  151|      0|	case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (151:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|		F(float, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|      0|		break; \
  |  |  154|      0|	case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (154:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  155|      0|		F(double, OP); \
  |  |  ------------------
  |  |  |  |  537|      0|		SWITCH(LOOPC, FLOOPC, |);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      0|		break; \
  |  |  157|      0|\
  |  |  158|      0|	default: \
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  159|      0|		g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|	}
  ------------------
  538|      0|		break;
  539|       |
  540|      0|	case VIPS_OPERATION_BOOLEAN_EOR:
  ------------------
  |  Branch (540:2): [True: 0, False: 19.8k]
  ------------------
  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  ------------------
  |  |  132|      0|	switch (vips_image_get_format(im)) { \
  |  |  133|      0|	case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (133:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  134|      0|		I(unsigned char, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|		break; \
  |  |  136|      0|	case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (136:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|		I(signed char, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|		break; \
  |  |  139|      0|	case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (139:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|		I(unsigned short, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|		break; \
  |  |  142|      0|	case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  143|      0|		I(signed short, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      0|		break; \
  |  |  145|      0|	case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (145:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|		I(unsigned int, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      0|		break; \
  |  |  148|      0|	case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  149|      0|		I(signed int, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|		break; \
  |  |  151|      0|	case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (151:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|		F(float, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|      0|		break; \
  |  |  154|      0|	case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (154:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  155|      0|		F(double, OP); \
  |  |  ------------------
  |  |  |  |  541|      0|		SWITCH(LOOPC, FLOOPC, ^);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      0|		break; \
  |  |  157|      0|\
  |  |  158|      0|	default: \
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  159|      0|		g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|	}
  ------------------
  542|      0|		break;
  543|       |
  544|      0|	case VIPS_OPERATION_BOOLEAN_LSHIFT:
  ------------------
  |  Branch (544:2): [True: 0, False: 19.8k]
  ------------------
  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  ------------------
  |  |  132|      0|	switch (vips_image_get_format(im)) { \
  |  |  133|      0|	case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (133:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  134|      0|		I(unsigned char, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|		break; \
  |  |  136|      0|	case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (136:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|		I(signed char, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|		break; \
  |  |  139|      0|	case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (139:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  140|      0|		I(unsigned short, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|		break; \
  |  |  142|      0|	case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  143|      0|		I(signed short, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      0|		break; \
  |  |  145|      0|	case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (145:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|		I(unsigned int, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      0|		break; \
  |  |  148|      0|	case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  149|      0|		I(signed int, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|		break; \
  |  |  151|      0|	case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (151:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|		F(float, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|      0|		break; \
  |  |  154|      0|	case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (154:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  155|      0|		F(double, OP); \
  |  |  ------------------
  |  |  |  |  545|      0|		SWITCH(LOOPC, FLOOPC, <<);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      0|		break; \
  |  |  157|      0|\
  |  |  158|      0|	default: \
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  159|      0|		g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      0|	}
  ------------------
  546|      0|		break;
  547|       |
  548|  19.8k|	case VIPS_OPERATION_BOOLEAN_RSHIFT:
  ------------------
  |  Branch (548:2): [True: 19.8k, False: 0]
  ------------------
  549|  19.8k|		SWITCH(LOOPC, FLOOPC, >>);
  ------------------
  |  |  132|  19.8k|	switch (vips_image_get_format(im)) { \
  |  |  133|      0|	case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (133:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  134|      0|		I(unsigned char, OP); \
  |  |  ------------------
  |  |  |  |  549|      0|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|		break; \
  |  |  136|      0|	case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (136:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  137|      0|		I(signed char, OP); \
  |  |  ------------------
  |  |  |  |  549|      0|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|      0|		break; \
  |  |  139|  16.6k|	case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (139:2): [True: 16.6k, False: 3.24k]
  |  |  ------------------
  |  |  140|  16.6k|		I(unsigned short, OP); \
  |  |  ------------------
  |  |  |  |  549|  16.6k|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|  16.6k|	{ \
  |  |  |  |  |  |  500|  16.6k|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|  16.6k|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|  16.6k|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|  16.6k|\
  |  |  |  |  |  |  504|   486k|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 469k, False: 16.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|   939k|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 469k, False: 469k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|   469k|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|  16.6k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|  16.6k|		break; \
  |  |  142|  1.46k|	case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 1.46k, False: 18.4k]
  |  |  ------------------
  |  |  143|  1.46k|		I(signed short, OP); \
  |  |  ------------------
  |  |  |  |  549|  1.46k|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|  1.46k|	{ \
  |  |  |  |  |  |  500|  1.46k|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|  1.46k|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|  1.46k|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|  1.46k|\
  |  |  |  |  |  |  504|  23.1k|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 21.7k, False: 1.46k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|  43.4k|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 21.7k, False: 21.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|  21.7k|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|  1.46k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|  1.46k|		break; \
  |  |  145|      0|	case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (145:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  146|      0|		I(unsigned int, OP); \
  |  |  ------------------
  |  |  |  |  549|      0|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      0|		break; \
  |  |  148|      0|	case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  149|      0|		I(signed int, OP); \
  |  |  ------------------
  |  |  |  |  549|      0|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  499|      0|	{ \
  |  |  |  |  |  |  500|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  501|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  |  |  |  |  502|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  503|      0|\
  |  |  |  |  |  |  504|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (504:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  505|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (505:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  506|      0|				q[i] = p[i] OP c[b]; \
  |  |  |  |  |  |  507|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|		break; \
  |  |  151|  1.77k|	case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (151:2): [True: 1.77k, False: 18.1k]
  |  |  ------------------
  |  |  152|  1.77k|		F(float, OP); \
  |  |  ------------------
  |  |  |  |  549|  1.77k|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|  1.77k|	{ \
  |  |  |  |  |  |  511|  1.77k|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|  1.77k|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|  1.77k|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|  1.77k|\
  |  |  |  |  |  |  515|  30.4k|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 28.6k, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|  57.3k|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 28.6k, False: 28.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  28.6k|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|  1.77k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|  1.77k|		break; \
  |  |  154|      0|	case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (154:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  155|      0|		F(double, OP); \
  |  |  ------------------
  |  |  |  |  549|      0|		SWITCH(LOOPC, FLOOPC, >>);
  |  |  |  |  ------------------
  |  |  |  |  |  |  510|      0|	{ \
  |  |  |  |  |  |  511|      0|		TYPE *restrict p = (TYPE *) in[0]; \
  |  |  |  |  |  |  512|      0|		int *restrict q = (int *) out; \
  |  |  |  |  |  |  513|      0|		int *restrict c = uconst->c_int; \
  |  |  |  |  |  |  514|      0|\
  |  |  |  |  |  |  515|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (515:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  516|      0|			for (b = 0; b < bands; b++, i++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (516:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|				q[i] = ((int) p[i]) OP((int) c[b]); \
  |  |  |  |  |  |  518|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      0|		break; \
  |  |  157|      0|\
  |  |  158|      0|	default: \
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 19.8k]
  |  |  ------------------
  |  |  159|      0|		g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|  19.8k|	}
  ------------------
  550|  19.8k|		break;
  551|       |
  552|      0|	default:
  ------------------
  |  Branch (552:2): [True: 0, False: 19.8k]
  ------------------
  553|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|  19.8k|	}
  555|  19.8k|}
boolean.c:vips_boolean_const_init:
  587|  3.39k|{
  588|  3.39k|}
boolean.c:vips_boolean_constv:
  593|  3.39k|{
  594|  3.39k|	VipsArea *area_c;
  595|  3.39k|	double *array;
  596|  3.39k|	int result;
  597|  3.39k|	int i;
  598|       |
  599|  3.39k|	area_c = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n);
  ------------------
  |  |  148|  3.39k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|  3.39k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  3.39k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|  3.39k|	array = (double *) area_c->data;
  601|  6.79k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (601:14): [True: 3.39k, False: 3.39k]
  ------------------
  602|  3.39k|		array[i] = c[i];
  603|       |
  604|  3.39k|	result = vips_call_split("boolean_const", ap,
  605|  3.39k|		in, out, operation, area_c);
  606|       |
  607|  3.39k|	vips_area_unref(area_c);
  608|       |
  609|  3.39k|	return result;
  610|  3.39k|}

clamp.c:vips_clamp_class_init:
  146|      1|{
  147|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  148|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  149|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  150|       |
  151|      1|	gobject_class->set_property = vips_object_set_property;
  152|      1|	gobject_class->get_property = vips_object_get_property;
  153|       |
  154|      1|	object_class->nickname = "clamp";
  155|      1|	object_class->description = _("clamp values of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  156|       |
  157|      1|	aclass->process_line = vips_clamp_buffer;
  158|       |
  159|      1|	vips_arithmetic_set_format_table(aclass, vips_clamp_format_table);
  160|       |
  161|      1|	VIPS_ARG_DOUBLE(class, "min", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  162|      1|		_("Min"),
  163|      1|		_("Minimum value"),
  164|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  165|      1|		G_STRUCT_OFFSET(VipsClamp, min),
  166|      1|		-INFINITY, INFINITY, 0.0);
  167|       |
  168|      1|	VIPS_ARG_DOUBLE(class, "max", 11,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  169|      1|		_("Max"),
  170|      1|		_("Maximum value"),
  171|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  172|      1|		G_STRUCT_OFFSET(VipsClamp, max),
  173|      1|		-INFINITY, INFINITY, 1.0);
  174|      1|}

complex.c:vips_complex_class_init:
  241|      1|{
  242|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  244|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  245|       |
  246|      1|	gobject_class->set_property = vips_object_set_property;
  247|      1|	gobject_class->get_property = vips_object_get_property;
  248|       |
  249|      1|	object_class->nickname = "complex";
  250|      1|	object_class->description =
  251|      1|		_("perform a complex operation on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  252|       |
  253|      1|	aclass->process_line = vips_complex_buffer;
  254|       |
  255|      1|	vips_arithmetic_set_format_table(aclass, vips_complex_format_table);
  256|       |
  257|      1|	VIPS_ARG_ENUM(class, "cmplx", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  258|      1|		_("Operation"),
  259|      1|		_("Complex to perform"),
  260|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  261|      1|		G_STRUCT_OFFSET(VipsComplex, cmplx),
  262|      1|		VIPS_TYPE_OPERATION_COMPLEX, VIPS_OPERATION_COMPLEX_POLAR);
  263|      1|}
complex.c:vips_complex2_class_init:
  521|      1|{
  522|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  524|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  525|       |
  526|      1|	gobject_class->set_property = vips_object_set_property;
  527|      1|	gobject_class->get_property = vips_object_get_property;
  528|       |
  529|      1|	object_class->nickname = "complex2";
  530|      1|	object_class->description =
  531|      1|		_("complex binary operations on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  532|       |
  533|      1|	aclass->process_line = vips_complex2_buffer;
  534|       |
  535|      1|	vips_arithmetic_set_format_table(aclass, vips_complex2_format_table);
  536|       |
  537|      1|	VIPS_ARG_ENUM(class, "cmplx", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  538|      1|		_("Operation"),
  539|      1|		_("Binary complex operation to perform"),
  540|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  541|      1|		G_STRUCT_OFFSET(VipsComplex2, cmplx),
  542|      1|		VIPS_TYPE_OPERATION_COMPLEX2,
  543|      1|		VIPS_OPERATION_COMPLEX2_CROSS_PHASE);
  544|      1|}
complex.c:vips_complexget_class_init:
  753|      1|{
  754|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  756|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  757|       |
  758|      1|	gobject_class->set_property = vips_object_set_property;
  759|      1|	gobject_class->get_property = vips_object_get_property;
  760|       |
  761|      1|	object_class->nickname = "complexget";
  762|      1|	object_class->description = _("get a component from a complex image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  763|      1|	object_class->build = vips_complexget_build;
  764|       |
  765|      1|	aclass->process_line = vips_complexget_buffer;
  766|       |
  767|      1|	vips_arithmetic_set_format_table(aclass,
  768|      1|		vips_complexget_format_table);
  769|       |
  770|      1|	VIPS_ARG_ENUM(class, "get", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  771|      1|		_("Operation"),
  772|      1|		_("Complex to perform"),
  773|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  774|      1|		G_STRUCT_OFFSET(VipsComplexget, get),
  775|      1|		VIPS_TYPE_OPERATION_COMPLEXGET,
  776|      1|		VIPS_OPERATION_COMPLEXGET_REAL);
  777|      1|}
complex.c:vips_complexform_class_init:
  972|      1|{
  973|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  974|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  975|       |
  976|      1|	object_class->nickname = "complexform";
  977|      1|	object_class->description =
  978|      1|		_("form a complex image from two real images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  979|      1|	object_class->build = vips_complexform_build;
  980|       |
  981|      1|	aclass->process_line = vips_complexform_buffer;
  982|       |
  983|      1|	vips_arithmetic_set_format_table(aclass,
  984|      1|		vips_complexform_format_table);
  985|      1|}

deviate.c:vips_deviate_class_init:
  220|      1|{
  221|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  222|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  223|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  224|       |
  225|      1|	gobject_class->set_property = vips_object_set_property;
  226|      1|	gobject_class->get_property = vips_object_get_property;
  227|       |
  228|      1|	object_class->nickname = "deviate";
  229|      1|	object_class->description = _("find image standard deviation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  230|      1|	object_class->build = vips_deviate_build;
  231|       |
  232|      1|	sclass->start = vips_deviate_start;
  233|      1|	sclass->scan = vips_deviate_scan;
  234|      1|	sclass->stop = vips_deviate_stop;
  235|       |
  236|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  237|      1|		_("Output"),
  238|      1|		_("Output value"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  240|      1|		G_STRUCT_OFFSET(VipsDeviate, out),
  241|      1|		-INFINITY, INFINITY, 0.0);
  242|      1|}

divide.c:vips_divide_class_init:
  205|      1|{
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  208|       |
  209|      1|	object_class->nickname = "divide";
  210|      1|	object_class->description = _("divide two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  211|       |
  212|      1|	aclass->process_line = vips_divide_buffer;
  213|       |
  214|      1|	vips_arithmetic_set_format_table(aclass, vips_divide_format_table);
  215|      1|}

find_trim.c:vips_find_trim_class_init:
  175|      1|{
  176|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  177|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  178|       |
  179|      1|	gobject_class->set_property = vips_object_set_property;
  180|      1|	gobject_class->get_property = vips_object_get_property;
  181|       |
  182|      1|	object_class->nickname = "find_trim";
  183|      1|	object_class->description = _("search an image for non-edge areas");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  184|      1|	object_class->build = vips_find_trim_build;
  185|       |
  186|       |	// operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  187|       |
  188|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  189|      1|		_("Input"),
  190|      1|		_("Image to find_trim"),
  191|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  192|      1|		G_STRUCT_OFFSET(VipsFindTrim, in));
  193|       |
  194|      1|	VIPS_ARG_DOUBLE(class, "threshold", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  195|      1|		_("Threshold"),
  196|      1|		_("Object threshold"),
  197|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsFindTrim, threshold),
  199|      1|		0, INFINITY, 10.0);
  200|       |
  201|      1|	VIPS_ARG_BOXED(class, "background", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  202|      1|		_("Background"),
  203|      1|		_("Color for background pixels"),
  204|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsFindTrim, background),
  206|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  207|       |
  208|      1|	VIPS_ARG_BOOL(class, "line_art", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  209|      1|		_("Line art mode"),
  210|      1|		_("Enable line art mode"),
  211|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  212|      1|		G_STRUCT_OFFSET(VipsFindTrim, line_art),
  213|      1|		FALSE);
  214|       |
  215|      1|	VIPS_ARG_INT(class, "left", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  216|      1|		_("Left"),
  217|      1|		_("Left edge of image"),
  218|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  219|      1|		G_STRUCT_OFFSET(VipsFindTrim, left),
  220|      1|		0, VIPS_MAX_COORD, 1);
  221|       |
  222|      1|	VIPS_ARG_INT(class, "top", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  223|      1|		_("Top"),
  224|      1|		_("Top edge of extract area"),
  225|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  226|      1|		G_STRUCT_OFFSET(VipsFindTrim, top),
  227|      1|		0, VIPS_MAX_COORD, 0);
  228|       |
  229|      1|	VIPS_ARG_INT(class, "width", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  230|      1|		_("Width"),
  231|      1|		_("Width of extract area"),
  232|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  233|      1|		G_STRUCT_OFFSET(VipsFindTrim, width),
  234|      1|		0, VIPS_MAX_COORD, 1);
  235|       |
  236|      1|	VIPS_ARG_INT(class, "height", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  237|      1|		_("Height"),
  238|      1|		_("Height of extract area"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  240|      1|		G_STRUCT_OFFSET(VipsFindTrim, height),
  241|      1|		0, VIPS_MAX_COORD, 1);
  242|      1|}

getpoint.c:vips_getpoint_class_init:
  141|      1|{
  142|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  143|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  144|       |
  145|      1|	gobject_class->set_property = vips_object_set_property;
  146|      1|	gobject_class->get_property = vips_object_get_property;
  147|       |
  148|      1|	object_class->nickname = "getpoint";
  149|      1|	object_class->description = _("read a point from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  150|      1|	object_class->build = vips_getpoint_build;
  151|       |
  152|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  153|      1|		_("Input"),
  154|      1|		_("Input image"),
  155|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  156|      1|		G_STRUCT_OFFSET(VipsGetpoint, in));
  157|       |
  158|      1|	VIPS_ARG_BOXED(class, "out_array", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  159|      1|		_("Output array"),
  160|      1|		_("Array of output values"),
  161|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  162|      1|		G_STRUCT_OFFSET(VipsGetpoint, out_array),
  163|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  164|       |
  165|      1|	VIPS_ARG_INT(class, "x", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  166|      1|		_("x"),
  167|      1|		_("Point to read"),
  168|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  169|      1|		G_STRUCT_OFFSET(VipsGetpoint, x),
  170|      1|		0, VIPS_MAX_COORD, 0);
  171|       |
  172|      1|	VIPS_ARG_INT(class, "y", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("y"),
  174|      1|		_("Point to read"),
  175|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsGetpoint, y),
  177|      1|		0, VIPS_MAX_COORD, 0);
  178|       |
  179|      1|	VIPS_ARG_BOOL(class, "unpack_complex", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  180|      1|		_("unpack_complex"),
  181|      1|		_("Complex pixels should be unpacked"),
  182|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  183|      1|		G_STRUCT_OFFSET(VipsGetpoint, unpack_complex),
  184|      1|		FALSE);
  185|      1|}

hist_find.c:vips_hist_find_class_init:
  413|      1|{
  414|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  415|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  416|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  417|       |
  418|      1|	gobject_class->set_property = vips_object_set_property;
  419|      1|	gobject_class->get_property = vips_object_get_property;
  420|       |
  421|      1|	object_class->nickname = "hist_find";
  422|      1|	object_class->description = _("find image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  423|      1|	object_class->build = vips_hist_find_build;
  424|       |
  425|      1|	sclass->start = vips_hist_find_start;
  426|      1|	sclass->scan = vips_hist_find_scan;
  427|      1|	sclass->stop = vips_hist_find_stop;
  428|      1|	sclass->format_table = vips_hist_find_format_table;
  429|       |
  430|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  431|      1|		_("Output"),
  432|      1|		_("Output histogram"),
  433|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  434|      1|		G_STRUCT_OFFSET(VipsHistFind, out));
  435|       |
  436|      1|	VIPS_ARG_INT(class, "band", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  437|      1|		_("Band"),
  438|      1|		_("Find histogram of band"),
  439|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  440|      1|		G_STRUCT_OFFSET(VipsHistFind, band),
  441|      1|		-1, 100000, -1);
  442|      1|}

hist_find_indexed.c:vips_hist_find_indexed_class_init:
  452|      1|{
  453|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  454|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  455|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  456|       |
  457|      1|	gobject_class->set_property = vips_object_set_property;
  458|      1|	gobject_class->get_property = vips_object_get_property;
  459|       |
  460|      1|	object_class->nickname = "hist_find_indexed";
  461|      1|	object_class->description = _("find indexed image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  462|      1|	object_class->build = vips_hist_find_indexed_build;
  463|       |
  464|      1|	sclass->start = vips_hist_find_indexed_start;
  465|      1|	sclass->scan = vips_hist_find_indexed_scan;
  466|      1|	sclass->stop = vips_hist_find_indexed_stop;
  467|       |
  468|      1|	VIPS_ARG_IMAGE(class, "index", 90,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  469|      1|		_("Index"),
  470|      1|		_("Index image"),
  471|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  472|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, index));
  473|       |
  474|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  475|      1|		_("Output"),
  476|      1|		_("Output histogram"),
  477|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  478|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, out));
  479|       |
  480|      1|	VIPS_ARG_ENUM(class, "combine", 104,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  481|      1|		_("Combine"),
  482|      1|		_("Combine bins like this"),
  483|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  484|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, combine),
  485|      1|		VIPS_TYPE_COMBINE, VIPS_COMBINE_SUM);
  486|      1|}

hist_find_ndim.c:vips_hist_find_ndim_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  297|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  298|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  299|       |
  300|      1|	gobject_class->set_property = vips_object_set_property;
  301|      1|	gobject_class->get_property = vips_object_get_property;
  302|       |
  303|      1|	object_class->nickname = "hist_find_ndim";
  304|      1|	object_class->description = _("find n-dimensional image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  305|      1|	object_class->build = vips_hist_find_ndim_build;
  306|       |
  307|      1|	sclass->start = vips_hist_find_ndim_start;
  308|      1|	sclass->scan = vips_hist_find_ndim_scan;
  309|      1|	sclass->stop = vips_hist_find_ndim_stop;
  310|      1|	sclass->format_table = vips_hist_find_ndim_format_table;
  311|       |
  312|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  313|      1|		_("Output"),
  314|      1|		_("Output histogram"),
  315|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  316|      1|		G_STRUCT_OFFSET(VipsHistFindNDim, out));
  317|       |
  318|      1|	VIPS_ARG_INT(class, "bins", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  319|      1|		_("Bins"),
  320|      1|		_("Number of bins in each dimension"),
  321|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  322|      1|		G_STRUCT_OFFSET(VipsHistFindNDim, bins),
  323|      1|		1, 65536, 10);
  324|      1|}

hough.c:vips_hough_class_init:
  161|      1|{
  162|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  163|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  164|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  165|       |
  166|      1|	gobject_class->set_property = vips_object_set_property;
  167|      1|	gobject_class->get_property = vips_object_get_property;
  168|       |
  169|      1|	object_class->nickname = "hough";
  170|      1|	object_class->description = _("find hough transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  171|      1|	object_class->build = vips_hough_build;
  172|       |
  173|      1|	sclass->start = vips_hough_start;
  174|      1|	sclass->scan = vips_hough_scan;
  175|      1|	sclass->stop = vips_hough_stop;
  176|      1|	sclass->format_table = vips_hough_format_table;
  177|       |
  178|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  179|      1|		_("Output"),
  180|      1|		_("Output image"),
  181|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  182|      1|		G_STRUCT_OFFSET(VipsHough, out));
  183|      1|}

hough_circle.c:vips_hough_circle_class_init:
  217|      1|{
  218|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  219|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  220|      1|	VipsHoughClass *hclass = (VipsHoughClass *) class;
  221|       |
  222|      1|	gobject_class->set_property = vips_object_set_property;
  223|      1|	gobject_class->get_property = vips_object_get_property;
  224|       |
  225|      1|	object_class->nickname = "hough_circle";
  226|      1|	object_class->description = _("find hough circle transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  227|      1|	object_class->build = vips_hough_circle_build;
  228|       |
  229|      1|	hclass->init_accumulator = vips_hough_circle_init_accumulator;
  230|      1|	hclass->vote = vips_hough_circle_vote;
  231|       |
  232|      1|	VIPS_ARG_INT(class, "scale", 119,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  233|      1|		_("Scale"),
  234|      1|		_("Scale down dimensions by this factor"),
  235|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  236|      1|		G_STRUCT_OFFSET(VipsHoughCircle, scale),
  237|      1|		1, 100000, 1);
  238|       |
  239|      1|	VIPS_ARG_INT(class, "min_radius", 120,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  240|      1|		_("Min radius"),
  241|      1|		_("Smallest radius to search for"),
  242|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  243|      1|		G_STRUCT_OFFSET(VipsHoughCircle, min_radius),
  244|      1|		1, 100000, 10);
  245|       |
  246|      1|	VIPS_ARG_INT(class, "max_radius", 121,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  247|      1|		_("Max radius"),
  248|      1|		_("Largest radius to search for"),
  249|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  250|      1|		G_STRUCT_OFFSET(VipsHoughCircle, max_radius),
  251|      1|		1, 100000, 20);
  252|      1|}

hough_line.c:vips_hough_line_class_init:
  131|      1|{
  132|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  133|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  134|      1|	VipsHoughClass *hclass = (VipsHoughClass *) class;
  135|       |
  136|      1|	gobject_class->set_property = vips_object_set_property;
  137|      1|	gobject_class->get_property = vips_object_get_property;
  138|       |
  139|      1|	object_class->nickname = "hough_line";
  140|      1|	object_class->description = _("find hough line transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  141|      1|	object_class->build = vips_hough_line_build;
  142|       |
  143|      1|	hclass->init_accumulator = vips_hough_line_init_accumulator;
  144|      1|	hclass->vote = vips_hough_line_vote;
  145|       |
  146|      1|	VIPS_ARG_INT(class, "width", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("Width"),
  148|      1|		_("Horizontal size of parameter space"),
  149|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsHoughLine, width),
  151|      1|		1, 100000, 256);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "height", 111,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("Height"),
  155|      1|		_("Vertical size of parameter space"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsHoughLine, height),
  158|      1|		1, 100000, 256);
  159|      1|}

invert.c:vips_invert_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  175|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  176|       |
  177|      1|	object_class->nickname = "invert";
  178|      1|	object_class->description = _("invert an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	aclass->process_line = vips_invert_buffer;
  181|       |
  182|      1|	vips_arithmetic_set_format_table(aclass, vips_invert_format_table);
  183|      1|}

vips_linear:
  531|     27|{
  532|     27|	va_list ap;
  533|     27|	int result;
  534|       |
  535|     27|	va_start(ap, n);
  536|     27|	result = vips_linearv(in, out, a, b, n, ap);
  537|     27|	va_end(ap);
  538|       |
  539|     27|	return result;
  540|     27|}
linear.c:vips_linear_class_init:
  437|      1|{
  438|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  440|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  441|       |
  442|      1|	gobject_class->set_property = vips_object_set_property;
  443|      1|	gobject_class->get_property = vips_object_get_property;
  444|       |
  445|      1|	object_class->nickname = "linear";
  446|      1|	object_class->description = _("calculate (a * in + b)");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  447|      1|	object_class->build = vips_linear_build;
  448|       |
  449|      1|	aclass->process_line = vips_linear_buffer;
  450|       |
  451|      1|	vips_arithmetic_set_format_table(aclass, vips_linear_format_table);
  452|       |
  453|      1|	VIPS_ARG_BOXED(class, "a", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  454|      1|		_("a"),
  455|      1|		_("Multiply by this"),
  456|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  457|      1|		G_STRUCT_OFFSET(VipsLinear, a),
  458|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  459|       |
  460|      1|	VIPS_ARG_BOXED(class, "b", 111,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  461|      1|		_("b"),
  462|      1|		_("Add this"),
  463|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  464|      1|		G_STRUCT_OFFSET(VipsLinear, b),
  465|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  466|       |
  467|      1|	VIPS_ARG_BOOL(class, "uchar", 112,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  468|      1|		_("uchar"),
  469|      1|		_("Output should be uchar"),
  470|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  471|      1|		G_STRUCT_OFFSET(VipsLinear, uchar),
  472|      1|		FALSE);
  473|      1|}
linear.c:vips_linear_build:
  120|     27|{
  121|     27|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|     27|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     27|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     27|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|     27|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     27|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  123|     27|	VipsUnary *unary = (VipsUnary *) object;
  124|     27|	VipsLinear *linear = (VipsLinear *) object;
  125|       |
  126|     27|	int i;
  127|       |
  128|       |	/* If we have a three-element vector, we need to bandup the image to
  129|       |	 * match.
  130|       |	 */
  131|     27|	linear->n = 1;
  132|     27|	if (linear->a)
  ------------------
  |  Branch (132:6): [True: 27, False: 0]
  ------------------
  133|     27|		linear->n = VIPS_MAX(linear->n, linear->a->n);
  ------------------
  |  |   54|     27|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 27]
  |  |  ------------------
  ------------------
  134|     27|	if (linear->b)
  ------------------
  |  Branch (134:6): [True: 27, False: 0]
  ------------------
  135|     27|		linear->n = VIPS_MAX(linear->n, linear->b->n);
  ------------------
  |  |   54|     27|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 27]
  |  |  ------------------
  ------------------
  136|     27|	if (unary->in) {
  ------------------
  |  Branch (136:6): [True: 27, False: 0]
  ------------------
  137|     27|		int bands;
  138|       |
  139|     27|		vips_image_decode_predict(unary->in, &bands, NULL);
  140|     27|		linear->n = VIPS_MAX(linear->n, bands);
  ------------------
  |  |   54|     27|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 27]
  |  |  ------------------
  ------------------
  141|     27|	}
  142|     27|	arithmetic->base_bands = linear->n;
  143|       |
  144|     27|	if (unary->in &&
  ------------------
  |  Branch (144:6): [True: 27, False: 0]
  ------------------
  145|     27|		linear->a &&
  ------------------
  |  Branch (145:3): [True: 27, False: 0]
  ------------------
  146|     27|		linear->b) {
  ------------------
  |  Branch (146:3): [True: 27, False: 0]
  ------------------
  147|     27|		if (vips_check_vector(class->nickname,
  ------------------
  |  Branch (147:7): [True: 0, False: 27]
  ------------------
  148|     27|				linear->a->n, unary->in) ||
  149|     27|			vips_check_vector(class->nickname,
  ------------------
  |  Branch (149:4): [True: 0, False: 27]
  ------------------
  150|     27|				linear->b->n, unary->in))
  151|      0|			return -1;
  152|     27|	}
  153|       |
  154|       |	/* If all elements of the constants are equal, we can shrink them down
  155|       |	 * to a single element.
  156|       |	 */
  157|     27|	if (linear->a) {
  ------------------
  |  Branch (157:6): [True: 27, False: 0]
  ------------------
  158|     27|		double *ary = (double *) linear->a->data;
  159|     27|		gboolean all_equal;
  160|       |
  161|     27|		all_equal = TRUE;
  ------------------
  |  |  798|     27|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     27|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  162|     27|		for (i = 1; i < linear->a->n; i++)
  ------------------
  |  Branch (162:15): [True: 0, False: 27]
  ------------------
  163|      0|			if (ary[i] != ary[0]) {
  ------------------
  |  Branch (163:8): [True: 0, False: 0]
  ------------------
  164|      0|				all_equal = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  165|      0|				break;
  166|      0|			}
  167|       |
  168|     27|		if (all_equal)
  ------------------
  |  Branch (168:7): [True: 27, False: 0]
  ------------------
  169|     27|			linear->a->n = 1;
  170|     27|	}
  171|     27|	if (linear->b) {
  ------------------
  |  Branch (171:6): [True: 27, False: 0]
  ------------------
  172|     27|		double *ary = (double *) linear->b->data;
  173|     27|		gboolean all_equal;
  174|       |
  175|     27|		all_equal = TRUE;
  ------------------
  |  |  798|     27|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     27|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  176|     27|		for (i = 1; i < linear->b->n; i++)
  ------------------
  |  Branch (176:15): [True: 0, False: 27]
  ------------------
  177|      0|			if (ary[i] != ary[0]) {
  ------------------
  |  Branch (177:8): [True: 0, False: 0]
  ------------------
  178|      0|				all_equal = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  179|      0|				break;
  180|      0|			}
  181|       |
  182|     27|		if (all_equal)
  ------------------
  |  Branch (182:7): [True: 27, False: 0]
  ------------------
  183|     27|			linear->b->n = 1;
  184|     27|	}
  185|       |
  186|       |	/* Make up-banded versions of our constants.
  187|       |	 */
  188|     27|	linear->a_ready = VIPS_ARRAY(linear, linear->n, double);
  ------------------
  |  |   72|     27|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     27|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|     27|	linear->b_ready = VIPS_ARRAY(linear, linear->n, double);
  ------------------
  |  |   72|     27|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     27|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|    135|	for (i = 0; i < linear->n; i++) {
  ------------------
  |  Branch (191:14): [True: 108, False: 27]
  ------------------
  192|    108|		if (linear->a) {
  ------------------
  |  Branch (192:7): [True: 108, False: 0]
  ------------------
  193|    108|			double *ary = (double *) linear->a->data;
  194|    108|			int j = VIPS_MIN(i, linear->a->n - 1);
  ------------------
  |  |   55|    108|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 108]
  |  |  ------------------
  ------------------
  195|       |
  196|    108|			linear->a_ready[i] = ary[j];
  197|    108|		}
  198|       |
  199|    108|		if (linear->b) {
  ------------------
  |  Branch (199:7): [True: 108, False: 0]
  ------------------
  200|    108|			double *ary = (double *) linear->b->data;
  201|    108|			int j = VIPS_MIN(i, linear->b->n - 1);
  ------------------
  |  |   55|    108|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 108]
  |  |  ------------------
  ------------------
  202|       |
  203|    108|			linear->b_ready[i] = ary[j];
  204|    108|		}
  205|    108|	}
  206|       |
  207|     27|	if (linear->uchar)
  ------------------
  |  Branch (207:6): [True: 0, False: 27]
  ------------------
  208|      0|		arithmetic->format = VIPS_FORMAT_UCHAR;
  209|       |
  210|     27|	if (VIPS_OBJECT_CLASS(vips_linear_parent_class)->build(object))
  ------------------
  |  |  435|     27|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     27|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     27|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (210:6): [True: 0, False: 27]
  ------------------
  211|      0|		return -1;
  212|       |
  213|     27|	return 0;
  214|     27|}
linear.c:vips_linear_buffer:
  332|     27|{
  333|     27|	VipsImage *im = arithmetic->ready[0];
  334|     27|	VipsLinear *linear = (VipsLinear *) arithmetic;
  335|     27|	double *restrict a = linear->a_ready;
  336|     27|	double *restrict b = linear->b_ready;
  337|     27|	int nb = im->Bands;
  338|       |
  339|     27|	int i, x, k;
  340|       |
  341|     27|	if (linear->uchar)
  ------------------
  |  Branch (341:6): [True: 0, False: 27]
  ------------------
  342|      0|		switch (vips_image_get_format(im)) {
  343|      0|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (343:3): [True: 0, False: 0]
  ------------------
  344|      0|			LOOPuc(unsigned char);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  345|      0|			break;
  346|      0|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (346:3): [True: 0, False: 0]
  ------------------
  347|      0|			LOOPuc(signed char);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  348|      0|			break;
  349|      0|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (349:3): [True: 0, False: 0]
  ------------------
  350|      0|			LOOPuc(unsigned short);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  351|      0|			break;
  352|      0|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (352:3): [True: 0, False: 0]
  ------------------
  353|      0|			LOOPuc(signed short);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  354|      0|			break;
  355|      0|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (355:3): [True: 0, False: 0]
  ------------------
  356|      0|			LOOPuc(unsigned int);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  357|      0|			break;
  358|      0|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (358:3): [True: 0, False: 0]
  ------------------
  359|      0|			LOOPuc(signed int);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  360|      0|			break;
  361|      0|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (361:3): [True: 0, False: 0]
  ------------------
  362|      0|			LOOPuc(float);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  363|      0|			break;
  364|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (364:3): [True: 0, False: 0]
  ------------------
  365|      0|			LOOPuc(double);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  366|      0|			break;
  367|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (367:3): [True: 0, False: 0]
  ------------------
  368|      0|			LOOPCMPLXNuc(float);
  ------------------
  |  |  314|      0|	{ \
  |  |  315|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  316|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  317|      0|\
  |  |  318|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (318:22): [True: 0, False: 0]
  |  |  ------------------
  |  |  319|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  ------------------
  |  |  |  Branch (319:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|				double t = a[k] * p[0] + b[k]; \
  |  |  321|      0|\
  |  |  322|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  ------------------
  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  323|      0|				p += 2; \
  |  |  324|      0|			} \
  |  |  325|      0|	}
  ------------------
  369|      0|			break;
  370|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (370:3): [True: 0, False: 0]
  ------------------
  371|      0|			LOOPCMPLXNuc(double);
  ------------------
  |  |  314|      0|	{ \
  |  |  315|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  316|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  317|      0|\
  |  |  318|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (318:22): [True: 0, False: 0]
  |  |  ------------------
  |  |  319|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  ------------------
  |  |  |  Branch (319:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|				double t = a[k] * p[0] + b[k]; \
  |  |  321|      0|\
  |  |  322|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  ------------------
  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  323|      0|				p += 2; \
  |  |  324|      0|			} \
  |  |  325|      0|	}
  ------------------
  372|      0|			break;
  373|       |
  374|      0|		default:
  ------------------
  |  Branch (374:3): [True: 0, False: 0]
  ------------------
  375|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|      0|		}
  377|     27|	else
  378|     27|		switch (vips_image_get_format(im)) {
  379|     27|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (379:3): [True: 27, False: 0]
  ------------------
  380|     27|			LOOP(unsigned char, float);
  ------------------
  |  |  243|     27|	{ \
  |  |  244|     27|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 27, False: 0]
  |  |  |  Branch (244:28): [True: 27, False: 0]
  |  |  ------------------
  |  |  245|     27|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|     27|	{ \
  |  |  |  |  220|     27|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|     27|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|     27|		OUT a1 = a[0]; \
  |  |  |  |  223|     27|		OUT b1 = b[0]; \
  |  |  |  |  224|     27|		int sz = width * nb; \
  |  |  |  |  225|     27|\
  |  |  |  |  226|    135|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 108, False: 27]
  |  |  |  |  ------------------
  |  |  |  |  227|    108|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|     27|	}
  |  |  ------------------
  |  |  246|     27|		} \
  |  |  247|     27|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|     27|	}
  ------------------
  381|     27|			break;
  382|      0|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (382:3): [True: 0, False: 27]
  ------------------
  383|      0|			LOOP(signed char, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  384|      0|			break;
  385|      0|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (385:3): [True: 0, False: 27]
  ------------------
  386|      0|			LOOP(unsigned short, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  387|      0|			break;
  388|      0|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (388:3): [True: 0, False: 27]
  ------------------
  389|      0|			LOOP(signed short, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  390|      0|			break;
  391|      0|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (391:3): [True: 0, False: 27]
  ------------------
  392|      0|			LOOP(unsigned int, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  393|      0|			break;
  394|      0|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (394:3): [True: 0, False: 27]
  ------------------
  395|      0|			LOOP(signed int, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  396|      0|			break;
  397|      0|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (397:3): [True: 0, False: 27]
  ------------------
  398|      0|			LOOP(float, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  399|      0|			break;
  400|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (400:3): [True: 0, False: 27]
  ------------------
  401|      0|			LOOP(double, double);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  402|      0|			break;
  403|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (403:3): [True: 0, False: 27]
  ------------------
  404|      0|			LOOPCMPLXN(float, float);
  ------------------
  |  |  255|      0|	{ \
  |  |  256|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  257|      0|		OUT *restrict q = (OUT *) out; \
  |  |  258|      0|\
  |  |  259|      0|		for (x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (259:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  260|      0|			for (k = 0; k < nb; k++) { \
  |  |  ------------------
  |  |  |  Branch (260:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  261|      0|				q[0] = a[k] * p[0] + b[k]; \
  |  |  262|      0|				q[1] = p[1]; \
  |  |  263|      0|				q += 2; \
  |  |  264|      0|				p += 2; \
  |  |  265|      0|			} \
  |  |  266|      0|	}
  ------------------
  405|      0|			break;
  406|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (406:3): [True: 0, False: 27]
  ------------------
  407|      0|			LOOPCMPLXN(double, double);
  ------------------
  |  |  255|      0|	{ \
  |  |  256|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  257|      0|		OUT *restrict q = (OUT *) out; \
  |  |  258|      0|\
  |  |  259|      0|		for (x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (259:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  260|      0|			for (k = 0; k < nb; k++) { \
  |  |  ------------------
  |  |  |  Branch (260:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  261|      0|				q[0] = a[k] * p[0] + b[k]; \
  |  |  262|      0|				q[1] = p[1]; \
  |  |  263|      0|				q += 2; \
  |  |  264|      0|				p += 2; \
  |  |  265|      0|			} \
  |  |  266|      0|	}
  ------------------
  408|      0|			break;
  409|       |
  410|      0|		default:
  ------------------
  |  Branch (410:3): [True: 0, False: 27]
  ------------------
  411|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     27|		}
  413|     27|}
linear.c:vips_linear_init:
  477|     27|{
  478|     27|}
linear.c:vips_linearv:
  483|     27|{
  484|     27|	VipsArea *area_a;
  485|     27|	VipsArea *area_b;
  486|     27|	int result;
  487|       |
  488|     27|	area_a = VIPS_AREA(vips_array_double_new(a, n));
  ------------------
  |  |  137|     27|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  489|     27|	area_b = VIPS_AREA(vips_array_double_new(b, n));
  ------------------
  |  |  137|     27|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  490|       |
  491|     27|	result = vips_call_split("linear", ap, in, out, area_a, area_b);
  492|       |
  493|     27|	vips_area_unref(area_a);
  494|     27|	vips_area_unref(area_b);
  495|       |
  496|     27|	return result;
  497|     27|}

math.c:vips_math_class_init:
  244|      1|{
  245|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  247|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  248|       |
  249|      1|	gobject_class->set_property = vips_object_set_property;
  250|      1|	gobject_class->get_property = vips_object_get_property;
  251|       |
  252|      1|	object_class->nickname = "math";
  253|      1|	object_class->description = _("apply a math operation to an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  254|      1|	object_class->build = vips_math_build;
  255|       |
  256|      1|	aclass->process_line = vips_math_buffer;
  257|       |
  258|      1|	vips_arithmetic_set_format_table(aclass, vips_math_format_table);
  259|       |
  260|      1|	VIPS_ARG_ENUM(class, "math", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  261|      1|		_("Operation"),
  262|      1|		_("Math to perform"),
  263|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsMath, math),
  265|      1|		VIPS_TYPE_OPERATION_MATH, VIPS_OPERATION_MATH_SIN);
  266|      1|}

math2.c:vips_math2_class_init:
  224|      1|{
  225|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  227|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  228|       |
  229|      1|	gobject_class->set_property = vips_object_set_property;
  230|      1|	gobject_class->get_property = vips_object_get_property;
  231|       |
  232|      1|	object_class->nickname = "math2";
  233|      1|	object_class->description = _("binary math operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  234|      1|	object_class->build = vips_math2_build;
  235|       |
  236|      1|	aclass->process_line = vips_math2_buffer;
  237|       |
  238|      1|	vips_arithmetic_set_format_table(aclass, vips_math2_format_table);
  239|       |
  240|      1|	VIPS_ARG_ENUM(class, "math2", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  241|      1|		_("Operation"),
  242|      1|		_("Math to perform"),
  243|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  244|      1|		G_STRUCT_OFFSET(VipsMath2, math2),
  245|      1|		VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW);
  246|      1|}
math2.c:vips_math2_const_class_init:
  453|      1|{
  454|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  456|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  457|       |
  458|      1|	gobject_class->set_property = vips_object_set_property;
  459|      1|	gobject_class->get_property = vips_object_get_property;
  460|       |
  461|      1|	object_class->nickname = "math2_const";
  462|      1|	object_class->description =
  463|      1|		_("binary math operations with a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  464|      1|	object_class->build = vips_math2_const_build;
  465|       |
  466|      1|	aclass->process_line = vips_math2_const_buffer;
  467|       |
  468|      1|	vips_arithmetic_set_format_table(aclass, vips_math2_format_table);
  469|       |
  470|      1|	VIPS_ARG_ENUM(class, "math2", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  471|      1|		_("Operation"),
  472|      1|		_("Math to perform"),
  473|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  474|      1|		G_STRUCT_OFFSET(VipsMath2Const, math2),
  475|      1|		VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW);
  476|      1|}

max.c:vips_max_class_init:
  435|      1|{
  436|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  437|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  438|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  439|       |
  440|      1|	gobject_class->set_property = vips_object_set_property;
  441|      1|	gobject_class->get_property = vips_object_get_property;
  442|       |
  443|      1|	object_class->nickname = "max";
  444|      1|	object_class->description = _("find image maximum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  445|      1|	object_class->build = vips_max_build;
  446|       |
  447|      1|	sclass->start = vips_max_start;
  448|      1|	sclass->scan = vips_max_scan;
  449|      1|	sclass->stop = vips_max_stop;
  450|       |
  451|      1|	VIPS_ARG_DOUBLE(class, "out", 1,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  452|      1|		_("Output"),
  453|      1|		_("Output value"),
  454|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  455|      1|		G_STRUCT_OFFSET(VipsMax, out),
  456|      1|		-INFINITY, INFINITY, 0.0);
  457|       |
  458|      1|	VIPS_ARG_INT(class, "x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  459|      1|		_("x"),
  460|      1|		_("Horizontal position of maximum"),
  461|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  462|      1|		G_STRUCT_OFFSET(VipsMax, x),
  463|      1|		0, VIPS_MAX_COORD, 0);
  464|       |
  465|      1|	VIPS_ARG_INT(class, "y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  466|      1|		_("y"),
  467|      1|		_("Vertical position of maximum"),
  468|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  469|      1|		G_STRUCT_OFFSET(VipsMax, y),
  470|      1|		0, VIPS_MAX_COORD, 0);
  471|       |
  472|      1|	VIPS_ARG_INT(class, "size", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  473|      1|		_("Size"),
  474|      1|		_("Number of maximum values to find"),
  475|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  476|      1|		G_STRUCT_OFFSET(VipsMax, size),
  477|      1|		1, 1000000, 1);
  478|       |
  479|      1|	VIPS_ARG_BOXED(class, "out_array", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  480|      1|		_("Output array"),
  481|      1|		_("Array of output values"),
  482|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  483|      1|		G_STRUCT_OFFSET(VipsMax, out_array),
  484|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  485|       |
  486|      1|	VIPS_ARG_BOXED(class, "x_array", 7,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  487|      1|		_("x array"),
  488|      1|		_("Array of horizontal positions"),
  489|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  490|      1|		G_STRUCT_OFFSET(VipsMax, x_array),
  491|      1|		VIPS_TYPE_ARRAY_INT);
  492|       |
  493|      1|	VIPS_ARG_BOXED(class, "y_array", 8,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  494|      1|		_("y array"),
  495|      1|		_("Array of vertical positions"),
  496|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  497|      1|		G_STRUCT_OFFSET(VipsMax, y_array),
  498|      1|		VIPS_TYPE_ARRAY_INT);
  499|      1|}

maxpair.c:vips_maxpair_class_init:
  146|      1|{
  147|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  148|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  149|       |
  150|      1|	object_class->nickname = "maxpair";
  151|      1|	object_class->description = _("maximum of a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|       |
  153|      1|	aclass->process_line = maxpair_buffer;
  154|       |
  155|      1|	vips_arithmetic_set_format_table(aclass, vips_maxpair_format_table);
  156|      1|}

measure.c:vips_measure_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  184|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  185|       |
  186|      1|	gobject_class->set_property = vips_object_set_property;
  187|      1|	gobject_class->get_property = vips_object_get_property;
  188|       |
  189|      1|	object_class->nickname = "measure";
  190|      1|	object_class->description =
  191|      1|		_("measure a set of patches on a color chart");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  192|      1|	object_class->build = vips_measure_build;
  193|       |
  194|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  195|      1|		_("Input"),
  196|      1|		_("Image to measure"),
  197|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsMeasure, in));
  199|       |
  200|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  201|      1|		_("Output"),
  202|      1|		_("Output array of statistics"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  204|      1|		G_STRUCT_OFFSET(VipsMeasure, out));
  205|       |
  206|      1|	VIPS_ARG_INT(class, "h", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  207|      1|		_("Across"),
  208|      1|		_("Number of patches across chart"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsMeasure, h),
  211|      1|		1, VIPS_MAX_COORD, 1);
  212|       |
  213|      1|	VIPS_ARG_INT(class, "v", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  214|      1|		_("Down"),
  215|      1|		_("Number of patches down chart"),
  216|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      1|		G_STRUCT_OFFSET(VipsMeasure, v),
  218|      1|		1, VIPS_MAX_COORD, 1);
  219|       |
  220|      1|	VIPS_ARG_INT(class, "left", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  221|      1|		_("Left"),
  222|      1|		_("Left edge of extract area"),
  223|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  224|      1|		G_STRUCT_OFFSET(VipsMeasure, left),
  225|      1|		0, VIPS_MAX_COORD, 0);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "top", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("Top"),
  229|      1|		_("Top edge of extract area"),
  230|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsMeasure, top),
  232|      1|		0, VIPS_MAX_COORD, 0);
  233|       |
  234|      1|	VIPS_ARG_INT(class, "width", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  235|      1|		_("Width"),
  236|      1|		_("Width of extract area"),
  237|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  238|      1|		G_STRUCT_OFFSET(VipsMeasure, width),
  239|      1|		1, VIPS_MAX_COORD, 1);
  240|       |
  241|      1|	VIPS_ARG_INT(class, "height", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  242|      1|		_("Height"),
  243|      1|		_("Height of extract area"),
  244|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  245|      1|		G_STRUCT_OFFSET(VipsMeasure, height),
  246|      1|		1, VIPS_MAX_COORD, 1);
  247|      1|}

min.c:vips_min_class_init:
  435|      1|{
  436|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  437|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  438|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  439|       |
  440|      1|	gobject_class->set_property = vips_object_set_property;
  441|      1|	gobject_class->get_property = vips_object_get_property;
  442|       |
  443|      1|	object_class->nickname = "min";
  444|      1|	object_class->description = _("find image minimum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  445|      1|	object_class->build = vips_min_build;
  446|       |
  447|      1|	sclass->start = vips_min_start;
  448|      1|	sclass->scan = vips_min_scan;
  449|      1|	sclass->stop = vips_min_stop;
  450|       |
  451|      1|	VIPS_ARG_DOUBLE(class, "out", 1,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  452|      1|		_("Output"),
  453|      1|		_("Output value"),
  454|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  455|      1|		G_STRUCT_OFFSET(VipsMin, min),
  456|      1|		-INFINITY, INFINITY, 0.0);
  457|       |
  458|      1|	VIPS_ARG_INT(class, "x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  459|      1|		_("x"),
  460|      1|		_("Horizontal position of minimum"),
  461|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  462|      1|		G_STRUCT_OFFSET(VipsMin, x),
  463|      1|		0, VIPS_MAX_COORD, 0);
  464|       |
  465|      1|	VIPS_ARG_INT(class, "y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  466|      1|		_("y"),
  467|      1|		_("Vertical position of minimum"),
  468|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  469|      1|		G_STRUCT_OFFSET(VipsMin, y),
  470|      1|		0, VIPS_MAX_COORD, 0);
  471|       |
  472|      1|	VIPS_ARG_INT(class, "size", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  473|      1|		_("Size"),
  474|      1|		_("Number of minimum values to find"),
  475|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  476|      1|		G_STRUCT_OFFSET(VipsMin, size),
  477|      1|		1, 1000000, 1);
  478|       |
  479|      1|	VIPS_ARG_BOXED(class, "out_array", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  480|      1|		_("Output array"),
  481|      1|		_("Array of output values"),
  482|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  483|      1|		G_STRUCT_OFFSET(VipsMin, min_array),
  484|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  485|       |
  486|      1|	VIPS_ARG_BOXED(class, "x_array", 7,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  487|      1|		_("x array"),
  488|      1|		_("Array of horizontal positions"),
  489|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  490|      1|		G_STRUCT_OFFSET(VipsMin, x_array),
  491|      1|		VIPS_TYPE_ARRAY_INT);
  492|       |
  493|      1|	VIPS_ARG_BOXED(class, "y_array", 8,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  494|      1|		_("y array"),
  495|      1|		_("Array of vertical positions"),
  496|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  497|      1|		G_STRUCT_OFFSET(VipsMin, y_array),
  498|      1|		VIPS_TYPE_ARRAY_INT);
  499|      1|}

minpair.c:vips_minpair_class_init:
  146|      1|{
  147|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  148|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  149|       |
  150|      1|	object_class->nickname = "minpair";
  151|      1|	object_class->description = _("minimum of a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|       |
  153|      1|	aclass->process_line = minpair_buffer;
  154|       |
  155|      1|	vips_arithmetic_set_format_table(aclass, vips_minpair_format_table);
  156|      1|}

multiply.c:vips_multiply_class_init:
  190|      1|{
  191|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  192|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  193|       |
  194|      1|	object_class->nickname = "multiply";
  195|      1|	object_class->description = _("multiply two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|       |
  197|      1|	aclass->process_line = vips_multiply_buffer;
  198|       |
  199|      1|	vips_arithmetic_set_format_table(aclass, vips_multiply_format_table);
  200|      1|}

nary.c:vips_nary_class_init:
   72|      1|{
   73|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|       |
   76|      1|	gobject_class->set_property = vips_object_set_property;
   77|      1|	gobject_class->get_property = vips_object_get_property;
   78|       |
   79|      1|	vobject_class->nickname = "nary";
   80|      1|	vobject_class->description = _("nary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   81|      1|	vobject_class->build = vips_nary_build;
   82|       |
   83|       |	/* Create properties.
   84|       |	 */
   85|       |
   86|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
   87|      1|		_("Input"),
   88|      1|		_("Array of input images"),
   89|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   90|      1|		G_STRUCT_OFFSET(VipsNary, in),
   91|      1|		VIPS_TYPE_ARRAY_IMAGE);
   92|      1|}

profile.c:vips_profile_class_init:
  284|      1|{
  285|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  286|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  287|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  288|       |
  289|      1|	gobject_class->set_property = vips_object_set_property;
  290|      1|	gobject_class->get_property = vips_object_get_property;
  291|       |
  292|      1|	object_class->nickname = "profile";
  293|      1|	object_class->description = _("find image profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  294|      1|	object_class->build = vips_profile_build;
  295|       |
  296|      1|	sclass->start = vips_profile_start;
  297|      1|	sclass->scan = vips_profile_scan;
  298|      1|	sclass->stop = vips_profile_stop;
  299|       |
  300|      1|	VIPS_ARG_IMAGE(class, "columns", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  301|      1|		_("Columns"),
  302|      1|		_("First non-zero pixel in column"),
  303|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  304|      1|		G_STRUCT_OFFSET(VipsProfile, columns));
  305|       |
  306|      1|	VIPS_ARG_IMAGE(class, "rows", 101,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  307|      1|		_("Rows"),
  308|      1|		_("First non-zero pixel in row"),
  309|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  310|      1|		G_STRUCT_OFFSET(VipsProfile, rows));
  311|      1|}

project.c:vips_project_class_init:
  315|      1|{
  316|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  317|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  318|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  319|       |
  320|      1|	gobject_class->set_property = vips_object_set_property;
  321|      1|	gobject_class->get_property = vips_object_get_property;
  322|       |
  323|      1|	object_class->nickname = "project";
  324|      1|	object_class->description = _("find image projections");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  325|      1|	object_class->build = vips_project_build;
  326|       |
  327|      1|	sclass->start = vips_project_start;
  328|      1|	sclass->scan = vips_project_scan;
  329|      1|	sclass->stop = vips_project_stop;
  330|       |
  331|      1|	VIPS_ARG_IMAGE(class, "columns", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  332|      1|		_("Columns"),
  333|      1|		_("Sums of columns"),
  334|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  335|      1|		G_STRUCT_OFFSET(VipsProject, columns));
  336|       |
  337|      1|	VIPS_ARG_IMAGE(class, "rows", 101,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  338|      1|		_("Rows"),
  339|      1|		_("Sums of rows"),
  340|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  341|      1|		G_STRUCT_OFFSET(VipsProject, rows));
  342|      1|}

relational.c:vips_relational_class_init:
  229|      1|{
  230|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  232|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  233|       |
  234|      1|	gobject_class->set_property = vips_object_set_property;
  235|      1|	gobject_class->get_property = vips_object_get_property;
  236|       |
  237|      1|	object_class->nickname = "relational";
  238|      1|	object_class->description = _("relational operation on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  239|       |
  240|      1|	aclass->process_line = vips_relational_buffer;
  241|       |
  242|      1|	vips_arithmetic_set_format_table(aclass,
  243|      1|		vips_relational_format_table);
  244|       |
  245|      1|	VIPS_ARG_ENUM(class, "relational", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  246|      1|		_("Operation"),
  247|      1|		_("Relational to perform"),
  248|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsRelational, relational),
  250|      1|		VIPS_TYPE_OPERATION_RELATIONAL,
  251|      1|		VIPS_OPERATION_RELATIONAL_EQUAL);
  252|      1|}
relational.c:vips_relational_const_class_init:
  593|      1|{
  594|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  595|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  596|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  597|       |
  598|      1|	gobject_class->set_property = vips_object_set_property;
  599|      1|	gobject_class->get_property = vips_object_get_property;
  600|       |
  601|      1|	object_class->nickname = "relational_const";
  602|      1|	object_class->description =
  603|      1|		_("relational operations against a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  604|       |
  605|      1|	aclass->process_line = vips_relational_const_buffer;
  606|       |
  607|      1|	vips_arithmetic_set_format_table(aclass,
  608|      1|		vips_relational_format_table);
  609|       |
  610|      1|	VIPS_ARG_ENUM(class, "relational", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  611|      1|		_("Operation"),
  612|      1|		_("Relational to perform"),
  613|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  614|      1|		G_STRUCT_OFFSET(VipsRelationalConst, relational),
  615|      1|		VIPS_TYPE_OPERATION_RELATIONAL,
  616|      1|		VIPS_OPERATION_RELATIONAL_EQUAL);
  617|      1|}

remainder.c:vips_remainder_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  185|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  186|       |
  187|      1|	gobject_class->set_property = vips_object_set_property;
  188|      1|	gobject_class->get_property = vips_object_get_property;
  189|       |
  190|      1|	object_class->nickname = "remainder";
  191|      1|	object_class->description =
  192|      1|		_("remainder after integer division of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	object_class->build = vips_remainder_build;
  194|       |
  195|      1|	aclass->process_line = vips_remainder_buffer;
  196|       |
  197|      1|	vips_arithmetic_set_format_table(aclass,
  198|      1|		vips_remainder_format_table);
  199|      1|}
remainder.c:vips_remainder_const_class_init:
  343|      1|{
  344|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  346|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  347|       |
  348|      1|	gobject_class->set_property = vips_object_set_property;
  349|      1|	gobject_class->get_property = vips_object_get_property;
  350|       |
  351|      1|	object_class->nickname = "remainder_const";
  352|      1|	object_class->description =
  353|      1|		_("remainder after integer division of an image and a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  354|      1|	object_class->build = vips_remainder_const_build;
  355|       |
  356|      1|	aclass->process_line = vips_remainder_const_buffer;
  357|       |
  358|      1|	vips_arithmetic_set_format_table(aclass, vips_remainder_format_table);
  359|      1|}

round.c:vips_round_class_init:
  164|      1|{
  165|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  167|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  168|       |
  169|      1|	gobject_class->set_property = vips_object_set_property;
  170|      1|	gobject_class->get_property = vips_object_get_property;
  171|       |
  172|      1|	object_class->nickname = "round";
  173|      1|	object_class->description = _("perform a round function on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  174|      1|	object_class->build = vips_round_build;
  175|       |
  176|      1|	aclass->process_line = vips_round_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_round_format_table);
  179|       |
  180|      1|	VIPS_ARG_ENUM(class, "round", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  181|      1|		_("Round operation"),
  182|      1|		_("Rounding operation to perform"),
  183|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsRound, round),
  185|      1|		VIPS_TYPE_OPERATION_ROUND, VIPS_OPERATION_ROUND_RINT);
  186|      1|}

sign.c:vips_sign_class_init:
  169|      1|{
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  172|       |
  173|      1|	object_class->nickname = "sign";
  174|      1|	object_class->description = _("unit vector of pixel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  175|       |
  176|      1|	aclass->process_line = vips_sign_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_sign_format_table);
  179|      1|}

statistic.c:vips_statistic_class_init:
  152|      1|{
  153|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  156|       |
  157|      1|	gobject_class->set_property = vips_object_set_property;
  158|      1|	gobject_class->get_property = vips_object_get_property;
  159|       |
  160|      1|	vobject_class->nickname = "statistic";
  161|      1|	vobject_class->description = _("VIPS statistic operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  162|      1|	vobject_class->build = vips_statistic_build;
  163|       |
  164|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Input"),
  168|      1|		_("Input image"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsStatistic, in));
  171|      1|}

stats.c:vips_stats_class_init:
  425|      1|{
  426|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  427|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  428|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  429|       |
  430|      1|	gobject_class->set_property = vips_object_set_property;
  431|      1|	gobject_class->get_property = vips_object_get_property;
  432|       |
  433|      1|	object_class->nickname = "stats";
  434|      1|	object_class->description = _("find many image stats");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  435|      1|	object_class->build = vips_stats_build;
  436|       |
  437|      1|	sclass->start = vips_stats_start;
  438|      1|	sclass->scan = vips_stats_scan;
  439|      1|	sclass->stop = vips_stats_stop;
  440|       |
  441|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  442|      1|		_("Output"),
  443|      1|		_("Output array of statistics"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  445|      1|		G_STRUCT_OFFSET(VipsStats, out));
  446|      1|}

subtract.c:vips_subtract_class_init:
  169|      1|{
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  172|       |
  173|      1|	object_class->nickname = "subtract";
  174|      1|	object_class->description = _("subtract two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  175|       |
  176|      1|	aclass->process_line = vips_subtract_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_subtract_format_table);
  179|      1|}

sum.c:vips_sum_class_init:
  144|      1|{
  145|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  146|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  147|       |
  148|      1|	object_class->nickname = "sum";
  149|      1|	object_class->description = _("sum an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  150|       |
  151|      1|	aclass->process_line = sum_buffer;
  152|       |
  153|      1|	vips_arithmetic_set_format_table(aclass, vips_sum_format_table);
  154|      1|}

unary.c:vips_unary_class_init:
   73|      1|{
   74|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   76|       |
   77|      1|	gobject_class->set_property = vips_object_set_property;
   78|      1|	gobject_class->get_property = vips_object_get_property;
   79|       |
   80|      1|	vobject_class->nickname = "unary";
   81|      1|	vobject_class->description = _("unary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|      1|	vobject_class->build = vips_unary_build;
   83|       |
   84|       |	/* Create properties.
   85|       |	 */
   86|       |
   87|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Input image"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsUnary, in));
   92|      1|}
unary.c:vips_unary_build:
   55|  3.42k|{
   56|  3.42k|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  3.42k|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
   57|  3.42k|	VipsUnary *unary = VIPS_UNARY(object);
  ------------------
  |  |   42|  3.42k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_UNARY, VipsUnary))
  |  |  ------------------
  |  |  |  |  484|  3.42k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.42k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   58|       |
   59|  3.42k|	arithmetic->n = 1;
   60|  3.42k|	arithmetic->in = (VipsImage **) vips_object_local_array(object, 1);
   61|  3.42k|	arithmetic->in[0] = unary->in;
   62|  3.42k|	if (arithmetic->in[0])
  ------------------
  |  Branch (62:6): [True: 3.42k, False: 0]
  ------------------
   63|  3.42k|		g_object_ref(arithmetic->in[0]);
   64|       |
   65|  3.42k|	if (VIPS_OBJECT_CLASS(vips_unary_parent_class)->build(object))
  ------------------
  |  |  435|  3.42k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  3.42k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  3.42k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (65:6): [True: 0, False: 3.42k]
  ------------------
   66|      0|		return -1;
   67|       |
   68|  3.42k|	return 0;
   69|  3.42k|}
unary.c:vips_unary_init:
   96|  3.42k|{
   97|       |	/* Init our instance fields.
   98|       |	 */
   99|  3.42k|}

unaryconst.c:vips_unary_const_class_init:
  130|      1|{
  131|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  133|       |
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	object_class->nickname = "unary_const";
  138|      1|	object_class->description = _("unary operations with a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  139|      1|	object_class->build = vips_unary_const_build;
  140|       |
  141|      1|	VIPS_ARG_BOXED(class, "c", 201,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  142|      1|		_("c"),
  143|      1|		_("Array of constants"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsUnaryConst, c),
  146|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  147|      1|}
unaryconst.c:vips_unary_const_build:
   57|  3.39k|{
   58|  3.39k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  3.39k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  3.39k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.39k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   59|  3.39k|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|  3.39k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  3.39k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.39k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  3.39k|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
   60|  3.39k|	VipsUnary *unary = (VipsUnary *) object;
   61|  3.39k|	VipsUnaryConst *uconst = (VipsUnaryConst *) object;
   62|       |
   63|       |	/* If we have a three-element vector we need to bandup the image to
   64|       |	 * match.
   65|       |	 */
   66|  3.39k|	uconst->n = 1;
   67|  3.39k|	if (uconst->c)
  ------------------
  |  Branch (67:6): [True: 3.39k, False: 0]
  ------------------
   68|  3.39k|		uconst->n = VIPS_MAX(uconst->n, uconst->c->n);
  ------------------
  |  |   54|  3.39k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 3.39k]
  |  |  ------------------
  ------------------
   69|  3.39k|	if (unary->in)
  ------------------
  |  Branch (69:6): [True: 3.39k, False: 0]
  ------------------
   70|  3.39k|		uconst->n = VIPS_MAX(uconst->n, unary->in->Bands);
  ------------------
  |  |   54|  3.39k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 3.39k]
  |  |  ------------------
  ------------------
   71|  3.39k|	arithmetic->base_bands = uconst->n;
   72|       |
   73|  3.39k|	if (unary->in &&
  ------------------
  |  Branch (73:6): [True: 3.39k, False: 0]
  ------------------
   74|  3.39k|		uconst->c) {
  ------------------
  |  Branch (74:3): [True: 3.39k, False: 0]
  ------------------
   75|  3.39k|		if (vips_check_vector(class->nickname,
  ------------------
  |  Branch (75:7): [True: 0, False: 3.39k]
  ------------------
   76|  3.39k|				uconst->c->n, unary->in))
   77|      0|			return -1;
   78|  3.39k|	}
   79|       |
   80|       |	/* Some operations need int constants, for example boolean AND, SHIFT
   81|       |	 * etc.
   82|       |	 *
   83|       |	 * Some can use int constants as an optimisation, for example (x <
   84|       |	 * 12). It depends on the value though: obviously (x < 12.5) should
   85|       |	 * not use the int form.
   86|       |	 *
   87|       |	 * For complex images, we double the vector length and set the
   88|       |	 * imaginary part to 0.
   89|       |	 */
   90|  3.39k|	if (uconst->c) {
  ------------------
  |  Branch (90:6): [True: 3.39k, False: 0]
  ------------------
   91|  3.39k|		gboolean is_complex =
   92|  3.39k|			vips_band_format_iscomplex(unary->in->BandFmt);
   93|  3.39k|		int step = is_complex ? 2 : 1;
  ------------------
  |  Branch (93:14): [True: 0, False: 3.39k]
  ------------------
   94|  3.39k|		int n = step * uconst->n;
   95|  3.39k|		double *c = (double *) uconst->c->data;
   96|       |
   97|  3.39k|		int i;
   98|       |
   99|  3.39k|		uconst->c_int = VIPS_ARRAY(object, n, int);
  ------------------
  |  |   72|  3.39k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.39k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.39k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.39k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.39k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|  3.39k|		uconst->c_double = VIPS_ARRAY(object, n, double);
  ------------------
  |  |   72|  3.39k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.39k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.39k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.39k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.39k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|  3.39k|		if (!uconst->c_int ||
  ------------------
  |  Branch (101:7): [True: 0, False: 3.39k]
  ------------------
  102|  3.39k|			!uconst->c_double)
  ------------------
  |  Branch (102:4): [True: 0, False: 3.39k]
  ------------------
  103|      0|			return -1;
  104|  3.39k|		memset(uconst->c_int, 0, n * sizeof(int));
  105|  3.39k|		memset(uconst->c_double, 0, n * sizeof(double));
  106|       |
  107|  6.79k|		for (i = 0; i < n; i += step)
  ------------------
  |  Branch (107:15): [True: 3.40k, False: 3.39k]
  ------------------
  108|  3.40k|			uconst->c_double[i] =
  109|  3.40k|				c[VIPS_MIN(i / step, uconst->c->n - 1)];
  ------------------
  |  |   55|  3.40k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 3.40k]
  |  |  ------------------
  ------------------
  110|       |
  111|  6.79k|		for (i = 0; i < n; i += step)
  ------------------
  |  Branch (111:15): [True: 3.40k, False: 3.39k]
  ------------------
  112|  3.40k|			uconst->c_int[i] = uconst->c_double[i];
  113|       |
  114|  3.39k|		uconst->is_int = TRUE;
  ------------------
  |  |  798|  3.39k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  3.39k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  115|  6.79k|		for (i = 0; i < n; i += step)
  ------------------
  |  Branch (115:15): [True: 3.40k, False: 3.39k]
  ------------------
  116|  3.40k|			if (uconst->c_int[i] != uconst->c_double[i]) {
  ------------------
  |  Branch (116:8): [True: 0, False: 3.40k]
  ------------------
  117|      0|				uconst->is_int = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  118|      0|				break;
  119|      0|			}
  120|  3.39k|	}
  121|       |
  122|  3.39k|	if (VIPS_OBJECT_CLASS(vips_unary_const_parent_class)->build(object))
  ------------------
  |  |  435|  3.39k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  3.39k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  3.39k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (122:6): [True: 0, False: 3.39k]
  ------------------
  123|      0|		return -1;
  124|       |
  125|  3.39k|	return 0;
  126|  3.39k|}
unaryconst.c:vips_unary_const_init:
  151|  3.39k|{
  152|  3.39k|}

CMYK2XYZ.c:vips_CMYK2XYZ_class_init:
  105|      1|{
  106|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  108|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	object_class->nickname = "CMYK2XYZ";
  114|      1|	object_class->description = _("transform CMYK to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	object_class->build = vips_CMYK2XYZ_build;
  117|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  118|       |
  119|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  120|      1|		_("Input"),
  121|      1|		_("Input image"),
  122|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  123|      1|		G_STRUCT_OFFSET(VipsCMYK2XYZ, in));
  124|       |
  125|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  126|      1|		_("Output"),
  127|      1|		_("Output image"),
  128|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  129|      1|		G_STRUCT_OFFSET(VipsCMYK2XYZ, out));
  130|      1|}

HSV2sRGB.c:vips_HSV2sRGB_class_init:
  107|      1|{
  108|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  109|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  110|       |
  111|      1|	object_class->nickname = "HSV2sRGB";
  112|      1|	object_class->description = _("transform HSV to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  113|       |
  114|      1|	colour_class->process_line = vips_HSV2sRGB_line;
  115|      1|}

LCh2Lab.c:vips_LCh2Lab_class_init:
  106|      1|{
  107|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  108|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  109|       |
  110|      1|	object_class->nickname = "LCh2Lab";
  111|      1|	object_class->description = _("transform LCh to Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  112|       |
  113|      1|	colour_class->process_line = vips_LCh2Lab_line;
  114|      1|}

LCh2UCS.c:vips_LCh2CMC_class_init:
  201|      1|{
  202|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  203|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  204|       |
  205|      1|	object_class->nickname = "LCh2CMC";
  206|      1|	object_class->description = _("transform LCh to CMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|       |
  208|      1|	colour_class->process_line = vips_LCh2CMC_line;
  209|      1|}

Lab2LCh.c:vips_Lab2LCh_class_init:
  127|      1|{
  128|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  129|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  130|       |
  131|      1|	object_class->nickname = "Lab2LCh";
  132|      1|	object_class->description = _("transform Lab to LCh");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  133|       |
  134|      1|	colour_class->process_line = vips_Lab2LCh_line;
  135|      1|}

Lab2LabQ.c:vips_Lab2LabQ_class_init:
  132|      1|{
  133|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  134|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  135|       |
  136|      1|	object_class->nickname = "Lab2LabQ";
  137|      1|	object_class->description = _("transform float Lab to LabQ coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|       |
  139|      1|	colour_class->process_line = vips_Lab2LabQ_line;
  140|      1|}

Lab2LabS.c:vips_Lab2LabS_class_init:
   77|      1|{
   78|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   79|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   80|       |
   81|      1|	object_class->nickname = "Lab2LabS";
   82|      1|	object_class->description = _("transform float Lab to signed short");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   83|       |
   84|      1|	colour_class->process_line = vips_Lab2LabS_line;
   85|      1|}

vips_col_Lab2XYZ:
  245|   262k|{
  246|   262k|	VipsLab2XYZ Lab2XYZ;
  247|       |
  248|   262k|	Lab2XYZ.X0 = VIPS_D65_X0;
  ------------------
  |  |   58|   262k|#define VIPS_D65_X0 (95.0470)
  ------------------
  249|   262k|	Lab2XYZ.Y0 = VIPS_D65_Y0;
  ------------------
  |  |   59|   262k|#define VIPS_D65_Y0 (100.0)
  ------------------
  250|   262k|	Lab2XYZ.Z0 = VIPS_D65_Z0;
  ------------------
  |  |   60|   262k|#define VIPS_D65_Z0 (108.8827)
  ------------------
  251|   262k|	vips_col_Lab2XYZ_helper(&Lab2XYZ, L, a, b, X, Y, Z);
  252|   262k|}
Lab2XYZ.c:vips_Lab2XYZ_class_init:
  168|      1|{
  169|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  172|       |
  173|      1|	gobject_class->set_property = vips_object_set_property;
  174|      1|	gobject_class->get_property = vips_object_get_property;
  175|       |
  176|      1|	object_class->nickname = "Lab2XYZ";
  177|      1|	object_class->description = _("transform CIELAB to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  178|      1|	object_class->build = vips_Lab2XYZ_build;
  179|       |
  180|      1|	colour_class->process_line = vips_Lab2XYZ_line;
  181|       |
  182|      1|	VIPS_ARG_BOXED(class, "temp", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  183|      1|		_("Temperature"),
  184|      1|		_("Color temperature"),
  185|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  186|      1|		G_STRUCT_OFFSET(VipsLab2XYZ, temp),
  187|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  188|      1|}
Lab2XYZ.c:vips_col_Lab2XYZ_helper:
   86|   262k|{
   87|   262k|	double cby, tmp;
   88|       |
   89|   262k|	if (L < 8.0) {
  ------------------
  |  Branch (89:6): [True: 24.5k, False: 237k]
  ------------------
   90|  24.5k|		*Y = (L * Lab2XYZ->Y0) / 903.3;
   91|  24.5k|		cby = 7.787 * (*Y / Lab2XYZ->Y0) + 16.0 / 116.0;
   92|  24.5k|	}
   93|   237k|	else {
   94|   237k|		cby = (L + 16.0) / 116.0;
   95|   237k|		*Y = Lab2XYZ->Y0 * cby * cby * cby;
   96|   237k|	}
   97|       |
   98|   262k|	tmp = a / 500.0 + cby;
   99|   262k|	if (tmp < 0.2069)
  ------------------
  |  Branch (99:6): [True: 33.4k, False: 228k]
  ------------------
  100|  33.4k|		*X = Lab2XYZ->X0 * (tmp - 0.13793) / 7.787;
  101|   228k|	else
  102|   228k|		*X = Lab2XYZ->X0 * tmp * tmp * tmp;
  103|       |
  104|   262k|	tmp = cby - b / 200.0;
  105|   262k|	if (tmp < 0.2069)
  ------------------
  |  Branch (105:6): [True: 59.1k, False: 203k]
  ------------------
  106|  59.1k|		*Z = Lab2XYZ->Z0 * (tmp - 0.13793) / 7.787;
  107|   203k|	else
  108|   203k|		*Z = Lab2XYZ->Z0 * tmp * tmp * tmp;
  109|   262k|}

vips_LabQ2Lab:
  158|     28|{
  159|     28|	va_list ap;
  160|     28|	int result;
  161|       |
  162|     28|	va_start(ap, out);
  163|     28|	result = vips_call_split("LabQ2Lab", ap, in, out);
  164|     28|	va_end(ap);
  165|       |
  166|     28|	return result;
  167|     28|}
LabQ2Lab.c:vips_LabQ2Lab_class_init:
  120|      1|{
  121|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  122|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  123|       |
  124|      1|	object_class->nickname = "LabQ2Lab";
  125|      1|	object_class->description = _("unpack a LabQ image to float Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  126|       |
  127|      1|	colour_class->process_line = vips_LabQ2Lab_line;
  128|      1|}
LabQ2Lab.c:vips_LabQ2Lab_init:
  132|     28|{
  133|     28|	VipsColour *colour = VIPS_COLOUR(LabQ2Lab);
  ------------------
  |  |   42|     28|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     28|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     28|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     28|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  134|     28|	VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2Lab);
  ------------------
  |  |  135|     28|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     28|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     28|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|     28|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  135|       |
  136|     28|	colour->coding = VIPS_CODING_NONE;
  137|     28|	colour->interpretation = VIPS_INTERPRETATION_LAB;
  138|     28|	colour->format = VIPS_FORMAT_FLOAT;
  139|     28|	colour->bands = 3;
  140|       |
  141|     28|	code->input_coding = VIPS_CODING_LABQ;
  142|     28|}
LabQ2Lab.c:vips_LabQ2Lab_line:
   76|    635|{
   77|    635|	signed char *restrict p = (signed char *) in[0];
   78|    635|	float *restrict q = (float *) out;
   79|       |
   80|    635|	int l;
   81|    635|	int lsbs; /* for lsbs byte */
   82|    635|	int i;	  /* counter      */
   83|       |
   84|       |	/* Read input with a signed pointer to get signed ab easily.
   85|       |	 */
   86|  3.19k|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (86:14): [True: 2.56k, False: 635]
  ------------------
   87|       |		/* Get extra bits.
   88|       |		 */
   89|  2.56k|		lsbs = ((unsigned char *) p)[3];
   90|       |
   91|       |		/* Build L.
   92|       |		 */
   93|  2.56k|		l = ((unsigned char *) p)[0];
   94|  2.56k|		l = (l << 2) | (lsbs >> 6);
   95|  2.56k|		q[0] = (float) l * (100.0 / 1023.0);
   96|       |
   97|       |		/* Build a.
   98|       |		 */
   99|  2.56k|		l = VIPS_LSHIFT_INT(p[1], 3) | ((lsbs >> 3) & 0x7);
  ------------------
  |  |   87|  2.56k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  100|  2.56k|		q[1] = (float) l * 0.125;
  101|       |
  102|       |		/* And b.
  103|       |		 */
  104|  2.56k|		l = VIPS_LSHIFT_INT(p[2], 3) | (lsbs & 0x7);
  ------------------
  |  |   87|  2.56k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  105|  2.56k|		q[2] = (float) l * 0.125;
  106|       |
  107|  2.56k|		p += 4;
  108|  2.56k|		q += 3;
  109|  2.56k|	}
  110|    635|}

LabQ2LabS.c:vips_LabQ2LabS_class_init:
   99|      1|{
  100|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  101|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  102|       |
  103|      1|	object_class->nickname = "LabQ2LabS";
  104|      1|	object_class->description = _("unpack a LabQ image to short Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  105|       |
  106|      1|	colour_class->process_line = vips_LabQ2LabS_line;
  107|      1|}

vips_col_make_tables_RGB_8:
  171|   262k|{
  172|   262k|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|   262k|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  173|       |
  174|   262k|	VIPS_ONCE(&once, calcul_tables_8, NULL);
  ------------------
  |  |   93|   262k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   262k|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|   262k|	{ \
  |  |   95|   262k|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|   262k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|   262k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   262k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|   262k|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|   262k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 262k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|   262k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|   262k|   else                                         \
  |  |  |  |  |  |  931|   262k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|   262k|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|   262k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 262k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|   262k|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|   262k|	} \
  |  |   98|   262k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   262k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|   262k|}
vips_col_XYZ2scRGB:
  262|   262k|{
  263|   262k|	X /= SCALE;
  ------------------
  |  |  212|   262k|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|   262k|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  264|   262k|	Y /= SCALE;
  ------------------
  |  |  212|   262k|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|   262k|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  265|   262k|	Z /= SCALE;
  ------------------
  |  |  212|   262k|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|   262k|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  266|       |
  267|       |	/* Use 6 decimal places of precision for the inverse matrix.
  268|       |	 */
  269|   262k|	*R = 3.240625 * X +
  270|   262k|		-1.537208 * Y +
  271|   262k|		-0.498629 * Z;
  272|   262k|	*G = -0.968931 * X +
  273|   262k|		1.875756 * Y +
  274|   262k|		0.041518 * Z;
  275|   262k|	*B = 0.055710 * X +
  276|   262k|		-0.204021 * Y +
  277|   262k|		1.056996 * Z;
  278|       |
  279|   262k|	return 0;
  280|   262k|}
vips_col_scRGB2sRGB_8:
  363|   262k|{
  364|   262k|	vips_col_make_tables_RGB_8();
  365|       |
  366|   262k|	return vips_col_scRGB2sRGB(256, vips_Y2v_8, R, G, B, r, g, b, og);
  367|   262k|}
vips_LabQ2sRGB:
  582|     71|{
  583|     71|	va_list ap;
  584|     71|	int result;
  585|       |
  586|     71|	va_start(ap, out);
  587|     71|	result = vips_call_split("LabQ2sRGB", ap, in, out);
  588|     71|	va_end(ap);
  589|       |
  590|     71|	return result;
  591|     71|}
LabQ2sRGB.c:vips_LabQ2sRGB_class_init:
  544|      1|{
  545|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  546|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  547|       |
  548|      1|	object_class->nickname = "LabQ2sRGB";
  549|      1|	object_class->description = _("convert a LabQ image to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  550|       |
  551|      1|	colour_class->process_line = vips_LabQ2sRGB_line;
  552|      1|}
LabQ2sRGB.c:vips_LabQ2sRGB_line:
  491|    736|{
  492|    736|	unsigned char *p = (unsigned char *) in[0];
  493|       |
  494|    736|	int i, t;
  495|       |
  496|       |	/* Current error.
  497|       |	 */
  498|    736|	int le = 0;
  499|    736|	int ae = 0;
  500|    736|	int be = 0;
  501|       |
  502|    736|	vips_col_make_tables_LabQ2sRGB();
  503|       |
  504|  8.52k|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (504:14): [True: 7.79k, False: 736]
  ------------------
  505|       |		/* Get colour, add in error from previous pixel.
  506|       |		 */
  507|  7.79k|		int L = p[0] + le;
  508|  7.79k|		int A = (signed char) p[1] + ae;
  509|  7.79k|		int B = (signed char) p[2] + be;
  510|       |
  511|  7.79k|		p += 4;
  512|       |
  513|       |		/* Look out for overflow.
  514|       |		 */
  515|  7.79k|		L = VIPS_MIN(255, L);
  ------------------
  |  |   55|  7.79k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 296, False: 7.49k]
  |  |  ------------------
  ------------------
  516|  7.79k|		A = VIPS_MIN(127, A);
  ------------------
  |  |   55|  7.79k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 256, False: 7.53k]
  |  |  ------------------
  ------------------
  517|  7.79k|		B = VIPS_MIN(127, B);
  ------------------
  |  |   55|  7.79k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 243, False: 7.54k]
  |  |  ------------------
  ------------------
  518|       |
  519|       |		/* Find new quant error. This will always be +ve.
  520|       |		 */
  521|  7.79k|		le = L & 3;
  522|  7.79k|		ae = A & 3;
  523|  7.79k|		be = B & 3;
  524|       |
  525|       |		/* Scale to 0-63.
  526|       |		 */
  527|  7.79k|		L = (L >> 2) & 63;
  528|  7.79k|		A = (A >> 2) & 63;
  529|  7.79k|		B = (B >> 2) & 63;
  530|       |
  531|       |		/* Convert to RGB.
  532|       |		 */
  533|  7.79k|		t = INDEX(L, A, B);
  ------------------
  |  |   96|  7.79k|#define INDEX(L, A, B) (L + (A << 6) + (B << 12))
  ------------------
  534|  7.79k|		q[0] = vips_red[t];
  535|  7.79k|		q[1] = vips_green[t];
  536|  7.79k|		q[2] = vips_blue[t];
  537|       |
  538|  7.79k|		q += 3;
  539|  7.79k|	}
  540|    736|}
LabQ2sRGB.c:vips_col_make_tables_LabQ2sRGB:
  481|    736|{
  482|    736|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|    736|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  483|       |
  484|    736|	VIPS_ONCE(&once, build_tables, NULL);
  ------------------
  |  |   93|    736|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    736|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|    736|	{ \
  |  |   95|    736|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|    736|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|    736| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|    736|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|    736|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|    736|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 735]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|    736|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|    736|   else                                         \
  |  |  |  |  |  |  931|    736|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|    736|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|    736|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 735]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|    736|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|    736|	} \
  |  |   98|    736|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    736|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|    736|}
LabQ2sRGB.c:build_tables:
  448|      1|{
  449|      1|	int l, a, b;
  450|      1|	int t;
  451|       |
  452|     65|	for (l = 0; l < 64; l++) {
  ------------------
  |  Branch (452:14): [True: 64, False: 1]
  ------------------
  453|  4.16k|		for (a = 0; a < 64; a++) {
  ------------------
  |  Branch (453:15): [True: 4.09k, False: 64]
  ------------------
  454|   266k|			for (b = 0; b < 64; b++) {
  ------------------
  |  Branch (454:16): [True: 262k, False: 4.09k]
  ------------------
  455|       |				/* Scale to lab space.
  456|       |				 */
  457|   262k|				float L = (l << 2) * (100.0 / 256.0);
  458|   262k|				float A = (signed char) (a << 2);
  459|   262k|				float B = (signed char) (b << 2);
  460|   262k|				float X, Y, Z;
  461|   262k|				float Rf, Gf, Bf;
  462|   262k|				int rb, gb, bb;
  463|       |
  464|   262k|				vips_col_Lab2XYZ(L, A, B, &X, &Y, &Z);
  465|   262k|				vips_col_XYZ2scRGB(X, Y, Z, &Rf, &Gf, &Bf);
  466|   262k|				vips_col_scRGB2sRGB_8(Rf, Gf, Bf, &rb, &gb, &bb, NULL);
  467|       |
  468|   262k|				t = INDEX(l, a, b);
  ------------------
  |  |   96|   262k|#define INDEX(L, A, B) (L + (A << 6) + (B << 12))
  ------------------
  469|   262k|				vips_red[t] = rb;
  470|   262k|				vips_green[t] = gb;
  471|   262k|				vips_blue[t] = bb;
  472|   262k|			}
  473|  4.09k|		}
  474|     64|	}
  475|       |
  476|      1|	return NULL;
  477|      1|}
LabQ2sRGB.c:vips_LabQ2sRGB_init:
  556|     71|{
  557|     71|	VipsColour *colour = VIPS_COLOUR(LabQ2sRGB);
  ------------------
  |  |   42|     71|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     71|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     71|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     71|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  558|     71|	VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2sRGB);
  ------------------
  |  |  135|     71|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     71|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     71|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|     71|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  559|       |
  560|     71|	colour->coding = VIPS_CODING_NONE;
  561|     71|	colour->interpretation = VIPS_INTERPRETATION_sRGB;
  562|     71|	colour->format = VIPS_FORMAT_UCHAR;
  563|     71|	colour->bands = 3;
  564|       |
  565|     71|	code->input_coding = VIPS_CODING_LABQ;
  566|     71|}
LabQ2sRGB.c:calcul_tables_8:
  163|      1|{
  164|      1|	calcul_tables(256, vips_Y2v_8, vips_v2Y_8);
  165|       |
  166|      1|	return NULL;
  167|      1|}
LabQ2sRGB.c:calcul_tables:
  131|      1|{
  132|      1|	int i;
  133|       |
  134|    257|	for (i = 0; i < range; i++) {
  ------------------
  |  Branch (134:14): [True: 256, False: 1]
  ------------------
  135|    256|		float f = (float) i / (range - 1);
  136|    256|		float v;
  137|       |
  138|    256|		if (f <= 0.0031308)
  ------------------
  |  Branch (138:7): [True: 1, False: 255]
  ------------------
  139|      1|			v = 12.92 * f;
  140|    255|		else
  141|    255|			v = (1.0 + 0.055) * pow(f, 1.0 / 2.4) - 0.055;
  142|       |
  143|    256|		Y2v[i] = VIPS_RINT((range - 1) * v);
  ------------------
  |  |   74|    256|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  144|    256|	}
  145|       |
  146|       |	/* Copy the final element. This is used in the piecewise linear
  147|       |	 * interpolator below.
  148|       |	 */
  149|      1|	Y2v[range] = Y2v[range - 1];
  150|       |
  151|    257|	for (i = 0; i < range; i++) {
  ------------------
  |  Branch (151:14): [True: 256, False: 1]
  ------------------
  152|    256|		float f = (float) i / (range - 1);
  153|       |
  154|    256|		if (f <= 0.04045)
  ------------------
  |  Branch (154:7): [True: 11, False: 245]
  ------------------
  155|     11|			v2Y[i] = f / 12.92;
  156|    245|		else
  157|    245|			v2Y[i] = pow((f + 0.055) / (1 + 0.055), 2.4);
  158|    256|	}
  159|      1|}
LabQ2sRGB.c:vips_col_scRGB2sRGB:
  292|   262k|{
  293|   262k|	int maxval = range - 1;
  294|       |
  295|   262k|	int og;
  296|   262k|	float Yf;
  297|   262k|	int Yi;
  298|   262k|	float v;
  299|       |
  300|       |	/* RGB can be NaN. Throw those values out, they will break
  301|       |	 * our clipping.
  302|       |	 *
  303|       |	 * Don't use isnormal(), it is false for 0.0 and for subnormal
  304|       |	 * numbers.
  305|       |	 */
  306|   262k|	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|   524k|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 0, False: 262k]
  |  |  ------------------
  ------------------
              	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|   524k|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 0, False: 262k]
  |  |  ------------------
  ------------------
              	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|   262k|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 0, False: 262k]
  |  |  ------------------
  ------------------
  307|      0|		*r = 0;
  308|      0|		*g = 0;
  309|      0|		*b = 0;
  310|       |
  311|      0|		return -1;
  312|      0|	}
  313|       |
  314|       |	/* Clip range, set the out-of-gamut flag.
  315|       |	 */
  316|   262k|#define CLIP(L, V, H) \
  317|   262k|	{ \
  318|   262k|		if ((V) < (L)) { \
  319|   262k|			(V) = (L); \
  320|   262k|			og = 1; \
  321|   262k|		} \
  322|   262k|		else if ((V) > (H)) { \
  323|   262k|			(V) = (H); \
  324|   262k|			og = 1; \
  325|   262k|		} \
  326|   262k|	}
  327|       |
  328|       |	/* Look up with a float index: interpolate between the nearest two
  329|       |	 * points.
  330|       |	 *
  331|       |	 * The +1 on the index is safe, see above.
  332|       |	 */
  333|       |
  334|   262k|	og = 0;
  335|       |
  336|   262k|	Yf = R * maxval;
  337|   262k|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|   262k|	{ \
  |  |  318|   262k|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 116k, False: 145k]
  |  |  ------------------
  |  |  319|   116k|			(V) = (L); \
  |  |  320|   116k|			og = 1; \
  |  |  321|   116k|		} \
  |  |  322|   262k|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 37.1k, False: 108k]
  |  |  ------------------
  |  |  323|  37.1k|			(V) = (H); \
  |  |  324|  37.1k|			og = 1; \
  |  |  325|  37.1k|		} \
  |  |  326|   262k|	}
  ------------------
  338|   262k|	Yi = (int) Yf;
  339|   262k|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  340|   262k|	*r = VIPS_RINT(v);
  ------------------
  |  |   74|   262k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  341|       |
  342|   262k|	Yf = G * maxval;
  343|   262k|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|   262k|	{ \
  |  |  318|   262k|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 46.5k, False: 215k]
  |  |  ------------------
  |  |  319|  46.5k|			(V) = (L); \
  |  |  320|  46.5k|			og = 1; \
  |  |  321|  46.5k|		} \
  |  |  322|   262k|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 13.3k, False: 202k]
  |  |  ------------------
  |  |  323|  13.3k|			(V) = (H); \
  |  |  324|  13.3k|			og = 1; \
  |  |  325|  13.3k|		} \
  |  |  326|   262k|	}
  ------------------
  344|   262k|	Yi = (int) Yf;
  345|   262k|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  346|   262k|	*g = VIPS_RINT(v);
  ------------------
  |  |   74|   262k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  347|       |
  348|   262k|	Yf = B * maxval;
  349|   262k|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|   262k|	{ \
  |  |  318|   262k|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 72.6k, False: 189k]
  |  |  ------------------
  |  |  319|  72.6k|			(V) = (L); \
  |  |  320|  72.6k|			og = 1; \
  |  |  321|  72.6k|		} \
  |  |  322|   262k|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 53.7k, False: 135k]
  |  |  ------------------
  |  |  323|  53.7k|			(V) = (H); \
  |  |  324|  53.7k|			og = 1; \
  |  |  325|  53.7k|		} \
  |  |  326|   262k|	}
  ------------------
  350|   262k|	Yi = (int) Yf;
  351|   262k|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  352|   262k|	*b = VIPS_RINT(v);
  ------------------
  |  |   74|   262k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  353|       |
  354|   262k|	if (og_ret)
  ------------------
  |  Branch (354:6): [True: 0, False: 262k]
  ------------------
  355|      0|		*og_ret = og;
  356|       |
  357|   262k|	return 0;
  358|   262k|}

LabS2Lab.c:vips_LabS2Lab_class_init:
   73|      1|{
   74|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   75|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   76|       |
   77|      1|	object_class->nickname = "LabS2Lab";
   78|      1|	object_class->description = _("transform signed short Lab to float");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   79|       |
   80|      1|	colour_class->process_line = vips_LabS2Lab_line;
   81|      1|}

LabS2LabQ.c:vips_LabS2LabQ_class_init:
  122|      1|{
  123|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  124|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  125|       |
  126|      1|	object_class->nickname = "LabS2LabQ";
  127|      1|	object_class->description = _("transform short Lab to LabQ coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	colour_class->process_line = vips_LabS2LabQ_line;
  130|      1|}

UCS2LCh.c:vips_CMC2LCh_class_init:
  268|      1|{
  269|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  270|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  271|       |
  272|      1|	object_class->nickname = "CMC2LCh";
  273|      1|	object_class->description = _("transform LCh to CMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|       |
  275|      1|	colour_class->process_line = vips_CMC2LCh_line;
  276|      1|}

XYZ2CMYK.c:vips_XYZ2CMYK_class_init:
  104|      1|{
  105|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  107|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  108|       |
  109|      1|	gobject_class->set_property = vips_object_set_property;
  110|      1|	gobject_class->get_property = vips_object_get_property;
  111|       |
  112|      1|	object_class->nickname = "XYZ2CMYK";
  113|      1|	object_class->description = _("transform XYZ to CMYK");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  114|       |
  115|      1|	object_class->build = vips_XYZ2CMYK_build;
  116|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  117|       |
  118|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  119|      1|		_("Input"),
  120|      1|		_("Input image"),
  121|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  122|      1|		G_STRUCT_OFFSET(VipsXYZ2CMYK, in));
  123|       |
  124|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  125|      1|		_("Output"),
  126|      1|		_("Output image"),
  127|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  128|      1|		G_STRUCT_OFFSET(VipsXYZ2CMYK, out));
  129|      1|}

XYZ2Lab.c:vips_XYZ2Lab_class_init:
  221|      1|{
  222|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  224|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  225|       |
  226|      1|	gobject_class->set_property = vips_object_set_property;
  227|      1|	gobject_class->get_property = vips_object_get_property;
  228|       |
  229|      1|	object_class->nickname = "XYZ2Lab";
  230|      1|	object_class->description = _("transform XYZ to Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  231|      1|	object_class->build = vips_XYZ2Lab_build;
  232|       |
  233|      1|	colour_class->process_line = vips_XYZ2Lab_line;
  234|       |
  235|      1|	VIPS_ARG_BOXED(class, "temp", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  236|      1|		_("Temperature"),
  237|      1|		_("Colour temperature"),
  238|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsXYZ2Lab, temp),
  240|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  241|      1|}

XYZ2Yxy.c:vips_XYZ2Yxy_class_init:
   93|      1|{
   94|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   95|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   96|       |
   97|      1|	object_class->nickname = "XYZ2Yxy";
   98|      1|	object_class->description = _("transform XYZ to Yxy");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   99|       |
  100|      1|	colour_class->process_line = vips_XYZ2Yxy_line;
  101|      1|}

XYZ2scRGB.c:vips_XYZ2scRGB_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  188|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  189|       |
  190|      1|	gobject_class->set_property = vips_object_set_property;
  191|      1|	gobject_class->get_property = vips_object_get_property;
  192|       |
  193|      1|	object_class->nickname = "XYZ2scRGB";
  194|      1|	object_class->description = _("transform XYZ to scRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  195|      1|	object_class->build = vips_XYZ2scRGB_build;
  196|       |
  197|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  198|       |
  199|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  200|      1|		_("Input"),
  201|      1|		_("Input image"),
  202|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  203|      1|		G_STRUCT_OFFSET(VipsXYZ2scRGB, in));
  204|       |
  205|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  206|      1|		_("Output"),
  207|      1|		_("Output image"),
  208|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  209|      1|		G_STRUCT_OFFSET(VipsXYZ2scRGB, out));
  210|      1|}

Yxy2XYZ.c:vips_Yxy2XYZ_class_init:
   98|      1|{
   99|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  100|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  101|       |
  102|      1|	object_class->nickname = "Yxy2XYZ";
  103|      1|	object_class->description = _("transform Yxy to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  104|       |
  105|      1|	colour_class->process_line = vips_Yxy2XYZ_line;
  106|      1|}

vips_colour_operation_init:
  712|      2|{
  713|      2|	extern GType vips_colourspace_get_type(void);
  714|      2|	extern GType vips_Lab2XYZ_get_type(void);
  715|      2|	extern GType vips_XYZ2Lab_get_type(void);
  716|      2|	extern GType vips_Lab2LCh_get_type(void);
  717|      2|	extern GType vips_LCh2Lab_get_type(void);
  718|      2|	extern GType vips_LCh2CMC_get_type(void);
  719|      2|	extern GType vips_CMC2LCh_get_type(void);
  720|      2|	extern GType vips_Yxy2XYZ_get_type(void);
  721|      2|	extern GType vips_XYZ2Yxy_get_type(void);
  722|      2|	extern GType vips_LabQ2Lab_get_type(void);
  723|      2|	extern GType vips_Lab2LabQ_get_type(void);
  724|      2|	extern GType vips_LabQ2LabS_get_type(void);
  725|      2|	extern GType vips_LabS2LabQ_get_type(void);
  726|      2|	extern GType vips_LabS2Lab_get_type(void);
  727|      2|	extern GType vips_Lab2LabS_get_type(void);
  728|      2|	extern GType vips_rad2float_get_type(void);
  729|      2|	extern GType vips_float2rad_get_type(void);
  730|      2|	extern GType vips_LabQ2sRGB_get_type(void);
  731|      2|	extern GType vips_XYZ2sRGB_get_type(void);
  732|      2|	extern GType vips_sRGB2scRGB_get_type(void);
  733|      2|	extern GType vips_sRGB2HSV_get_type(void);
  734|      2|	extern GType vips_HSV2sRGB_get_type(void);
  735|      2|	extern GType vips_scRGB2XYZ_get_type(void);
  736|      2|	extern GType vips_scRGB2BW_get_type(void);
  737|      2|	extern GType vips_XYZ2scRGB_get_type(void);
  738|      2|	extern GType vips_scRGB2sRGB_get_type(void);
  739|      2|	extern GType vips_CMYK2XYZ_get_type(void);
  740|      2|	extern GType vips_XYZ2CMYK_get_type(void);
  741|      2|	extern GType vips_profile_load_get_type(void);
  742|      2|#ifdef HAVE_LCMS2
  743|      2|	extern GType vips_icc_import_get_type(void);
  744|      2|	extern GType vips_icc_export_get_type(void);
  745|      2|	extern GType vips_icc_transform_get_type(void);
  746|      2|#endif
  747|      2|	extern GType vips_dE76_get_type(void);
  748|      2|	extern GType vips_dE00_get_type(void);
  749|      2|	extern GType vips_dECMC_get_type(void);
  750|       |
  751|      2|	vips_colourspace_get_type();
  752|      2|	vips_Lab2XYZ_get_type();
  753|      2|	vips_XYZ2Lab_get_type();
  754|      2|	vips_Lab2LCh_get_type();
  755|      2|	vips_LCh2Lab_get_type();
  756|      2|	vips_LCh2CMC_get_type();
  757|      2|	vips_CMC2LCh_get_type();
  758|      2|	vips_XYZ2Yxy_get_type();
  759|      2|	vips_Yxy2XYZ_get_type();
  760|      2|	vips_LabQ2Lab_get_type();
  761|      2|	vips_Lab2LabQ_get_type();
  762|      2|	vips_LabQ2LabS_get_type();
  763|      2|	vips_LabS2LabQ_get_type();
  764|      2|	vips_LabS2Lab_get_type();
  765|      2|	vips_Lab2LabS_get_type();
  766|      2|	vips_rad2float_get_type();
  767|      2|	vips_float2rad_get_type();
  768|      2|	vips_LabQ2sRGB_get_type();
  769|      2|	vips_sRGB2scRGB_get_type();
  770|      2|	vips_scRGB2XYZ_get_type();
  771|      2|	vips_scRGB2BW_get_type();
  772|      2|	vips_sRGB2HSV_get_type();
  773|      2|	vips_HSV2sRGB_get_type();
  774|      2|	vips_XYZ2scRGB_get_type();
  775|      2|	vips_scRGB2sRGB_get_type();
  776|      2|	vips_CMYK2XYZ_get_type();
  777|      2|	vips_XYZ2CMYK_get_type();
  778|      2|	vips_profile_load_get_type();
  779|      2|#ifdef HAVE_LCMS2
  780|      2|	vips_icc_import_get_type();
  781|      2|	vips_icc_export_get_type();
  782|      2|	vips_icc_transform_get_type();
  783|      2|#endif
  784|      2|	vips_dE76_get_type();
  785|      2|	vips_dE00_get_type();
  786|      2|	vips_dECMC_get_type();
  787|      2|}
colour.c:vips_colour_class_init:
  400|      1|{
  401|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  404|       |
  405|      1|	gobject_class->set_property = vips_object_set_property;
  406|      1|	gobject_class->get_property = vips_object_get_property;
  407|       |
  408|      1|	vobject_class->nickname = "colour";
  409|      1|	vobject_class->description = _("color operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  410|      1|	vobject_class->build = vips_colour_build;
  411|       |
  412|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  413|       |
  414|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  415|      1|		_("Output"),
  416|      1|		_("Output image"),
  417|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  418|      1|		G_STRUCT_OFFSET(VipsColour, out));
  419|      1|}
colour.c:vips_colour_build:
  267|    347|{
  268|    347|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|    347|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    347|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    347|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|    347|	VipsColour *colour = VIPS_COLOUR(object);
  ------------------
  |  |   42|    347|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    347|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    347|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|    347|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  270|       |
  271|    347|	VipsImage **in;
  272|    347|	VipsImage **extra_bands;
  273|    347|	VipsImage *out;
  274|       |
  275|    347|	int i;
  276|       |
  277|       |#ifdef DEBUG
  278|       |	printf("vips_colour_build: ");
  279|       |	vips_object_print_name(object);
  280|       |	printf("\n");
  281|       |#endif /*DEBUG*/
  282|       |
  283|    347|	if (VIPS_OBJECT_CLASS(vips_colour_parent_class)->build(object))
  ------------------
  |  |  435|    347|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    347|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    347|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (283:6): [True: 0, False: 347]
  ------------------
  284|      0|		return -1;
  285|       |
  286|    347|	if (colour->n > MAX_INPUT_IMAGES) {
  ------------------
  |  |  223|    347|#define MAX_INPUT_IMAGES (64)
  ------------------
  |  Branch (286:6): [True: 0, False: 347]
  ------------------
  287|      0|		vips_error(class->nickname,
  288|      0|			"%s", _("too many input images"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  289|      0|		return -1;
  290|      0|	}
  291|    694|	for (i = 0; i < colour->n; i++)
  ------------------
  |  Branch (291:14): [True: 347, False: 347]
  ------------------
  292|    347|		if (vips_image_pio_input(colour->in[i]))
  ------------------
  |  Branch (292:7): [True: 0, False: 347]
  ------------------
  293|      0|			return -1;
  294|       |
  295|       |	/* colour->in[] must be NULL-terminated, we can use it as an arg to
  296|       |	 * vips_start_many().
  297|       |	 */
  298|    347|	g_assert(!colour->in[colour->n]);
  ------------------
  |  |  166|    347|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    347|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    347|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|       |
  300|    347|	in = colour->in;
  301|    347|	extra_bands = (VipsImage **)
  302|    347|		vips_object_local_array(object, colour->n);
  303|       |
  304|       |	/* If there are more than @input_bands bands, we detach and reattach
  305|       |	 * after processing.
  306|       |	 */
  307|    347|	if (colour->input_bands > 0) {
  ------------------
  |  Branch (307:6): [True: 0, False: 347]
  ------------------
  308|      0|		VipsImage **new_in = (VipsImage **)
  309|      0|			vips_object_local_array(object, colour->n);
  310|       |
  311|      0|		for (i = 0; i < colour->n; i++) {
  ------------------
  |  Branch (311:15): [True: 0, False: 0]
  ------------------
  312|      0|			if (vips_check_bands_atleast(class->nickname,
  ------------------
  |  Branch (312:8): [True: 0, False: 0]
  ------------------
  313|      0|					in[i], colour->input_bands))
  314|      0|				return -1;
  315|       |
  316|      0|			if (in[i]->Bands > colour->input_bands) {
  ------------------
  |  Branch (316:8): [True: 0, False: 0]
  ------------------
  317|      0|				if (vips_extract_band(in[i], &new_in[i], 0,
  ------------------
  |  Branch (317:9): [True: 0, False: 0]
  ------------------
  318|      0|						"n", colour->input_bands,
  319|      0|						NULL))
  320|      0|					return -1;
  321|      0|			}
  322|      0|			else {
  323|      0|				new_in[i] = in[i];
  324|      0|				g_object_ref(new_in[i]);
  325|      0|			}
  326|       |
  327|      0|			if (in[i]->Bands > colour->input_bands)
  ------------------
  |  Branch (327:8): [True: 0, False: 0]
  ------------------
  328|      0|				if (vips_extract_band(in[i], &extra_bands[i],
  ------------------
  |  Branch (328:9): [True: 0, False: 0]
  ------------------
  329|      0|						colour->input_bands,
  330|      0|						"n", in[i]->Bands - colour->input_bands,
  331|      0|						NULL))
  332|      0|					return -1;
  333|      0|		}
  334|       |
  335|      0|		in = new_in;
  336|      0|	}
  337|       |
  338|    347|	out = vips_image_new();
  339|    347|	if (vips_image_pipeline_array(out,
  ------------------
  |  Branch (339:6): [True: 0, False: 347]
  ------------------
  340|    347|			VIPS_DEMAND_STYLE_THINSTRIP, in)) {
  341|      0|		g_object_unref(out);
  342|      0|		return -1;
  343|      0|	}
  344|    347|	out->Coding = colour->coding;
  345|    347|	out->Type = colour->interpretation;
  346|    347|	out->BandFmt = colour->format;
  347|    347|	out->Bands = colour->bands;
  348|       |
  349|    347|	if (colour->profile_filename &&
  ------------------
  |  Branch (349:6): [True: 0, False: 347]
  ------------------
  350|    347|		vips__profile_set(out, colour->profile_filename))
  ------------------
  |  Branch (350:3): [True: 0, False: 0]
  ------------------
  351|      0|		return -1;
  352|       |
  353|    347|	if (vips_image_generate(out,
  ------------------
  |  Branch (353:6): [True: 0, False: 347]
  ------------------
  354|    347|			vips_start_many, vips_colour_gen, vips_stop_many,
  355|    347|			in, colour)) {
  356|      0|		g_object_unref(out);
  357|      0|		return -1;
  358|      0|	}
  359|       |
  360|       |	/* Reattach higher bands, if necessary. If we have more than one input
  361|       |	 * image, just use the first extra bands.
  362|       |	 */
  363|    694|	for (i = 0; i < colour->n; i++)
  ------------------
  |  Branch (363:14): [True: 347, False: 347]
  ------------------
  364|    347|		if (extra_bands[i]) {
  ------------------
  |  Branch (364:7): [True: 0, False: 347]
  ------------------
  365|      0|			VipsImage *t1, *t2;
  366|       |
  367|       |			/* We can't just reattach the extra bands: they might
  368|       |			 * be float (for example) and we might be trying to
  369|       |			 * make a short image. Cast extra to match the body of
  370|       |			 * the image.
  371|       |			 */
  372|       |
  373|      0|			if (vips_cast(extra_bands[i], &t1, out->BandFmt,
  ------------------
  |  Branch (373:8): [True: 0, False: 0]
  ------------------
  374|      0|					"shift", TRUE,
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  375|      0|					NULL)) {
  376|      0|				g_object_unref(out);
  377|      0|				return -1;
  378|      0|			}
  379|       |
  380|      0|			if (vips_bandjoin2(out, t1, &t2,
  ------------------
  |  Branch (380:8): [True: 0, False: 0]
  ------------------
  381|      0|					NULL)) {
  382|      0|				g_object_unref(t1);
  383|      0|				g_object_unref(out);
  384|      0|				return -1;
  385|      0|			}
  386|      0|			g_object_unref(out);
  387|      0|			g_object_unref(t1);
  388|      0|			out = t2;
  389|       |
  390|      0|			break;
  391|      0|		}
  392|       |
  393|    347|	g_object_set(colour, "out", out, NULL);
  394|       |
  395|    347|	return 0;
  396|    347|}
colour.c:vips_colour_gen:
  228|    427|{
  229|    427|	VipsRegion **ir = (VipsRegion **) seq;
  230|    427|	VipsColour *colour = VIPS_COLOUR(b);
  ------------------
  |  |   42|    427|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    427|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    427|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|    427|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  231|    427|	VipsColourClass *class = VIPS_COLOUR_GET_CLASS(colour);
  ------------------
  |  |   52|    427|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|    427|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    427|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|    427|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  232|    427|	VipsRect *r = &out_region->valid;
  233|       |
  234|    427|	int i, y;
  235|    427|	VipsPel *p[MAX_INPUT_IMAGES], *q;
  236|       |
  237|       |	/*
  238|       |	printf("vips_colour_gen: %s, "
  239|       |		   "left = %d, top = %d, width = %d, height = %d\n",
  240|       |		VIPS_OBJECT_CLASS(class)->nickname,
  241|       |		r->left, r->top, r->width, r->height);
  242|       |	*/
  243|       |
  244|    427|	if (vips_reorder_prepare_many(out_region->im, ir, r))
  ------------------
  |  Branch (244:6): [True: 234, False: 193]
  ------------------
  245|    234|		return -1;
  246|       |
  247|    427|	VIPS_GATE_START("vips_colour_gen: work");
  ------------------
  |  |   41|    193|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    193|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    193|	{ \
  |  |   43|    193|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 193]
  |  |  ------------------
  |  |   44|    193|			vips__thread_gate_start(NAME); \
  |  |   45|    193|	} \
  |  |   46|    427|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    427|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|       |
  249|  2.01k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (249:14): [True: 1.81k, False: 193]
  ------------------
  250|  3.63k|		for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (250:15): [True: 1.81k, False: 1.81k]
  ------------------
  251|  1.81k|			p[i] = VIPS_REGION_ADDR(ir[i], r->left, r->top + y);
  ------------------
  |  |  227|  1.81k|	((R)->data + \
  |  |  228|  1.81k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.81k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.81k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.81k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.81k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.81k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|  1.81k|		p[i] = NULL;
  253|  1.81k|		q = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  1.81k|	((R)->data + \
  |  |  228|  1.81k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.81k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.81k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.81k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.81k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.81k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|       |
  255|  1.81k|		class->process_line(colour, q, p, r->width);
  256|  1.81k|	}
  257|       |
  258|    193|	VIPS_GATE_STOP("vips_colour_gen: work");
  ------------------
  |  |   49|    193|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    193|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    193|	{ \
  |  |   51|    193|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 193]
  |  |  ------------------
  |  |   52|    193|			vips__thread_gate_stop(NAME); \
  |  |   53|    193|	} \
  |  |   54|    193|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    193|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|       |
  260|    193|	VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_GET_CLASS(colour)->nickname);
  ------------------
  |  |  189|    193|#define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N)
  ------------------
  261|       |
  262|    193|	return 0;
  263|    427|}
colour.c:vips_colour_init:
  423|    347|{
  424|    347|	colour->coding = VIPS_CODING_NONE;
  425|    347|	colour->interpretation = VIPS_INTERPRETATION_sRGB;
  426|    347|	colour->format = VIPS_FORMAT_UCHAR;
  427|    347|	colour->bands = 3;
  428|    347|	colour->input_bands = -1;
  429|    347|}
colour.c:vips_colour_transform_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      1|	gobject_class->set_property = vips_object_set_property;
  473|      1|	gobject_class->get_property = vips_object_get_property;
  474|       |
  475|      1|	vobject_class->nickname = "space";
  476|      1|	vobject_class->description = _("color space transformations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  477|      1|	vobject_class->build = vips_colour_transform_build;
  478|       |
  479|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  480|      1|		_("Input"),
  481|      1|		_("Input image"),
  482|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  483|      1|		G_STRUCT_OFFSET(VipsColourTransform, in));
  484|      1|}
colour.c:vips_colour_code_class_init:
  561|      1|{
  562|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  563|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|       |
  565|      1|	gobject_class->set_property = vips_object_set_property;
  566|      1|	gobject_class->get_property = vips_object_get_property;
  567|       |
  568|      1|	vobject_class->nickname = "code";
  569|      1|	vobject_class->description = _("change color coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  570|      1|	vobject_class->build = vips_colour_code_build;
  571|       |
  572|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  573|      1|		_("Input"),
  574|      1|		_("Input image"),
  575|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  576|      1|		G_STRUCT_OFFSET(VipsColourCode, in));
  577|      1|}
colour.c:vips_colour_code_build:
  504|    347|{
  505|    347|	VipsColour *colour = VIPS_COLOUR(object);
  ------------------
  |  |   42|    347|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    347|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    347|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|    347|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  506|    347|	VipsColourCode *code = VIPS_COLOUR_CODE(object);
  ------------------
  |  |  135|    347|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    347|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    347|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|    347|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  507|    347|	VipsColourCodeClass *class = VIPS_COLOUR_CODE_GET_CLASS(object);
  ------------------
  |  |  145|    347|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|    347|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    347|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  146|    347|		VIPS_TYPE_COLOUR_CODE, VipsColourCodeClass))
  ------------------
  508|    347|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 6);
  509|       |
  510|    347|	VipsImage *in;
  511|       |
  512|    347|	in = code->in;
  513|       |
  514|       |	/* If this is a LABQ and the coder wants uncoded, unpack.
  515|       |	 */
  516|    347|	if (in &&
  ------------------
  |  Branch (516:6): [True: 347, False: 0]
  ------------------
  517|    347|		in->Coding == VIPS_CODING_LABQ &&
  ------------------
  |  Branch (517:3): [True: 99, False: 248]
  ------------------
  518|    347|		code->input_coding == VIPS_CODING_NONE) {
  ------------------
  |  Branch (518:3): [True: 0, False: 99]
  ------------------
  519|      0|		if (vips_LabQ2Lab(in, &t[0], NULL))
  ------------------
  |  Branch (519:7): [True: 0, False: 0]
  ------------------
  520|      0|			return -1;
  521|      0|		in = t[0];
  522|      0|	}
  523|       |
  524|    347|	if (in &&
  ------------------
  |  Branch (524:6): [True: 347, False: 0]
  ------------------
  525|    347|		vips_check_coding(VIPS_OBJECT_CLASS(class)->nickname,
  ------------------
  |  |  435|    347|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    347|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    347|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (525:3): [True: 0, False: 347]
  ------------------
  526|    347|			in, code->input_coding))
  527|      0|		return -1;
  528|       |
  529|    347|	if (in &&
  ------------------
  |  Branch (529:6): [True: 347, False: 0]
  ------------------
  530|    347|		code->input_coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (530:3): [True: 0, False: 347]
  ------------------
  531|    347|		code->input_format != VIPS_FORMAT_NOTSET &&
  ------------------
  |  Branch (531:3): [True: 0, False: 0]
  ------------------
  532|    347|		in->BandFmt != code->input_format) {
  ------------------
  |  Branch (532:3): [True: 0, False: 0]
  ------------------
  533|      0|		if (vips_cast(in, &t[3], code->input_format, NULL))
  ------------------
  |  Branch (533:7): [True: 0, False: 0]
  ------------------
  534|      0|			return -1;
  535|      0|		in = t[3];
  536|      0|	}
  537|       |
  538|    347|	if (in &&
  ------------------
  |  Branch (538:6): [True: 347, False: 0]
  ------------------
  539|    347|		code->input_coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (539:3): [True: 0, False: 347]
  ------------------
  540|    347|		code->input_interpretation != VIPS_INTERPRETATION_ERROR &&
  ------------------
  |  Branch (540:3): [True: 0, False: 0]
  ------------------
  541|    347|		in->Type != code->input_interpretation) {
  ------------------
  |  Branch (541:3): [True: 0, False: 0]
  ------------------
  542|      0|		if (vips_colourspace(in, &t[4],
  ------------------
  |  Branch (542:7): [True: 0, False: 0]
  ------------------
  543|      0|				code->input_interpretation, NULL))
  544|      0|			return -1;
  545|      0|		in = t[4];
  546|      0|	}
  547|       |
  548|    347|	colour->n = 1;
  549|    347|	colour->in = VIPS_ARRAY(object, 2, VipsImage *);
  ------------------
  |  |   72|    347|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    347|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    347|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    347|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    347|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|    347|	colour->in[0] = in;
  551|    347|	colour->in[1] = NULL;
  552|       |
  553|    347|	if (VIPS_OBJECT_CLASS(vips_colour_code_parent_class)->build(object))
  ------------------
  |  |  435|    347|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    347|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    347|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (553:6): [True: 0, False: 347]
  ------------------
  554|      0|		return -1;
  555|       |
  556|    347|	return 0;
  557|    347|}
colour.c:vips_colour_code_init:
  581|    347|{
  582|    347|	code->input_coding = VIPS_CODING_NONE;
  583|    347|	code->input_interpretation = VIPS_INTERPRETATION_ERROR;
  584|    347|	code->input_format = VIPS_FORMAT_NOTSET;
  585|    347|}
colour.c:vips_colour_difference_class_init:
  672|      1|{
  673|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|       |
  676|      1|	gobject_class->set_property = vips_object_set_property;
  677|      1|	gobject_class->get_property = vips_object_get_property;
  678|       |
  679|      1|	vobject_class->nickname = "difference";
  680|      1|	vobject_class->description = _("calculate color difference");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  681|      1|	vobject_class->build = vips_colour_difference_build;
  682|       |
  683|      1|	VIPS_ARG_IMAGE(class, "left", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  684|      1|		_("Left"),
  685|      1|		_("Left-hand input image"),
  686|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  687|      1|		G_STRUCT_OFFSET(VipsColourDifference, left));
  688|       |
  689|      1|	VIPS_ARG_IMAGE(class, "right", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  690|      1|		_("Right"),
  691|      1|		_("Right-hand input image"),
  692|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  693|      1|		G_STRUCT_OFFSET(VipsColourDifference, right));
  694|      1|}

vips_colourspace_issupported:
  433|    998|{
  434|    998|	VipsInterpretation interpretation;
  435|    998|	int i;
  436|       |
  437|       |	/* Treat RGB as sRGB. If you want some other treatment,
  438|       |	 * you'll need to use the icc funcs.
  439|       |	 */
  440|    998|	interpretation = vips_image_guess_interpretation(image);
  441|    998|	if (interpretation == VIPS_INTERPRETATION_RGB)
  ------------------
  |  Branch (441:6): [True: 0, False: 998]
  ------------------
  442|      0|		interpretation = VIPS_INTERPRETATION_sRGB;
  443|       |
  444|  91.9k|	for (i = 0; i < VIPS_NUMBER(vips_colour_routes); i++)
  ------------------
  |  |   60|  91.9k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (444:14): [True: 91.9k, False: 26]
  ------------------
  445|  91.9k|		if (vips_colour_routes[i].from == interpretation)
  ------------------
  |  Branch (445:7): [True: 972, False: 90.9k]
  ------------------
  446|    972|			return TRUE;
  ------------------
  |  |  798|    972|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    972|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  447|       |
  448|     26|	return FALSE;
  ------------------
  |  |  794|     26|#define	FALSE	(0)
  ------------------
  449|    998|}
colourspace.c:vips_colourspace_class_init:
  542|      1|{
  543|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  546|       |
  547|      1|	gobject_class->set_property = vips_object_set_property;
  548|      1|	gobject_class->get_property = vips_object_get_property;
  549|       |
  550|      1|	vobject_class->nickname = "colourspace";
  551|      1|	vobject_class->description = _("convert to a new colorspace");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  552|      1|	vobject_class->build = vips_colourspace_build;
  553|       |
  554|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  555|       |
  556|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  557|      1|		_("Input"),
  558|      1|		_("Input image"),
  559|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  560|      1|		G_STRUCT_OFFSET(VipsColourspace, in));
  561|       |
  562|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  563|      1|		_("Output"),
  564|      1|		_("Output image"),
  565|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  566|      1|		G_STRUCT_OFFSET(VipsColourspace, out));
  567|       |
  568|      1|	VIPS_ARG_ENUM(class, "space", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  569|      1|		_("Space"),
  570|      1|		_("Destination color space"),
  571|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  572|      1|		G_STRUCT_OFFSET(VipsColourspace, space),
  573|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
  574|       |
  575|      1|	VIPS_ARG_ENUM(class, "source_space", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  576|      1|		_("Source space"),
  577|      1|		_("Source color space"),
  578|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  579|      1|		G_STRUCT_OFFSET(VipsColourspace, source_space),
  580|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
  581|      1|}

dE00.c:vips_dE00_class_init:
  231|      1|{
  232|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  233|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  234|       |
  235|      1|	object_class->nickname = "dE00";
  236|      1|	object_class->description = _("calculate dE00");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|       |
  238|      1|	colour_class->process_line = vips_dE00_line;
  239|      1|}

dE76.c:vips_dE76_class_init:
  108|      1|{
  109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  110|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  111|       |
  112|      1|	object_class->nickname = "dE76";
  113|      1|	object_class->description = _("calculate dE76");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  114|       |
  115|      1|	colour_class->process_line = vips__pythagoras_line;
  116|      1|}

dECMC.c:vips_dECMC_class_init:
   56|      1|{
   57|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   58|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   59|       |
   60|      1|	object_class->nickname = "dECMC";
   61|      1|	object_class->description = _("calculate dECMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   62|       |
   63|      1|	colour_class->process_line = vips__pythagoras_line;
   64|      1|}

float2rad.c:vips_float2rad_class_init:
  200|      1|{
  201|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  202|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  203|       |
  204|      1|	object_class->nickname = "float2rad";
  205|      1|	object_class->description =
  206|      1|		_("transform float RGB to Radiance coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|       |
  208|      1|	colour_class->process_line = vips_float2rad_line;
  209|      1|}

vips_icc_is_compatible_profile:
 1353|    154|{
 1354|    154|	cmsHPROFILE profile;
 1355|    154|	VipsIccInfo *info;
 1356|       |
 1357|    154|	if (!(profile = cmsOpenProfileFromMem(data, data_length)))
  ------------------
  |  Branch (1357:6): [True: 136, False: 18]
  ------------------
 1358|       |		/* Corrupt profile.
 1359|       |		 */
 1360|    136|		return FALSE;
  ------------------
  |  |  794|    136|#define	FALSE	(0)
  ------------------
 1361|       |
 1362|       |#ifdef DEBUG
 1363|       |	vips_icc_print_profile("from memory", profile);
 1364|       |#endif /*DEBUG*/
 1365|       |
 1366|     18|	if (!(info = vips_icc_info(cmsGetColorSpace(profile)))) {
  ------------------
  |  Branch (1366:6): [True: 4, False: 14]
  ------------------
 1367|       |		/* Unsupported profile.
 1368|       |		 */
 1369|      4|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      4|	{ \
  |  |   43|      4|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 4, False: 0]
  |  |  ------------------
  |  |   44|      4|			(void) F((S)); \
  |  |   45|      4|			(S) = 0; \
  |  |   46|      4|		} \
  |  |   47|      4|	} \
  |  |   48|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1370|      4|		return FALSE;
  ------------------
  |  |  794|      4|#define	FALSE	(0)
  ------------------
 1371|      4|	}
 1372|       |
 1373|     14|	if (!vips_image_is_profile_compatible(image, info->bands)) {
  ------------------
  |  Branch (1373:6): [True: 9, False: 5]
  ------------------
 1374|       |		/* Bands mismatch.
 1375|       |		 */
 1376|      9|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      9|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      9|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      9|	{ \
  |  |   43|      9|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 9, False: 0]
  |  |  ------------------
  |  |   44|      9|			(void) F((S)); \
  |  |   45|      9|			(S) = 0; \
  |  |   46|      9|		} \
  |  |   47|      9|	} \
  |  |   48|      9|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      9|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1377|      9|		return FALSE;
  ------------------
  |  |  794|      9|#define	FALSE	(0)
  ------------------
 1378|      9|	}
 1379|       |
 1380|     14|	VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      5|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      5|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      5|	{ \
  |  |   43|      5|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5, False: 0]
  |  |  ------------------
  |  |   44|      5|			(void) F((S)); \
  |  |   45|      5|			(S) = 0; \
  |  |   46|      5|		} \
  |  |   47|      5|	} \
  |  |   48|     14|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     14|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1381|       |
 1382|      5|	return TRUE;
  ------------------
  |  |  798|      5|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      5|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1383|     14|}
icc_transform.c:vips_icc_class_init:
  749|      1|{
  750|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  752|       |
  753|      1|	gobject_class->dispose = vips_icc_dispose;
  754|      1|	gobject_class->set_property = vips_object_set_property;
  755|      1|	gobject_class->get_property = vips_object_get_property;
  756|       |
  757|      1|	object_class->nickname = "icc";
  758|      1|	object_class->description = _("transform using ICC profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  759|      1|	object_class->build = vips_icc_build;
  760|       |
  761|      1|	VIPS_ARG_ENUM(class, "intent", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  762|      1|		_("Intent"),
  763|      1|		_("Rendering intent"),
  764|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  765|      1|		G_STRUCT_OFFSET(VipsIcc, intent),
  766|      1|		VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE);
  767|       |
  768|      1|	VIPS_ARG_ENUM(class, "pcs", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  769|      1|		_("PCS"),
  770|      1|		_("Set Profile Connection Space"),
  771|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  772|      1|		G_STRUCT_OFFSET(VipsIcc, pcs),
  773|      1|		VIPS_TYPE_PCS, VIPS_PCS_LAB);
  774|       |
  775|      1|	VIPS_ARG_BOOL(class, "black_point_compensation", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  776|      1|		_("Black point compensation"),
  777|      1|		_("Enable black point compensation"),
  778|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  779|      1|		G_STRUCT_OFFSET(VipsIcc, black_point_compensation),
  780|      1|		FALSE);
  781|       |
  782|      1|	cmsSetLogErrorHandler(icc_error);
  783|      1|}
icc_transform.c:icc_error:
  181|    136|{
  182|    136|	vips_error("VipsIcc", "%s", text);
  183|    136|}
icc_transform.c:vips_icc_import_class_init:
  943|      1|{
  944|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  946|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  947|       |
  948|      1|	gobject_class->set_property = vips_object_set_property;
  949|      1|	gobject_class->get_property = vips_object_get_property;
  950|       |
  951|      1|	object_class->nickname = "icc_import";
  952|      1|	object_class->description = _("import from device with ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  953|      1|	object_class->build = vips_icc_import_build;
  954|       |
  955|      1|	colour_class->process_line = vips_icc_import_line;
  956|       |
  957|      1|	VIPS_ARG_BOOL(class, "embedded", 110,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  958|      1|		_("Embedded"),
  959|      1|		_("Use embedded input profile, if available"),
  960|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  961|      1|		G_STRUCT_OFFSET(VipsIccImport, embedded),
  962|      1|		FALSE);
  963|       |
  964|      1|	VIPS_ARG_STRING(class, "input_profile", 120,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  965|      1|		_("Input profile"),
  966|      1|		_("Filename to load input profile from"),
  967|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  968|      1|		G_STRUCT_OFFSET(VipsIccImport, input_profile_filename),
  969|      1|		NULL);
  970|      1|}
icc_transform.c:vips_icc_export_class_init:
 1115|      1|{
 1116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1117|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1118|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
 1119|       |
 1120|      1|	gobject_class->set_property = vips_object_set_property;
 1121|      1|	gobject_class->get_property = vips_object_get_property;
 1122|       |
 1123|      1|	object_class->nickname = "icc_export";
 1124|      1|	object_class->description = _("output to device with ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1125|      1|	object_class->build = vips_icc_export_build;
 1126|       |
 1127|      1|	colour_class->process_line = vips_icc_export_line;
 1128|       |
 1129|      1|	VIPS_ARG_STRING(class, "output_profile", 110,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1130|      1|		_("Output profile"),
 1131|      1|		_("Filename to load output profile from"),
 1132|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1133|      1|		G_STRUCT_OFFSET(VipsIccExport, output_profile_filename),
 1134|      1|		NULL);
 1135|       |
 1136|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1137|      1|		_("Depth"),
 1138|      1|		_("Output device space depth in bits"),
 1139|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1140|      1|		G_STRUCT_OFFSET(VipsIcc, depth),
 1141|      1|		8, 16, 8);
 1142|      1|}
icc_transform.c:vips_icc_transform_class_init:
 1218|      1|{
 1219|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1221|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
 1222|       |
 1223|      1|	gobject_class->set_property = vips_object_set_property;
 1224|      1|	gobject_class->get_property = vips_object_get_property;
 1225|       |
 1226|      1|	object_class->nickname = "icc_transform";
 1227|      1|	object_class->description =
 1228|      1|		_("transform between devices with ICC profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1229|      1|	object_class->build = vips_icc_transform_build;
 1230|       |
 1231|      1|	colour_class->process_line = vips_icc_transform_line;
 1232|       |
 1233|      1|	VIPS_ARG_STRING(class, "output_profile", 110,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1234|      1|		_("Output profile"),
 1235|      1|		_("Filename to load output profile from"),
 1236|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1237|      1|		G_STRUCT_OFFSET(VipsIccTransform, output_profile_filename),
 1238|      1|		NULL);
 1239|       |
 1240|      1|	VIPS_ARG_BOOL(class, "embedded", 120,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1241|      1|		_("Embedded"),
 1242|      1|		_("Use embedded input profile, if available"),
 1243|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1244|      1|		G_STRUCT_OFFSET(VipsIccTransform, embedded),
 1245|      1|		FALSE);
 1246|       |
 1247|      1|	VIPS_ARG_STRING(class, "input_profile", 130,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1248|      1|		_("Input profile"),
 1249|      1|		_("Filename to load input profile from"),
 1250|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1251|      1|		G_STRUCT_OFFSET(VipsIccTransform, input_profile_filename),
 1252|      1|		NULL);
 1253|       |
 1254|      1|	VIPS_ARG_INT(class, "depth", 140,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1255|      1|		_("Depth"),
 1256|      1|		_("Output device space depth in bits"),
 1257|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1258|      1|		G_STRUCT_OFFSET(VipsIcc, depth),
 1259|      1|		8, 16, 8);
 1260|      1|}
icc_transform.c:vips_icc_info:
  246|     18|{
  247|     18|	int i;
  248|       |
  249|     83|	for (i = 0; i < VIPS_NUMBER(vips_icc_info_table); i++)
  ------------------
  |  |   60|     83|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (249:14): [True: 79, False: 4]
  ------------------
  250|     79|		if (vips_icc_info_table[i].signature == signature)
  ------------------
  |  Branch (250:7): [True: 14, False: 65]
  ------------------
  251|     14|			return &vips_icc_info_table[i];
  252|       |
  253|      4|	return NULL;
  254|     18|}
icc_transform.c:vips_image_is_profile_compatible:
  553|     14|{
  554|     14|	switch (image->Type) {
  555|      1|	case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (555:2): [True: 1, False: 13]
  ------------------
  556|      2|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (556:2): [True: 1, False: 13]
  ------------------
  557|       |		/* The ICC profile needs to be monochrome.
  558|       |		 */
  559|      2|		return profile_bands == 1;
  560|       |
  561|      0|	case VIPS_INTERPRETATION_XYZ:
  ------------------
  |  Branch (561:2): [True: 0, False: 14]
  ------------------
  562|      0|	case VIPS_INTERPRETATION_LAB:
  ------------------
  |  Branch (562:2): [True: 0, False: 14]
  ------------------
  563|      0|	case VIPS_INTERPRETATION_LABQ:
  ------------------
  |  Branch (563:2): [True: 0, False: 14]
  ------------------
  564|      0|	case VIPS_INTERPRETATION_RGB:
  ------------------
  |  Branch (564:2): [True: 0, False: 14]
  ------------------
  565|      0|	case VIPS_INTERPRETATION_CMC:
  ------------------
  |  Branch (565:2): [True: 0, False: 14]
  ------------------
  566|      0|	case VIPS_INTERPRETATION_LCH:
  ------------------
  |  Branch (566:2): [True: 0, False: 14]
  ------------------
  567|      0|	case VIPS_INTERPRETATION_LABS:
  ------------------
  |  Branch (567:2): [True: 0, False: 14]
  ------------------
  568|     12|	case VIPS_INTERPRETATION_sRGB:
  ------------------
  |  Branch (568:2): [True: 12, False: 2]
  ------------------
  569|     12|	case VIPS_INTERPRETATION_YXY:
  ------------------
  |  Branch (569:2): [True: 0, False: 14]
  ------------------
  570|     12|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (570:2): [True: 0, False: 14]
  ------------------
  571|     12|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (571:2): [True: 0, False: 14]
  ------------------
  572|     12|	case VIPS_INTERPRETATION_HSV:
  ------------------
  |  Branch (572:2): [True: 0, False: 14]
  ------------------
  573|       |		/* The band count in the ICC profile must correspond to that of
  574|       |		 * the image, with a maximum of 3 bands allowed.
  575|       |		 */
  576|     12|		return VIPS_MIN(3, image->Bands) == profile_bands;
  ------------------
  |  |   55|     12|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 12]
  |  |  ------------------
  ------------------
  577|       |
  578|      0|	case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (578:2): [True: 0, False: 14]
  ------------------
  579|       |		/* CMYK images can only be imported if the ICC-profile has at
  580|       |		 * least 4 bands thereby blocking the usage of RGB profiles.
  581|       |		 */
  582|      0|		return profile_bands >= 4;
  583|       |
  584|      0|	case VIPS_INTERPRETATION_MULTIBAND:
  ------------------
  |  Branch (584:2): [True: 0, False: 14]
  ------------------
  585|      0|	case VIPS_INTERPRETATION_HISTOGRAM:
  ------------------
  |  Branch (585:2): [True: 0, False: 14]
  ------------------
  586|      0|	case VIPS_INTERPRETATION_MATRIX:
  ------------------
  |  Branch (586:2): [True: 0, False: 14]
  ------------------
  587|      0|	case VIPS_INTERPRETATION_FOURIER:
  ------------------
  |  Branch (587:2): [True: 0, False: 14]
  ------------------
  588|      0|	default:
  ------------------
  |  Branch (588:2): [True: 0, False: 14]
  ------------------
  589|      0|		return image->Bands >= profile_bands;
  590|     14|	}
  591|     14|}

profile_load.c:vips_profile_load_class_init:
  139|      1|{
  140|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  142|       |
  143|      1|	gobject_class->set_property = vips_object_set_property;
  144|      1|	gobject_class->get_property = vips_object_get_property;
  145|       |
  146|      1|	object_class->nickname = "profile_load";
  147|      1|	object_class->description = _("load named ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  148|      1|	object_class->build = vips_profile_load_build;
  149|       |
  150|      1|	VIPS_ARG_STRING(class, "name", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  151|      1|		_("Name"),
  152|      1|		_("Profile name"),
  153|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  154|      1|		G_STRUCT_OFFSET(VipsProfileLoad, name),
  155|      1|		NULL);
  156|       |
  157|      1|	VIPS_ARG_BOXED(class, "profile", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  158|      1|		_("Profile"),
  159|      1|		_("Loaded profile"),
  160|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  161|      1|		G_STRUCT_OFFSET(VipsProfileLoad, profile),
  162|      1|		VIPS_TYPE_BLOB);
  163|      1|}

vips_rad2float:
  217|    248|{
  218|    248|	va_list ap;
  219|    248|	int result;
  220|       |
  221|    248|	va_start(ap, out);
  222|    248|	result = vips_call_split("rad2float", ap, in, out);
  223|    248|	va_end(ap);
  224|       |
  225|    248|	return result;
  226|    248|}
rad2float.c:vips_rad2float_class_init:
  178|      1|{
  179|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  180|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  181|       |
  182|      1|	object_class->nickname = "rad2float";
  183|      1|	object_class->description =
  184|      1|		_("unpack Radiance coding to float RGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  185|       |
  186|      1|	colour_class->process_line = vips_rad2float_line;
  187|      1|}
rad2float.c:vips_rad2float_line:
  166|    446|{
  167|    446|	COLR *inp = (COLR *) in[0];
  168|    446|	COLOR *outbuf = (COLOR *) out;
  169|       |
  170|    446|	int i;
  171|       |
  172|  18.5k|	for (i = 0; i < width; i++)
  ------------------
  |  Branch (172:14): [True: 18.0k, False: 446]
  ------------------
  173|  18.0k|		colr_color(outbuf[i], inp[i]);
  174|    446|}
rad2float.c:colr_color:
  144|  18.0k|{
  145|  18.0k|	if (clr[EXP] == 0)
  ------------------
  |  |  125|  18.0k|#define EXP 3	  /* exponent same for either format */
  ------------------
  |  Branch (145:6): [True: 3.35k, False: 14.7k]
  ------------------
  146|  3.35k|		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  119|  3.35k|#define RED 0
  ------------------
              		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  120|  3.35k|#define GRN 1
  ------------------
              		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  121|  3.35k|#define BLU 2
  ------------------
  147|  14.7k|	else {
  148|  14.7k|		double f = ldexp(1.0, (int) clr[EXP] - (COLXS + 8));
  ------------------
  |  |  125|  14.7k|#define EXP 3	  /* exponent same for either format */
  ------------------
              		double f = ldexp(1.0, (int) clr[EXP] - (COLXS + 8));
  ------------------
  |  |  126|  14.7k|#define COLXS 128 /* excess used for exponent */
  ------------------
  149|       |
  150|  14.7k|		col[RED] = (clr[RED] + 0.5) * f;
  ------------------
  |  |  119|  14.7k|#define RED 0
  ------------------
              		col[RED] = (clr[RED] + 0.5) * f;
  ------------------
  |  |  119|  14.7k|#define RED 0
  ------------------
  151|  14.7k|		col[GRN] = (clr[GRN] + 0.5) * f;
  ------------------
  |  |  120|  14.7k|#define GRN 1
  ------------------
              		col[GRN] = (clr[GRN] + 0.5) * f;
  ------------------
  |  |  120|  14.7k|#define GRN 1
  ------------------
  152|  14.7k|		col[BLU] = (clr[BLU] + 0.5) * f;
  ------------------
  |  |  121|  14.7k|#define BLU 2
  ------------------
              		col[BLU] = (clr[BLU] + 0.5) * f;
  ------------------
  |  |  121|  14.7k|#define BLU 2
  ------------------
  153|  14.7k|	}
  154|  18.0k|}
rad2float.c:vips_rad2float_init:
  191|    248|{
  192|    248|	VipsColour *colour = VIPS_COLOUR(rad2float);
  ------------------
  |  |   42|    248|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    248|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    248|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|    248|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  193|    248|	VipsColourCode *code = VIPS_COLOUR_CODE(rad2float);
  ------------------
  |  |  135|    248|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    248|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    248|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|    248|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  194|       |
  195|    248|	colour->coding = VIPS_CODING_NONE;
  196|    248|	colour->interpretation = VIPS_INTERPRETATION_scRGB;
  197|    248|	colour->format = VIPS_FORMAT_FLOAT;
  198|    248|	colour->bands = 3;
  199|       |
  200|    248|	code->input_coding = VIPS_CODING_RAD;
  201|    248|}

sRGB2HSV.c:vips_sRGB2HSV_class_init:
  128|      1|{
  129|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  130|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  131|       |
  132|      1|	object_class->nickname = "sRGB2HSV";
  133|      1|	object_class->description = _("transform sRGB to HSV");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  134|       |
  135|      1|	colour_class->process_line = vips_sRGB2HSV_line;
  136|      1|}

sRGB2scRGB.c:vips_sRGB2scRGB_class_init:
  273|      1|{
  274|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  276|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  277|       |
  278|      1|	gobject_class->set_property = vips_object_set_property;
  279|      1|	gobject_class->get_property = vips_object_get_property;
  280|       |
  281|      1|	object_class->nickname = "sRGB2scRGB";
  282|      1|	object_class->description = _("convert an sRGB image to scRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  283|      1|	object_class->build = vips_sRGB2scRGB_build;
  284|       |
  285|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  286|       |
  287|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  288|      1|		_("Input"),
  289|      1|		_("Input image"),
  290|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipssRGB2scRGB, in));
  292|       |
  293|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  294|      1|		_("Output"),
  295|      1|		_("Output image"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  297|      1|		G_STRUCT_OFFSET(VipssRGB2scRGB, out));
  298|      1|}

scRGB2BW.c:vips_scRGB2BW_class_init:
  222|      1|{
  223|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  225|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  226|       |
  227|      1|	gobject_class->set_property = vips_object_set_property;
  228|      1|	gobject_class->get_property = vips_object_get_property;
  229|       |
  230|      1|	object_class->nickname = "scRGB2BW";
  231|      1|	object_class->description = _("convert scRGB to BW");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  232|      1|	object_class->build = vips_scRGB2BW_build;
  233|       |
  234|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  235|       |
  236|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  237|      1|		_("Input"),
  238|      1|		_("Input image"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  240|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, in));
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("Output"),
  244|      1|		_("Output image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  246|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, out));
  247|       |
  248|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("Depth"),
  250|      1|		_("Output device space depth in bits"),
  251|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, depth),
  253|      1|		8, 16, 8);
  254|      1|}

scRGB2XYZ.c:vips_scRGB2XYZ_class_init:
  176|      1|{
  177|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  179|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  180|       |
  181|      1|	gobject_class->set_property = vips_object_set_property;
  182|      1|	gobject_class->get_property = vips_object_get_property;
  183|       |
  184|      1|	object_class->nickname = "scRGB2XYZ";
  185|      1|	object_class->description = _("transform scRGB to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  186|      1|	object_class->build = vips_scRGB2XYZ_build;
  187|       |
  188|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  189|       |
  190|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  191|      1|		_("Input"),
  192|      1|		_("Input image"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsscRGB2XYZ, in));
  195|       |
  196|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  197|      1|		_("Output"),
  198|      1|		_("Output image"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  200|      1|		G_STRUCT_OFFSET(VipsscRGB2XYZ, out));
  201|      1|}

scRGB2sRGB.c:vips_scRGB2sRGB_class_init:
  255|      1|{
  256|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  258|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  259|       |
  260|      1|	gobject_class->set_property = vips_object_set_property;
  261|      1|	gobject_class->get_property = vips_object_get_property;
  262|       |
  263|      1|	object_class->nickname = "scRGB2sRGB";
  264|      1|	object_class->description = _("convert an scRGB image to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  265|      1|	object_class->build = vips_scRGB2sRGB_build;
  266|       |
  267|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  268|       |
  269|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  270|      1|		_("Input"),
  271|      1|		_("Input image"),
  272|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, in));
  274|       |
  275|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  276|      1|		_("Output"),
  277|      1|		_("Output image"),
  278|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  279|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, out));
  280|       |
  281|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  282|      1|		_("Depth"),
  283|      1|		_("Output device space depth in bits"),
  284|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  285|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, depth),
  286|      1|		8, 16, 8);
  287|      1|}

addalpha.c:vips_addalpha_class_init:
   75|      1|{
   76|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
   79|       |
   80|      1|	gobject_class->set_property = vips_object_set_property;
   81|      1|	gobject_class->get_property = vips_object_get_property;
   82|       |
   83|      1|	vobject_class->nickname = "addalpha";
   84|      1|	vobject_class->description = _("append an alpha channel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   85|      1|	vobject_class->build = vips_addalpha_build;
   86|       |
   87|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
   88|       |
   89|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   90|      1|		_("Input"),
   91|      1|		_("Input image"),
   92|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   93|      1|		G_STRUCT_OFFSET(VipsAddAlpha, in));
   94|      1|}

arrayjoin.c:vips_arrayjoin_class_init:
  377|      1|{
  378|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  381|       |
  382|      1|	VIPS_DEBUG_MSG("vips_arrayjoin_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|       |
  384|      1|	gobject_class->set_property = vips_object_set_property;
  385|      1|	gobject_class->get_property = vips_object_get_property;
  386|       |
  387|      1|	vobject_class->nickname = "arrayjoin";
  388|      1|	vobject_class->description = _("join an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  389|      1|	vobject_class->build = vips_arrayjoin_build;
  390|       |
  391|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  392|       |
  393|      1|	VIPS_ARG_BOXED(class, "in", -1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  394|      1|		_("Input"),
  395|      1|		_("Array of input images"),
  396|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  397|      1|		G_STRUCT_OFFSET(VipsArrayjoin, in),
  398|      1|		VIPS_TYPE_ARRAY_IMAGE);
  399|       |
  400|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  401|      1|		_("Across"),
  402|      1|		_("Number of images across grid"),
  403|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  404|      1|		G_STRUCT_OFFSET(VipsArrayjoin, across),
  405|      1|		1, 1000000, 1);
  406|       |
  407|      1|	VIPS_ARG_INT(class, "shim", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  408|      1|		_("Shim"),
  409|      1|		_("Pixels between images"),
  410|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  411|      1|		G_STRUCT_OFFSET(VipsArrayjoin, shim),
  412|      1|		0, 1000000, 0);
  413|       |
  414|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  415|      1|		_("Background"),
  416|      1|		_("Colour for new pixels"),
  417|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  418|      1|		G_STRUCT_OFFSET(VipsArrayjoin, background),
  419|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  420|       |
  421|      1|	VIPS_ARG_ENUM(class, "halign", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  422|      1|		_("Horizontal align"),
  423|      1|		_("Align on the left, centre or right"),
  424|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  425|      1|		G_STRUCT_OFFSET(VipsArrayjoin, halign),
  426|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  427|       |
  428|      1|	VIPS_ARG_ENUM(class, "valign", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  429|      1|		_("Vertical align"),
  430|      1|		_("Align on the top, centre or bottom"),
  431|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  432|      1|		G_STRUCT_OFFSET(VipsArrayjoin, valign),
  433|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  434|       |
  435|      1|	VIPS_ARG_INT(class, "hspacing", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  436|      1|		_("Horizontal spacing"),
  437|      1|		_("Horizontal spacing between images"),
  438|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  439|      1|		G_STRUCT_OFFSET(VipsArrayjoin, hspacing),
  440|      1|		1, 1000000, 1);
  441|       |
  442|      1|	VIPS_ARG_INT(class, "vspacing", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  443|      1|		_("Vertical spacing"),
  444|      1|		_("Vertical spacing between images"),
  445|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  446|      1|		G_STRUCT_OFFSET(VipsArrayjoin, vspacing),
  447|      1|		1, 1000000, 1);
  448|      1|}

vips_autorot_remove_angle:
   98|  4.78k|{
   99|  4.78k|	(void) vips_image_remove(image, VIPS_META_ORIENTATION);
  ------------------
  |  |  149|  4.78k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  100|  4.78k|	(void) vips_image_map(image, vips_autorot_remove_angle_sub, NULL);
  101|  4.78k|}
autorot.c:vips_autorot_class_init:
  195|      1|{
  196|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|       |
  199|      1|	gobject_class->set_property = vips_object_set_property;
  200|      1|	gobject_class->get_property = vips_object_get_property;
  201|       |
  202|      1|	vobject_class->nickname = "autorot";
  203|      1|	vobject_class->description = _("autorotate image by exif tag");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      1|	vobject_class->build = vips_autorot_build;
  205|       |
  206|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  207|      1|		_("Input"),
  208|      1|		_("Input image"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsAutorot, in));
  211|       |
  212|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  213|      1|		_("Angle"),
  214|      1|		_("Angle image was rotated by"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  216|      1|		G_STRUCT_OFFSET(VipsAutorot, angle),
  217|      1|		VIPS_TYPE_ANGLE, VIPS_ANGLE_D0);
  218|       |
  219|      1|	VIPS_ARG_BOOL(class, "flip", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  220|      1|		_("Flip"),
  221|      1|		_("Whether the image was flipped or not"),
  222|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  223|      1|		G_STRUCT_OFFSET(VipsAutorot, flip),
  224|      1|		FALSE);
  225|      1|}
autorot.c:vips_autorot_remove_angle_sub:
   76|  55.0k|{
   77|  55.0k|	if (strcmp(field, "exif-ifd0-Orientation") == 0) {
  ------------------
  |  Branch (77:6): [True: 0, False: 55.0k]
  ------------------
   78|       |#ifdef DEBUG
   79|       |		printf("vips_autorot_remove_angle: %s\n", field);
   80|       |#endif /*DEBUG*/
   81|       |
   82|      0|		(void) vips_image_remove(image, field);
   83|      0|	}
   84|       |
   85|  55.0k|	return NULL;
   86|  55.0k|}

bandary.c:vips_bandary_class_init:
  246|      1|{
  247|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  250|       |
  251|      1|	VIPS_DEBUG_MSG("vips_bandary_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|       |
  253|      1|	gobject_class->set_property = vips_object_set_property;
  254|      1|	gobject_class->get_property = vips_object_get_property;
  255|       |
  256|      1|	vobject_class->nickname = "bandary";
  257|      1|	vobject_class->description = _("operations on image bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  258|      1|	vobject_class->build = vips_bandary_build;
  259|       |
  260|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  261|      1|}
bandary.c:vips_bandary_build:
  195|  10.5k|{
  196|  10.5k|	VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  10.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  10.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  10.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  10.5k|	VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(object);
  ------------------
  |  |   52|  10.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  10.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  10.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  10.5k|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  198|  10.5k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  10.5k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  199|  10.5k|	VipsBandary *bandary = VIPS_BANDARY(object);
  ------------------
  |  |   42|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  10.5k|		VIPS_TYPE_BANDARY, VipsBandary))
  ------------------
  200|       |
  201|  10.5k|	int i;
  202|  10.5k|	VipsImage **decode;
  203|  10.5k|	VipsImage **format;
  204|  10.5k|	VipsImage **size;
  205|       |
  206|  10.5k|	if (VIPS_OBJECT_CLASS(vips_bandary_parent_class)->build(object))
  ------------------
  |  |  435|  10.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  10.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  10.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (206:6): [True: 0, False: 10.5k]
  ------------------
  207|      0|		return -1;
  208|       |
  209|  10.5k|	if (bandary->n <= 0) {
  ------------------
  |  Branch (209:6): [True: 0, False: 10.5k]
  ------------------
  210|      0|		vips_error(object_class->nickname,
  211|      0|			"%s", _("no input images"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  212|      0|		return -1;
  213|      0|	}
  214|       |
  215|  10.5k|	decode = (VipsImage **) vips_object_local_array(object, bandary->n);
  216|  10.5k|	format = (VipsImage **) vips_object_local_array(object, bandary->n);
  217|  10.5k|	size = (VipsImage **) vips_object_local_array(object, bandary->n);
  218|       |
  219|  21.0k|	for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (219:14): [True: 10.5k, False: 10.5k]
  ------------------
  220|  10.5k|		if (vips_image_decode(bandary->in[i], &decode[i]))
  ------------------
  |  Branch (220:7): [True: 0, False: 10.5k]
  ------------------
  221|      0|			return -1;
  222|  10.5k|	if (vips__formatalike_vec(decode, format, bandary->n) ||
  ------------------
  |  Branch (222:6): [True: 0, False: 10.5k]
  ------------------
  223|  10.5k|		vips__sizealike_vec(format, size, bandary->n))
  ------------------
  |  Branch (223:3): [True: 0, False: 10.5k]
  ------------------
  224|      0|		return -1;
  225|  10.5k|	bandary->ready = size;
  226|       |
  227|  10.5k|	if (vips_image_pipeline_array(conversion->out,
  ------------------
  |  Branch (227:6): [True: 0, False: 10.5k]
  ------------------
  228|  10.5k|			VIPS_DEMAND_STYLE_THINSTRIP, bandary->ready))
  229|      0|		return -1;
  230|       |
  231|  10.5k|	conversion->out->Bands = bandary->out_bands;
  232|  10.5k|	if (class->format_table)
  ------------------
  |  Branch (232:6): [True: 0, False: 10.5k]
  ------------------
  233|      0|		conversion->out->BandFmt =
  234|      0|			class->format_table[bandary->ready[0]->BandFmt];
  235|       |
  236|  10.5k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (236:6): [True: 0, False: 10.5k]
  ------------------
  237|  10.5k|			vips_bandary_start, vips_bandary_gen, vips_bandary_stop,
  238|  10.5k|			bandary->ready, bandary))
  239|      0|		return -1;
  240|       |
  241|  10.5k|	return 0;
  242|  10.5k|}
bandary.c:vips_bandary_start:
  105|  10.5k|{
  106|  10.5k|	VipsImage **in = (VipsImage **) a;
  107|  10.5k|	VipsBandary *bandary = (VipsBandary *) b;
  108|       |
  109|  10.5k|	VipsBandarySequence *seq;
  110|  10.5k|	int i, n;
  111|       |
  112|  10.5k|	if (!(seq = VIPS_NEW(NULL, VipsBandarySequence)))
  ------------------
  |  |   70|  10.5k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  10.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (112:6): [True: 0, False: 10.5k]
  ------------------
  113|      0|		return NULL;
  114|       |
  115|  10.5k|	seq->bandary = bandary;
  116|  10.5k|	seq->ir = NULL;
  117|  10.5k|	seq->p = NULL;
  118|  10.5k|	seq->pixels = NULL;
  119|       |
  120|       |	/* How many images?
  121|       |	 */
  122|  21.0k|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (122:14): [True: 10.5k, False: 10.5k]
  ------------------
  123|  10.5k|		;
  124|       |
  125|       |	/* Allocate space for region array.
  126|       |	 */
  127|  10.5k|	if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) {
  ------------------
  |  |   72|  10.5k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  10.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (127:6): [True: 0, False: 10.5k]
  ------------------
  128|      0|		vips_bandary_stop(seq, NULL, NULL);
  129|      0|		return NULL;
  130|      0|	}
  131|       |
  132|       |	/* Create a set of regions.
  133|       |	 */
  134|  21.0k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (134:14): [True: 10.5k, False: 10.5k]
  ------------------
  135|  10.5k|		if (!(seq->ir[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (135:7): [True: 0, False: 10.5k]
  ------------------
  136|      0|			vips_bandary_stop(seq, NULL, NULL);
  137|      0|			return NULL;
  138|      0|		}
  139|  10.5k|	seq->ir[n] = NULL;
  140|       |
  141|       |	/* Input pointers.
  142|       |	 */
  143|  10.5k|	if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) {
  ------------------
  |  |   72|  10.5k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  10.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (143:6): [True: 0, False: 10.5k]
  ------------------
  144|      0|		vips_bandary_stop(seq, NULL, NULL);
  145|      0|		return NULL;
  146|      0|	}
  147|       |
  148|       |	/* Pixel buffer. This is used as working space by some subclasses.
  149|       |	 */
  150|  10.5k|	if (!(seq->pixels = VIPS_ARRAY(NULL,
  ------------------
  |  |   72|  10.5k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  10.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  10.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  10.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  10.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (150:6): [True: 0, False: 10.5k]
  ------------------
  151|  10.5k|			  n * VIPS_IMAGE_SIZEOF_PEL(bandary->ready[0]), VipsPel))) {
  152|      0|		vips_bandary_stop(seq, NULL, NULL);
  153|      0|		return NULL;
  154|      0|	}
  155|       |
  156|  10.5k|	return seq;
  157|  10.5k|}
bandary.c:vips_bandary_gen:
  162|  16.2k|{
  163|  16.2k|	VipsBandarySequence *seq = (VipsBandarySequence *) vseq;
  164|  16.2k|	VipsBandary *bandary = (VipsBandary *) b;
  165|  16.2k|	VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(bandary);
  ------------------
  |  |   52|  16.2k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  16.2k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  16.2k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  16.2k|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  166|  16.2k|	VipsRect *r = &out_region->valid;
  167|       |
  168|  16.2k|	VipsPel *q;
  169|  16.2k|	int y, i;
  170|       |
  171|  16.2k|	if (vips_reorder_prepare_many(out_region->im, seq->ir, r))
  ------------------
  |  Branch (171:6): [True: 7.19k, False: 9.09k]
  ------------------
  172|  7.19k|		return -1;
  173|  18.1k|	for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (173:14): [True: 9.09k, False: 9.09k]
  ------------------
  174|  9.09k|		seq->p[i] = VIPS_REGION_ADDR(seq->ir[i], r->left, r->top);
  ------------------
  |  |  227|  18.1k|	((R)->data + \
  |  |  228|  18.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  9.09k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  18.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  9.09k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  9.09k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  9.09k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  9.09k|	seq->p[i] = NULL;
  176|  9.09k|	q = VIPS_REGION_ADDR(out_region, r->left, r->top);
  ------------------
  |  |  227|  9.09k|	((R)->data + \
  |  |  228|  9.09k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  9.09k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  9.09k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  9.09k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  9.09k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  9.09k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|       |
  178|  9.09k|	VIPS_GATE_START("vips_bandary_gen: work");
  ------------------
  |  |   41|  9.09k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  9.09k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  9.09k|	{ \
  |  |   43|  9.09k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 9.09k]
  |  |  ------------------
  |  |   44|  9.09k|			vips__thread_gate_start(NAME); \
  |  |   45|  9.09k|	} \
  |  |   46|  9.09k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  9.09k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|       |
  180|   134k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (180:14): [True: 124k, False: 9.09k]
  ------------------
  181|   124k|		class->process_line(seq, q, seq->p, r->width);
  182|       |
  183|   249k|		for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (183:15): [True: 124k, False: 124k]
  ------------------
  184|   124k|			seq->p[i] += VIPS_REGION_LSKIP(seq->ir[i]);
  ------------------
  |  |  195|   124k|	((size_t) ((R)->bpl))
  ------------------
  185|   124k|		q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|   124k|	((size_t) ((R)->bpl))
  ------------------
  186|   124k|	}
  187|       |
  188|  9.09k|	VIPS_GATE_STOP("vips_bandary_gen: work");
  ------------------
  |  |   49|  9.09k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  9.09k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  9.09k|	{ \
  |  |   51|  9.09k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 9.09k]
  |  |  ------------------
  |  |   52|  9.09k|			vips__thread_gate_stop(NAME); \
  |  |   53|  9.09k|	} \
  |  |   54|  9.09k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  9.09k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|  9.09k|	return 0;
  191|  16.2k|}
bandary.c:vips_bandary_stop:
   84|  10.5k|{
   85|  10.5k|	VipsBandarySequence *seq = (VipsBandarySequence *) vseq;
   86|       |
   87|  10.5k|	if (seq->ir) {
  ------------------
  |  Branch (87:6): [True: 10.5k, False: 0]
  ------------------
   88|  10.5k|		int i;
   89|       |
   90|  21.0k|		for (i = 0; seq->ir[i]; i++)
  ------------------
  |  Branch (90:15): [True: 10.5k, False: 10.5k]
  ------------------
   91|  10.5k|			VIPS_UNREF(seq->ir[i]);
  ------------------
  |  |   57|  10.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |   46|  10.5k|		} \
  |  |  |  |   47|  10.5k|	} \
  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|  10.5k|		VIPS_FREE(seq->ir);
  ------------------
  |  |   50|  10.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |   46|  10.5k|		} \
  |  |  |  |   47|  10.5k|	} \
  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|  10.5k|	}
   94|       |
   95|  10.5k|	VIPS_FREE(seq->p);
  ------------------
  |  |   50|  10.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |   46|  10.5k|		} \
  |  |  |  |   47|  10.5k|	} \
  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|  10.5k|	VIPS_FREE(seq->pixels);
  ------------------
  |  |   50|  10.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |   46|  10.5k|		} \
  |  |  |  |   47|  10.5k|	} \
  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|       |
   98|  10.5k|	VIPS_FREE(seq);
  ------------------
  |  |   50|  10.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |   46|  10.5k|		} \
  |  |  |  |   47|  10.5k|	} \
  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|       |
  100|  10.5k|	return 0;
  101|  10.5k|}
bandary.c:vips_bandary_init:
  265|  10.5k|{
  266|  10.5k|	bandary->out_bands = -1;
  267|  10.5k|}

bandbool.c:vips_bandbool_class_init:
  216|      1|{
  217|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  219|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  220|       |
  221|      1|	gobject_class->set_property = vips_object_set_property;
  222|      1|	gobject_class->get_property = vips_object_get_property;
  223|       |
  224|      1|	object_class->nickname = "bandbool";
  225|      1|	object_class->description = _("boolean operation across image bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  226|      1|	object_class->build = vips_bandbool_build;
  227|       |
  228|      1|	bandary_class->process_line = vips_bandbool_buffer;
  229|      1|	bandary_class->format_table = vips_bandbool_format_table;
  230|       |
  231|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  232|      1|		_("Input"),
  233|      1|		_("Input image argument"),
  234|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsBandbool, in));
  236|       |
  237|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  238|      1|		_("Operation"),
  239|      1|		_("Boolean to perform"),
  240|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  241|      1|		G_STRUCT_OFFSET(VipsBandbool, operation),
  242|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  243|      1|		VIPS_OPERATION_BOOLEAN_AND);
  244|      1|}

bandfold.c:vips_bandfold_class_init:
  144|      1|{
  145|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  148|       |
  149|      1|	VIPS_DEBUG_MSG("vips_bandfold_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|       |
  151|      1|	gobject_class->set_property = vips_object_set_property;
  152|      1|	gobject_class->get_property = vips_object_get_property;
  153|       |
  154|      1|	vobject_class->nickname = "bandfold";
  155|      1|	vobject_class->description = _("fold up x axis into bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  156|      1|	vobject_class->build = vips_bandfold_build;
  157|       |
  158|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  159|       |
  160|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  161|      1|		_("Input"),
  162|      1|		_("Input image"),
  163|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsBandfold, in));
  165|       |
  166|      1|	VIPS_ARG_INT(class, "factor", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  167|      1|		_("Factor"),
  168|      1|		_("Fold by this factor"),
  169|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsBandfold, factor),
  171|      1|		0, 10000000, 0);
  172|      1|}

bandjoin.c:vips_bandjoin_class_init:
  184|      1|{
  185|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  188|       |
  189|      1|	VIPS_DEBUG_MSG("vips_bandjoin_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|      1|	gobject_class->set_property = vips_object_set_property;
  192|      1|	gobject_class->get_property = vips_object_get_property;
  193|       |
  194|      1|	vobject_class->nickname = "bandjoin";
  195|      1|	vobject_class->description = _("bandwise join a set of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|      1|	vobject_class->build = vips_bandjoin_build;
  197|       |
  198|      1|	bandary_class->process_line = vips_bandjoin_buffer;
  199|       |
  200|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  201|      1|		_("Input"),
  202|      1|		_("Array of input images"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsBandjoin, in),
  205|      1|		VIPS_TYPE_ARRAY_IMAGE);
  206|      1|}
bandjoin.c:vips_bandjoin_const_class_init:
  418|      1|{
  419|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  422|       |
  423|      1|	VIPS_DEBUG_MSG("vips_bandjoin_const_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|      1|	gobject_class->finalize = vips_bandjoin_const_finalize;
  426|      1|	gobject_class->set_property = vips_object_set_property;
  427|      1|	gobject_class->get_property = vips_object_get_property;
  428|       |
  429|      1|	vobject_class->nickname = "bandjoin_const";
  430|      1|	vobject_class->description = _("append a constant band to an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  431|      1|	vobject_class->build = vips_bandjoin_const_build;
  432|       |
  433|      1|	bandary_class->process_line = vips_bandjoin_const_buffer;
  434|       |
  435|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  436|      1|		_("Input"),
  437|      1|		_("Input image"),
  438|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  439|      1|		G_STRUCT_OFFSET(VipsBandjoinConst, in));
  440|       |
  441|      1|	VIPS_ARG_BOXED(class, "c", 12,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  442|      1|		_("Constants"),
  443|      1|		_("Array of constants to add"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  445|      1|		G_STRUCT_OFFSET(VipsBandjoinConst, c),
  446|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  447|      1|}

bandmean.c:vips_bandmean_class_init:
  197|      1|{
  198|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  200|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  201|       |
  202|      1|	gobject_class->set_property = vips_object_set_property;
  203|      1|	gobject_class->get_property = vips_object_get_property;
  204|       |
  205|      1|	object_class->nickname = "bandmean";
  206|      1|	object_class->description = _("band-wise average");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|      1|	object_class->build = vips_bandmean_build;
  208|       |
  209|      1|	bandary_class->process_line = vips_bandmean_buffer;
  210|       |
  211|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  212|      1|		_("Input"),
  213|      1|		_("Input image argument"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsBandmean, in));
  216|      1|}

bandrank.c:vips_bandrank_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  241|       |
  242|      1|	VIPS_DEBUG_MSG("vips_bandrank_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|       |
  244|      1|	gobject_class->set_property = vips_object_set_property;
  245|      1|	gobject_class->get_property = vips_object_get_property;
  246|       |
  247|      1|	vobject_class->nickname = "bandrank";
  248|      1|	vobject_class->description = _("band-wise rank of a set of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  249|      1|	vobject_class->build = vips_bandrank_build;
  250|       |
  251|      1|	bandary_class->process_line = vips_bandrank_buffer;
  252|       |
  253|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  254|      1|		_("Input"),
  255|      1|		_("Array of input images"),
  256|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  257|      1|		G_STRUCT_OFFSET(VipsBandrank, in),
  258|      1|		VIPS_TYPE_ARRAY_IMAGE);
  259|       |
  260|      1|	VIPS_ARG_INT(class, "index", 0,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  261|      1|		_("Index"),
  262|      1|		_("Select this band element from sorted list"),
  263|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsBandrank, index),
  265|      1|		-1, 1000000, -1);
  266|      1|}

bandunfold.c:vips_bandunfold_class_init:
  147|      1|{
  148|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  151|       |
  152|      1|	VIPS_DEBUG_MSG("vips_bandunfold_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|       |
  154|      1|	gobject_class->set_property = vips_object_set_property;
  155|      1|	gobject_class->get_property = vips_object_get_property;
  156|       |
  157|      1|	vobject_class->nickname = "bandunfold";
  158|      1|	vobject_class->description = _("unfold image bands into x axis");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  159|      1|	vobject_class->build = vips_bandunfold_build;
  160|       |
  161|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  162|       |
  163|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  164|      1|		_("Input"),
  165|      1|		_("Input image"),
  166|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  167|      1|		G_STRUCT_OFFSET(VipsBandunfold, in));
  168|       |
  169|      1|	VIPS_ARG_INT(class, "factor", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  170|      1|		_("Factor"),
  171|      1|		_("Unfold by this factor"),
  172|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  173|      1|		G_STRUCT_OFFSET(VipsBandunfold, factor),
  174|      1|		0, 10000000, 0);
  175|      1|}

byteswap.c:vips_byteswap_class_init:
  221|      1|{
  222|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  225|       |
  226|      1|	VIPS_DEBUG_MSG("vips_byteswap_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|       |
  228|      1|	gobject_class->set_property = vips_object_set_property;
  229|      1|	gobject_class->get_property = vips_object_get_property;
  230|       |
  231|      1|	vobject_class->nickname = "byteswap";
  232|      1|	vobject_class->description = _("byteswap an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  233|      1|	vobject_class->build = vips_byteswap_build;
  234|       |
  235|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  236|       |
  237|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  238|      1|		_("Input"),
  239|      1|		_("Input image"),
  240|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  241|      1|		G_STRUCT_OFFSET(VipsByteswap, in));
  242|      1|}

cache.c:vips_cache_class_init:
   87|      1|{
   88|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
   91|       |
   92|      1|	VIPS_DEBUG_MSG("vips_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|       |
   94|      1|	gobject_class->set_property = vips_object_set_property;
   95|      1|	gobject_class->get_property = vips_object_get_property;
   96|       |
   97|      1|	vobject_class->nickname = "cache";
   98|      1|	vobject_class->description = _("cache an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   99|      1|	vobject_class->build = vips_cache_build;
  100|       |
  101|       |	/* sinkscreen swallows errors (you don't want to see them when you display
  102|       |	 * images), making this operation worse than useless for batch processing.
  103|       |	 * Just use tilecache() instead.
  104|       |	 */
  105|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  106|       |
  107|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  108|      1|		_("Input"),
  109|      1|		_("Input image"),
  110|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  111|      1|		G_STRUCT_OFFSET(VipsCache, in));
  112|       |
  113|      1|	VIPS_ARG_INT(class, "tile_width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  114|      1|		_("Tile width"),
  115|      1|		_("Tile width in pixels"),
  116|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsCache, tile_width),
  118|      1|		1, 1000000, 128);
  119|       |
  120|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  121|      1|		_("Tile height"),
  122|      1|		_("Tile height in pixels"),
  123|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsCache, tile_height),
  125|      1|		1, 1000000, 128);
  126|       |
  127|      1|	VIPS_ARG_INT(class, "max_tiles", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  128|      1|		_("Max tiles"),
  129|      1|		_("Maximum number of tiles to cache"),
  130|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsCache, max_tiles),
  132|      1|		-1, 1000000, 250);
  133|      1|}

vips_cast:
  589|  20.1k|{
  590|  20.1k|	va_list ap;
  591|  20.1k|	int result;
  592|       |
  593|  20.1k|	va_start(ap, format);
  594|  20.1k|	result = vips_castv(in, out, format, ap);
  595|  20.1k|	va_end(ap);
  596|       |
  597|  20.1k|	return result;
  598|  20.1k|}
cast.c:vips_cast_class_init:
  513|      1|{
  514|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  517|       |
  518|      1|	VIPS_DEBUG_MSG("vips_cast_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|       |
  520|      1|	gobject_class->set_property = vips_object_set_property;
  521|      1|	gobject_class->get_property = vips_object_get_property;
  522|       |
  523|      1|	vobject_class->nickname = "cast";
  524|      1|	vobject_class->description = _("cast an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  525|      1|	vobject_class->build = vips_cast_build;
  526|       |
  527|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  528|       |
  529|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  530|      1|		_("Input"),
  531|      1|		_("Input image"),
  532|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  533|      1|		G_STRUCT_OFFSET(VipsCast, in));
  534|       |
  535|      1|	VIPS_ARG_ENUM(class, "format", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  536|      1|		_("Format"),
  537|      1|		_("Format to cast to"),
  538|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  539|      1|		G_STRUCT_OFFSET(VipsCast, format),
  540|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  541|       |
  542|      1|	VIPS_ARG_BOOL(class, "shift", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  543|      1|		_("Shift"),
  544|      1|		_("Shift integer values up and down"),
  545|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  546|      1|		G_STRUCT_OFFSET(VipsCast, shift),
  547|      1|		FALSE);
  548|      1|}
cast.c:vips_cast_build:
  461|  20.1k|{
  462|  20.1k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  20.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  20.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  20.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  20.1k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  463|  20.1k|	VipsCast *cast = (VipsCast *) object;
  464|  20.1k|	VipsImage **t = (VipsImage **)
  465|  20.1k|		vips_object_local_array(object, 2);
  466|       |
  467|  20.1k|	VipsImage *in;
  468|       |
  469|  20.1k|	if (VIPS_OBJECT_CLASS(vips_cast_parent_class)->build(object))
  ------------------
  |  |  435|  20.1k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  20.1k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  20.1k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (469:6): [True: 0, False: 20.1k]
  ------------------
  470|      0|		return -1;
  471|       |
  472|  20.1k|	in = cast->in;
  473|       |
  474|       |	/* Trivial case: fall back to copy().
  475|       |	 */
  476|  20.1k|	if (in->BandFmt == cast->format)
  ------------------
  |  Branch (476:6): [True: 222, False: 19.9k]
  ------------------
  477|    222|		return vips_image_write(in, conversion->out);
  478|       |
  479|  19.9k|	if (vips_image_decode(in, &t[0]))
  ------------------
  |  Branch (479:6): [True: 0, False: 19.9k]
  ------------------
  480|      0|		return -1;
  481|  19.9k|	in = t[0];
  482|       |
  483|       |	/* If @shift is on but we're not in an int format and we're going to
  484|       |	 * an int format, we need to cast to int first. For example, what
  485|       |	 * about a float image tagged as rgb16 being cast to uint8? We need
  486|       |	 * to cast to ushort before we do the final cast to uint8.
  487|       |	 */
  488|  19.9k|	if (cast->shift &&
  ------------------
  |  Branch (488:6): [True: 0, False: 19.9k]
  ------------------
  489|  19.9k|		!vips_band_format_isint(in->BandFmt) &&
  ------------------
  |  Branch (489:3): [True: 0, False: 0]
  ------------------
  490|  19.9k|		vips_band_format_isint(cast->format)) {
  ------------------
  |  Branch (490:3): [True: 0, False: 0]
  ------------------
  491|      0|		if (vips_cast(in, &t[1],
  ------------------
  |  Branch (491:7): [True: 0, False: 0]
  ------------------
  492|      0|				vips_image_guess_format(in), NULL))
  493|      0|			return -1;
  494|      0|		in = t[1];
  495|      0|	}
  496|       |
  497|  19.9k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (497:6): [True: 0, False: 19.9k]
  ------------------
  498|  19.9k|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL))
  499|      0|		return -1;
  500|       |
  501|  19.9k|	conversion->out->BandFmt = cast->format;
  502|       |
  503|  19.9k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (503:6): [True: 0, False: 19.9k]
  ------------------
  504|  19.9k|			vips_start_one, vips_cast_gen, vips_stop_one,
  505|  19.9k|			in, cast))
  506|      0|		return -1;
  507|       |
  508|  19.9k|	return 0;
  509|  19.9k|}
cast.c:vips_cast_gen:
  360|  33.2k|{
  361|  33.2k|	VipsRegion *ir = (VipsRegion *) vseq;
  362|  33.2k|	VipsCast *cast = (VipsCast *) b;
  363|  33.2k|	VipsConversion *conversion = (VipsConversion *) b;
  364|  33.2k|	VipsRect *r = &out_region->valid;
  365|  33.2k|	int sz = VIPS_REGION_N_ELEMENTS(out_region);
  ------------------
  |  |  197|  33.2k|	((size_t) ((R)->valid.width * (R)->im->Bands))
  ------------------
  366|       |
  367|  33.2k|	int x, y;
  368|       |
  369|  33.2k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (369:6): [True: 10.0k, False: 23.2k]
  ------------------
  370|  10.0k|		return -1;
  371|       |
  372|  33.2k|	VIPS_GATE_START("vips_cast_gen: work");
  ------------------
  |  |   41|  23.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  23.2k|	{ \
  |  |   43|  23.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 23.2k]
  |  |  ------------------
  |  |   44|  23.2k|			vips__thread_gate_start(NAME); \
  |  |   45|  23.2k|	} \
  |  |   46|  33.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  33.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|       |
  374|   331k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (374:14): [True: 308k, False: 23.2k]
  ------------------
  375|   308k|		VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|   308k|	((R)->data + \
  |  |  228|   308k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   308k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   308k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   308k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   308k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   308k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|   308k|		VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|   308k|	((R)->data + \
  |  |  228|   308k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   308k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   308k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   308k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   308k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   308k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|       |
  378|   308k|		switch (ir->im->BandFmt) {
  379|   237k|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (379:3): [True: 237k, False: 70.7k]
  ------------------
  380|   237k|			BAND_SWITCH_INNER(unsigned char,
  ------------------
  |  |  310|   237k|	{ \
  |  |  311|   237k|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  382|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|   237k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 237k, False: 0]
  |  |  ------------------
  |  |  341|   237k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  382|   237k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|   237k|	{ \
  |  |  |  |  |  |  260|   237k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|   237k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|   237k|\
  |  |  |  |  |  |  263|  14.0M|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 13.8M, False: 237k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  13.8M|			q[x] = p[x]; \
  |  |  |  |  |  |  265|   237k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|   237k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  383|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  383|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 237k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|   237k|		} \
  |  |  355|   237k|	}
  ------------------
  381|   237k|				INT_INT,
  382|   237k|				CAST_REAL_FLOAT,
  383|   237k|				CAST_REAL_COMPLEX);
  384|   237k|			break;
  385|       |
  386|  1.34k|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (386:3): [True: 1.34k, False: 307k]
  ------------------
  387|  1.34k|			BAND_SWITCH_INNER(signed char,
  ------------------
  |  |  310|  1.34k|	{ \
  |  |  311|  1.34k|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  389|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  1.34k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 1.34k, False: 0]
  |  |  ------------------
  |  |  341|  1.34k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  389|  1.34k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  1.34k|	{ \
  |  |  |  |  |  |  260|  1.34k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  1.34k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  1.34k|\
  |  |  |  |  |  |  263|  25.3k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 23.9k, False: 1.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  23.9k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  1.34k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  1.34k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  390|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  390|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 1.34k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  1.34k|		} \
  |  |  355|  1.34k|	}
  ------------------
  388|  1.34k|				INT_INT_SIGNED,
  389|  1.34k|				CAST_REAL_FLOAT,
  390|  1.34k|				CAST_REAL_COMPLEX);
  391|  1.34k|			break;
  392|       |
  393|  19.3k|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (393:3): [True: 19.3k, False: 289k]
  ------------------
  394|  19.3k|			BAND_SWITCH_INNER(unsigned short,
  ------------------
  |  |  310|  19.3k|	{ \
  |  |  311|  19.3k|		switch (conversion->out->BandFmt) { \
  |  |  312|  16.6k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 16.6k, False: 2.73k]
  |  |  ------------------
  |  |  313|  16.6k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  395|  16.6k|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|  16.6k|	{ \
  |  |  |  |  |  |  198|  16.6k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 16.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|  16.6k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|  16.6k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 16.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|  16.6k|		else { \
  |  |  |  |  |  |  206|  16.6k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  16.6k|	{ \
  |  |  |  |  |  |  |  |  184|  16.6k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  16.6k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  16.6k|\
  |  |  |  |  |  |  |  |  187|   486k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 469k, False: 16.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|   469k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|   469k|\
  |  |  |  |  |  |  |  |  190|   469k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|   469k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|   469k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|   469k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   939k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 469k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 469k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 469k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|   469k|		} \
  |  |  |  |  |  |  |  |  192|  16.6k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  16.6k|		} \
  |  |  |  |  |  |  208|  16.6k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  16.6k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  396|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  2.73k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 2.73k, False: 16.6k]
  |  |  ------------------
  |  |  341|  2.73k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  396|  2.73k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  2.73k|	{ \
  |  |  |  |  |  |  260|  2.73k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  2.73k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  2.73k|\
  |  |  |  |  |  |  263|  45.7k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 42.9k, False: 2.73k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  42.9k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  2.73k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  2.73k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  397|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  397|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  19.3k|		} \
  |  |  355|  19.3k|	}
  ------------------
  395|  19.3k|				INT_INT,
  396|  19.3k|				CAST_REAL_FLOAT,
  397|  19.3k|				CAST_REAL_COMPLEX);
  398|  19.3k|			break;
  399|       |
  400|  6.33k|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (400:3): [True: 6.33k, False: 302k]
  ------------------
  401|  6.33k|			BAND_SWITCH_INNER(signed short,
  ------------------
  |  |  310|  6.33k|	{ \
  |  |  311|  6.33k|		switch (conversion->out->BandFmt) { \
  |  |  312|  1.46k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 1.46k, False: 4.87k]
  |  |  ------------------
  |  |  313|  1.46k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  402|  1.46k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  1.46k|	{ \
  |  |  |  |  |  |  214|  1.46k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 1.46k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.46k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  1.46k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 1.46k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|  1.46k|		else { \
  |  |  |  |  |  |  222|  1.46k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  1.46k|	{ \
  |  |  |  |  |  |  |  |  184|  1.46k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  1.46k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  1.46k|\
  |  |  |  |  |  |  |  |  187|  23.1k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 21.7k, False: 1.46k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  21.7k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  21.7k|\
  |  |  |  |  |  |  |  |  190|  21.7k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|  21.7k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|  21.7k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  21.7k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  43.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 3.07k, False: 18.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 21.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 18.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  21.7k|		} \
  |  |  |  |  |  |  |  |  192|  1.46k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  1.46k|		} \
  |  |  |  |  |  |  224|  1.46k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  1.46k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  403|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  4.87k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 4.87k, False: 1.46k]
  |  |  ------------------
  |  |  341|  4.87k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  403|  4.87k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  4.87k|	{ \
  |  |  |  |  |  |  260|  4.87k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  4.87k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  4.87k|\
  |  |  |  |  |  |  263|   150k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 145k, False: 4.87k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|   145k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  4.87k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  4.87k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  404|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  404|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 6.33k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  6.33k|		} \
  |  |  355|  6.33k|	}
  ------------------
  402|  6.33k|				INT_INT_SIGNED,
  403|  6.33k|				CAST_REAL_FLOAT,
  404|  6.33k|				CAST_REAL_COMPLEX);
  405|  6.33k|			break;
  406|       |
  407|  6.92k|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (407:3): [True: 6.92k, False: 301k]
  ------------------
  408|  6.92k|			BAND_SWITCH_INNER(unsigned int,
  ------------------
  |  |  310|  6.92k|	{ \
  |  |  311|  6.92k|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  410|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  6.92k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 6.92k, False: 0]
  |  |  ------------------
  |  |  341|  6.92k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  410|  6.92k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  6.92k|	{ \
  |  |  |  |  |  |  260|  6.92k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  6.92k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  6.92k|\
  |  |  |  |  |  |  263|   166k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 159k, False: 6.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|   159k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  6.92k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  6.92k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  411|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  411|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 6.92k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  6.92k|		} \
  |  |  355|  6.92k|	}
  ------------------
  409|  6.92k|				INT_INT,
  410|  6.92k|				CAST_REAL_FLOAT,
  411|  6.92k|				CAST_REAL_COMPLEX);
  412|  6.92k|			break;
  413|       |
  414|  6.38k|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (414:3): [True: 6.38k, False: 302k]
  ------------------
  415|  6.38k|			BAND_SWITCH_INNER(signed int,
  ------------------
  |  |  310|  6.38k|	{ \
  |  |  311|  6.38k|		switch (conversion->out->BandFmt) { \
  |  |  312|  1.77k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 1.77k, False: 4.61k]
  |  |  ------------------
  |  |  313|  1.77k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  416|  1.77k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  1.77k|	{ \
  |  |  |  |  |  |  214|  1.77k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.77k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  1.77k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|  1.77k|		else { \
  |  |  |  |  |  |  222|  1.77k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  1.77k|	{ \
  |  |  |  |  |  |  |  |  184|  1.77k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  1.77k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  1.77k|\
  |  |  |  |  |  |  |  |  187|  30.4k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 28.6k, False: 1.77k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  28.6k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  28.6k|\
  |  |  |  |  |  |  |  |  190|  28.6k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|  28.6k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|  28.6k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  28.6k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  57.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 2.43k, False: 26.2k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 793, False: 27.9k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 793, False: 25.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  28.6k|		} \
  |  |  |  |  |  |  |  |  192|  1.77k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  1.77k|		} \
  |  |  |  |  |  |  224|  1.77k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  1.77k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  417|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  4.61k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 4.61k, False: 1.77k]
  |  |  ------------------
  |  |  341|  4.61k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  417|  4.61k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  4.61k|	{ \
  |  |  |  |  |  |  260|  4.61k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  4.61k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  4.61k|\
  |  |  |  |  |  |  263|   121k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 117k, False: 4.61k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|   117k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  4.61k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  4.61k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  418|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  418|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  6.38k|		} \
  |  |  355|  6.38k|	}
  ------------------
  416|  6.38k|				INT_INT_SIGNED,
  417|  6.38k|				CAST_REAL_FLOAT,
  418|  6.38k|				CAST_REAL_COMPLEX);
  419|  6.38k|			break;
  420|       |
  421|  27.9k|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (421:3): [True: 27.9k, False: 280k]
  ------------------
  422|  27.9k|			BAND_SWITCH_INNER(float,
  ------------------
  |  |  310|  27.9k|	{ \
  |  |  311|  27.9k|		switch (conversion->out->BandFmt) { \
  |  |  312|  2.23k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 2.23k, False: 25.7k]
  |  |  ------------------
  |  |  313|  2.23k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  423|  2.23k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  2.23k|	{ \
  |  |  |  |  |  |  233|  2.23k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  2.23k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  2.23k|\
  |  |  |  |  |  |  236|  91.0k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 88.8k, False: 2.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  88.8k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|  2.23k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|  2.23k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  88.8k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   177k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 413, False: 88.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 3.66k, False: 85.2k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 3.66k, False: 84.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  2.23k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  2.23k|			break; \
  |  |  315|      0|\
  |  |  316|  1.07k|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 1.07k, False: 26.9k]
  |  |  ------------------
  |  |  317|  1.07k|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  423|  1.07k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  1.07k|	{ \
  |  |  |  |  |  |  233|  1.07k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  1.07k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  1.07k|\
  |  |  |  |  |  |  236|  81.1k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 80.0k, False: 1.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  80.0k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|  1.07k|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|  1.07k|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  80.0k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   160k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 9.38k, False: 70.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 19.1k, False: 60.8k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 19.1k, False: 51.5k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  1.07k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|  1.07k|			break; \
  |  |  319|      0|\
  |  |  320|  1.24k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 1.24k, False: 26.7k]
  |  |  ------------------
  |  |  321|  1.24k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  423|  1.24k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  1.24k|	{ \
  |  |  |  |  |  |  233|  1.24k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  1.24k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  1.24k|\
  |  |  |  |  |  |  236|  73.6k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 72.4k, False: 1.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  72.4k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|  1.24k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|  1.24k|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  72.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   144k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 72.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 3.54k, False: 68.8k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 3.54k, False: 68.8k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  1.24k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  1.24k|			break; \
  |  |  323|      0|\
  |  |  324|  4.29k|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 4.29k, False: 23.6k]
  |  |  ------------------
  |  |  325|  4.29k|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  423|  4.29k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  4.29k|	{ \
  |  |  |  |  |  |  233|  4.29k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  4.29k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  4.29k|\
  |  |  |  |  |  |  236|   464k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 460k, False: 4.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   460k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|  4.29k|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|  4.29k|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   460k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   921k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 8.00k, False: 452k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 23.3k, False: 437k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 23.3k, False: 429k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  4.29k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|  4.29k|			break; \
  |  |  327|      0|\
  |  |  328|  3.20k|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 3.20k, False: 24.7k]
  |  |  ------------------
  |  |  329|  3.20k|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  423|  3.20k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  3.20k|	{ \
  |  |  |  |  |  |  233|  3.20k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  3.20k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  3.20k|\
  |  |  |  |  |  |  236|   282k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 279k, False: 3.20k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   279k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|  3.20k|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|  3.20k|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   279k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   558k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 279k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.88k, False: 277k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.88k, False: 277k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  3.20k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|  3.20k|			break; \
  |  |  331|      0|\
  |  |  332|  3.48k|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 3.48k, False: 24.5k]
  |  |  ------------------
  |  |  333|  3.48k|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  423|  3.48k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  3.48k|	{ \
  |  |  |  |  |  |  233|  3.48k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  3.48k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  3.48k|\
  |  |  |  |  |  |  236|   378k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 374k, False: 3.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   374k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|  3.48k|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|  3.48k|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   374k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   749k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 3.56k, False: 371k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 2.96k, False: 372k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 2.96k, False: 368k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  3.48k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  3.48k|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 27.9k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  424|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|  12.4k|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 12.4k, False: 15.5k]
  |  |  ------------------
  |  |  341|  12.4k|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  424|  12.4k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  12.4k|	{ \
  |  |  |  |  |  |  260|  12.4k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  12.4k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  12.4k|\
  |  |  |  |  |  |  263|   314k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 301k, False: 12.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|   301k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  12.4k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|  12.4k|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 27.9k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  425|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 27.9k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  425|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 27.9k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  27.9k|		} \
  |  |  355|  27.9k|	}
  ------------------
  423|  27.9k|				CAST_FLOAT_INT,
  424|  27.9k|				CAST_REAL_FLOAT,
  425|  27.9k|				CAST_REAL_COMPLEX);
  426|  27.9k|			break;
  427|       |
  428|  2.39k|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (428:3): [True: 2.39k, False: 306k]
  ------------------
  429|  2.39k|			BAND_SWITCH_INNER(double,
  ------------------
  |  |  310|  2.39k|	{ \
  |  |  311|  2.39k|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|    343|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 343, False: 2.05k]
  |  |  ------------------
  |  |  321|    343|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  430|    343|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|    343|	{ \
  |  |  |  |  |  |  233|    343|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|    343|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|    343|\
  |  |  |  |  |  |  236|  2.05k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 1.71k, False: 343]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  1.71k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|    343|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|    343|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  1.71k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  3.42k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 1.71k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 730, False: 980]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 730, False: 980]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    343|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|    343|			break; \
  |  |  323|      0|\
  |  |  324|    569|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 569, False: 1.82k]
  |  |  ------------------
  |  |  325|    569|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  430|    569|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|    569|	{ \
  |  |  |  |  |  |  233|    569|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|    569|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|    569|\
  |  |  |  |  |  |  236|  8.75k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 8.18k, False: 569]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  8.18k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|    569|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|    569|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  8.18k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  16.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 340, False: 7.84k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 703, False: 7.48k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 703, False: 7.14k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    569|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|    569|			break; \
  |  |  327|      0|\
  |  |  328|    990|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 990, False: 1.40k]
  |  |  ------------------
  |  |  329|    990|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  430|    990|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|    990|	{ \
  |  |  |  |  |  |  233|    990|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|    990|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|    990|\
  |  |  |  |  |  |  236|  17.0k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 16.0k, False: 990]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  16.0k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|    990|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|    990|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  16.0k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  32.1k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 16.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 6.80k, False: 9.27k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 6.80k, False: 9.27k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    990|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|    990|			break; \
  |  |  331|      0|\
  |  |  332|    493|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 493, False: 1.90k]
  |  |  ------------------
  |  |  333|    493|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  430|    493|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|    493|	{ \
  |  |  |  |  |  |  233|    493|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|    493|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|    493|\
  |  |  |  |  |  |  236|  4.82k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 4.33k, False: 493]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  4.33k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|    493|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|    493|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  4.33k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  8.66k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 675, False: 3.65k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.93k, False: 2.40k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.93k, False: 1.72k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    493|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|    493|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  431|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  431|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  432|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  432|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 2.39k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  2.39k|		} \
  |  |  355|  2.39k|	}
  ------------------
  430|  2.39k|				CAST_FLOAT_INT,
  431|  2.39k|				CAST_REAL_FLOAT,
  432|  2.39k|				CAST_REAL_COMPLEX);
  433|  2.39k|			break;
  434|       |
  435|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (435:3): [True: 0, False: 308k]
  ------------------
  436|      0|			BAND_SWITCH_INNER(float,
  ------------------
  |  |  310|      0|	{ \
  |  |  311|      0|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  438|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  438|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  439|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  439|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|      0|		} \
  |  |  355|      0|	}
  ------------------
  437|      0|				CAST_COMPLEX_INT,
  438|      0|				CAST_COMPLEX_FLOAT,
  439|      0|				CAST_COMPLEX_COMPLEX);
  440|      0|			break;
  441|       |
  442|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (442:3): [True: 0, False: 308k]
  ------------------
  443|      0|			BAND_SWITCH_INNER(double,
  ------------------
  |  |  310|      0|	{ \
  |  |  311|      0|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  445|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  445|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  446|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  446|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|      0|		} \
  |  |  355|      0|	}
  ------------------
  444|      0|				CAST_COMPLEX_INT,
  445|      0|				CAST_COMPLEX_FLOAT,
  446|      0|				CAST_COMPLEX_COMPLEX);
  447|      0|			break;
  448|       |
  449|      0|		default:
  ------------------
  |  Branch (449:3): [True: 0, False: 308k]
  ------------------
  450|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|   308k|		}
  452|   308k|	}
  453|       |
  454|  23.2k|	VIPS_GATE_STOP("vips_cast_gen: work");
  ------------------
  |  |   49|  23.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  23.2k|	{ \
  |  |   51|  23.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 23.2k]
  |  |  ------------------
  |  |   52|  23.2k|			vips__thread_gate_stop(NAME); \
  |  |   53|  23.2k|	} \
  |  |   54|  23.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|       |
  456|  23.2k|	return 0;
  457|  23.2k|}
cast.c:vips_cast_init:
  552|  20.1k|{
  553|  20.1k|}
cast.c:vips_castv:
  557|  20.1k|{
  558|  20.1k|	return vips_call_split("cast", ap, in, out, format);
  559|  20.1k|}

composite.cpp:_ZL30vips_composite_base_class_initP20_VipsConversionClass:
 1466|      1|{
 1467|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1468|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1470|       |
 1471|      1|	VIPS_DEBUG_MSG("vips_composite_base_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|       |
 1473|      1|	gobject_class->dispose = vips_composite_base_dispose;
 1474|      1|	gobject_class->set_property = vips_object_set_property;
 1475|      1|	gobject_class->get_property = vips_object_get_property;
 1476|       |
 1477|      1|	vobject_class->nickname = "composite_base";
 1478|      1|	vobject_class->description = _("blend images together");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1479|      1|	vobject_class->build = vips_composite_base_build;
 1480|       |
 1481|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1482|       |
 1483|      1|	VIPS_ARG_ENUM(klass, "compositing_space", 10,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1484|      1|		_("Compositing space"),
 1485|      1|		_("Composite images in this colour space"),
 1486|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1487|      1|		G_STRUCT_OFFSET(VipsCompositeBase, compositing_space),
 1488|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
 1489|       |
 1490|      1|	VIPS_ARG_BOOL(klass, "premultiplied", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1491|      1|		_("Premultiplied"),
 1492|      1|		_("Images have premultiplied alpha"),
 1493|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1494|      1|		G_STRUCT_OFFSET(VipsCompositeBase, premultiplied),
 1495|      1|		FALSE);
 1496|      1|}
composite.cpp:_ZL25vips_composite_class_initP20_VipsConversionClass:
 1562|      1|{
 1563|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1564|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1565|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1566|       |
 1567|      1|	VIPS_DEBUG_MSG("vips_composite_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1568|       |
 1569|      1|	gobject_class->set_property = vips_object_set_property;
 1570|      1|	gobject_class->get_property = vips_object_get_property;
 1571|       |
 1572|      1|	vobject_class->nickname = "composite";
 1573|      1|	vobject_class->description =
 1574|      1|		_("blend an array of images with an array of blend modes");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1575|      1|	vobject_class->build = vips_composite_build;
 1576|       |
 1577|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1578|       |
 1579|      1|	VIPS_ARG_BOXED(klass, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1580|      1|		_("Inputs"),
 1581|      1|		_("Array of input images"),
 1582|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1583|      1|		G_STRUCT_OFFSET(VipsCompositeBase, in),
 1584|      1|		VIPS_TYPE_ARRAY_IMAGE);
 1585|       |
 1586|      1|	VIPS_ARG_BOXED(klass, "mode", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1587|      1|		_("Blend modes"),
 1588|      1|		_("Array of VipsBlendMode to join with"),
 1589|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1590|      1|		G_STRUCT_OFFSET(VipsCompositeBase, mode),
 1591|      1|		VIPS_TYPE_ARRAY_INT);
 1592|       |
 1593|      1|	VIPS_ARG_BOXED(klass, "x", 4,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1594|      1|		_("x coordinates"),
 1595|      1|		_("Array of x coordinates to join at"),
 1596|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1597|      1|		G_STRUCT_OFFSET(VipsComposite, x),
 1598|      1|		VIPS_TYPE_ARRAY_INT);
 1599|       |
 1600|      1|	VIPS_ARG_BOXED(klass, "y", 5,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1601|      1|		_("y coordinates"),
 1602|      1|		_("Array of y coordinates to join at"),
 1603|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1604|      1|		G_STRUCT_OFFSET(VipsComposite, y),
 1605|      1|		VIPS_TYPE_ARRAY_INT);
 1606|      1|}
composite.cpp:_ZL26vips_composite2_class_initP20_VipsConversionClass:
 1696|      1|{
 1697|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1698|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1699|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1700|       |
 1701|      1|	VIPS_DEBUG_MSG("vips_composite_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|       |
 1703|      1|	gobject_class->set_property = vips_object_set_property;
 1704|      1|	gobject_class->get_property = vips_object_get_property;
 1705|       |
 1706|      1|	vobject_class->nickname = "composite2";
 1707|      1|	vobject_class->description =
 1708|      1|		_("blend a pair of images with a blend mode");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1709|      1|	vobject_class->build = vips_composite2_build;
 1710|       |
 1711|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1712|       |
 1713|      1|	VIPS_ARG_IMAGE(klass, "base", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1714|      1|		_("Base"),
 1715|      1|		_("Base image"),
 1716|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1717|      1|		G_STRUCT_OFFSET(VipsComposite2, base));
 1718|       |
 1719|      1|	VIPS_ARG_IMAGE(klass, "overlay", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1720|      1|		_("Overlay"),
 1721|      1|		_("Overlay image"),
 1722|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1723|      1|		G_STRUCT_OFFSET(VipsComposite2, overlay));
 1724|       |
 1725|      1|	VIPS_ARG_ENUM(klass, "mode", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1726|      1|		_("Blend mode"),
 1727|      1|		_("VipsBlendMode to join with"),
 1728|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1729|      1|		G_STRUCT_OFFSET(VipsComposite2, mode),
 1730|      1|		VIPS_TYPE_BLEND_MODE, VIPS_BLEND_MODE_OVER);
 1731|       |
 1732|      1|	VIPS_ARG_INT(klass, "x", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1733|      1|		_("x"),
 1734|      1|		_("x position of overlay"),
 1735|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1736|      1|		G_STRUCT_OFFSET(VipsComposite2, x),
 1737|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1738|       |
 1739|      1|	VIPS_ARG_INT(klass, "y", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1740|      1|		_("y"),
 1741|      1|		_("y position of overlay"),
 1742|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1743|      1|		G_STRUCT_OFFSET(VipsComposite2, y),
 1744|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1745|      1|}

vips_conversion_operation_init:
  362|      2|{
  363|      2|	extern GType vips_copy_get_type(void);
  364|      2|	extern GType vips_tile_cache_get_type(void);
  365|      2|	extern GType vips_line_cache_get_type(void);
  366|      2|	extern GType vips_sequential_get_type(void);
  367|      2|	extern GType vips_cache_get_type(void);
  368|      2|	extern GType vips_embed_get_type(void);
  369|      2|	extern GType vips_gravity_get_type(void);
  370|      2|	extern GType vips_flip_get_type(void);
  371|      2|	extern GType vips_insert_get_type(void);
  372|      2|	extern GType vips_join_get_type(void);
  373|      2|	extern GType vips_arrayjoin_get_type(void);
  374|      2|	extern GType vips_extract_area_get_type(void);
  375|      2|	extern GType vips_crop_get_type(void);
  376|      2|	extern GType vips_smartcrop_get_type(void);
  377|      2|	extern GType vips_extract_band_get_type(void);
  378|      2|	extern GType vips_replicate_get_type(void);
  379|      2|	extern GType vips_cast_get_type(void);
  380|      2|	extern GType vips_bandjoin_get_type(void);
  381|      2|	extern GType vips_bandjoin_const_get_type(void);
  382|      2|	extern GType vips_bandrank_get_type(void);
  383|      2|	extern GType vips_black_get_type(void);
  384|      2|	extern GType vips_rot_get_type(void);
  385|      2|	extern GType vips_rot45_get_type(void);
  386|      2|	extern GType vips_autorot_get_type(void);
  387|      2|	extern GType vips_ifthenelse_get_type(void);
  388|      2|	extern GType vips_switch_get_type(void);
  389|      2|	extern GType vips_recomb_get_type(void);
  390|      2|	extern GType vips_bandmean_get_type(void);
  391|      2|	extern GType vips_bandfold_get_type(void);
  392|      2|	extern GType vips_bandunfold_get_type(void);
  393|      2|	extern GType vips_flatten_get_type(void);
  394|      2|	extern GType vips_premultiply_get_type(void);
  395|      2|	extern GType vips_unpremultiply_get_type(void);
  396|      2|	extern GType vips_bandbool_get_type(void);
  397|      2|	extern GType vips_gaussnoise_get_type(void);
  398|      2|	extern GType vips_grid_get_type(void);
  399|      2|	extern GType vips_transpose3d_get_type(void);
  400|      2|	extern GType vips_scale_get_type(void);
  401|      2|	extern GType vips_wrap_get_type(void);
  402|      2|	extern GType vips_zoom_get_type(void);
  403|      2|	extern GType vips_subsample_get_type(void);
  404|      2|	extern GType vips_msb_get_type(void);
  405|      2|	extern GType vips_byteswap_get_type(void);
  406|      2|	extern GType vips_xyz_get_type(void);
  407|      2|	extern GType vips_falsecolour_get_type(void);
  408|      2|	extern GType vips_gamma_get_type(void);
  409|      2|	extern GType vips_composite_get_type(void);
  410|      2|	extern GType vips_composite2_get_type(void);
  411|      2|	extern GType vips_addalpha_get_type(void);
  412|       |
  413|      2|	vips_copy_get_type();
  414|      2|	vips_tile_cache_get_type();
  415|      2|	vips_line_cache_get_type();
  416|      2|	vips_sequential_get_type();
  417|      2|	vips_cache_get_type();
  418|      2|	vips_embed_get_type();
  419|      2|	vips_gravity_get_type();
  420|      2|	vips_flip_get_type();
  421|      2|	vips_insert_get_type();
  422|      2|	vips_join_get_type();
  423|      2|	vips_arrayjoin_get_type();
  424|      2|	vips_extract_area_get_type();
  425|      2|	vips_crop_get_type();
  426|      2|	vips_smartcrop_get_type();
  427|      2|	vips_extract_band_get_type();
  428|      2|	vips_replicate_get_type();
  429|      2|	vips_cast_get_type();
  430|      2|	vips_bandjoin_get_type();
  431|      2|	vips_bandjoin_const_get_type();
  432|      2|	vips_bandrank_get_type();
  433|      2|	vips_black_get_type();
  434|      2|	vips_rot_get_type();
  435|      2|	vips_rot45_get_type();
  436|      2|	vips_autorot_get_type();
  437|      2|	vips_ifthenelse_get_type();
  438|      2|	vips_switch_get_type();
  439|      2|	vips_recomb_get_type();
  440|      2|	vips_bandmean_get_type();
  441|      2|	vips_bandfold_get_type();
  442|      2|	vips_bandunfold_get_type();
  443|      2|	vips_flatten_get_type();
  444|      2|	vips_premultiply_get_type();
  445|      2|	vips_unpremultiply_get_type();
  446|      2|	vips_bandbool_get_type();
  447|      2|	vips_gaussnoise_get_type();
  448|      2|	vips_grid_get_type();
  449|      2|	vips_transpose3d_get_type();
  450|      2|	vips_scale_get_type();
  451|      2|	vips_wrap_get_type();
  452|      2|	vips_zoom_get_type();
  453|      2|	vips_subsample_get_type();
  454|      2|	vips_msb_get_type();
  455|      2|	vips_byteswap_get_type();
  456|      2|	vips_xyz_get_type();
  457|      2|	vips_falsecolour_get_type();
  458|      2|	vips_gamma_get_type();
  459|      2|	vips_composite_get_type();
  460|      2|	vips_composite2_get_type();
  461|      2|	vips_addalpha_get_type();
  462|      2|}
conversion.c:vips_conversion_class_init:
  334|      1|{
  335|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|       |
  338|      1|	gobject_class->set_property = vips_object_set_property;
  339|      1|	gobject_class->get_property = vips_object_get_property;
  340|       |
  341|      1|	vobject_class->nickname = "conversion";
  342|      1|	vobject_class->description = _("conversion operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  343|      1|	vobject_class->build = vips_conversion_build;
  344|       |
  345|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  346|      1|		_("Output"),
  347|      1|		_("Output image"),
  348|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  349|      1|		G_STRUCT_OFFSET(VipsConversion, out));
  350|      1|}
conversion.c:vips_conversion_build:
  315|   110k|{
  316|   110k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|   110k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   110k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   110k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   110k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  317|       |
  318|       |#ifdef DEBUG
  319|       |	printf("vips_conversion_build: ");
  320|       |	vips_object_print_name(object);
  321|       |	printf("\n");
  322|       |#endif /*DEBUG*/
  323|       |
  324|   110k|	g_object_set(conversion, "out", vips_image_new(), NULL);
  325|       |
  326|   110k|	if (VIPS_OBJECT_CLASS(vips_conversion_parent_class)->build(object))
  ------------------
  |  |  435|   110k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   110k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   110k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (326:6): [True: 0, False: 110k]
  ------------------
  327|      0|		return -1;
  328|       |
  329|   110k|	return 0;
  330|   110k|}
conversion.c:vips_conversion_init:
  354|   110k|{
  355|   110k|}

vips_copy:
  395|  51.3k|{
  396|  51.3k|	va_list ap;
  397|  51.3k|	int result;
  398|       |
  399|  51.3k|	va_start(ap, out);
  400|  51.3k|	result = vips_call_split("copy", ap, in, out);
  401|  51.3k|	va_end(ap);
  402|       |
  403|  51.3k|	return result;
  404|  51.3k|}
copy.c:vips_copy_class_init:
  250|      1|{
  251|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  254|       |
  255|      1|	VIPS_DEBUG_MSG("vips_copy_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|       |
  257|      1|	gobject_class->set_property = vips_object_set_property;
  258|      1|	gobject_class->get_property = vips_object_get_property;
  259|       |
  260|      1|	vobject_class->nickname = "copy";
  261|      1|	vobject_class->description = _("copy an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  262|      1|	vobject_class->build = vips_copy_build;
  263|       |
  264|       |	/* We use copy to make fresh vipsimages to stop sharing, so don't
  265|       |	 * cache it. Plus copy is cheap.
  266|       |	 */
  267|      1|	operation_class->flags =
  268|      1|		VIPS_OPERATION_SEQUENTIAL |
  269|      1|		VIPS_OPERATION_NOCACHE;
  270|       |
  271|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  272|      1|		_("Input"),
  273|      1|		_("Input image"),
  274|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  275|      1|		G_STRUCT_OFFSET(VipsCopy, in));
  276|       |
  277|      1|	VIPS_ARG_BOOL(class, "swap", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  278|      1|		_("Swap"),
  279|      1|		_("Swap bytes in image between little and big-endian"),
  280|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  281|      1|		G_STRUCT_OFFSET(VipsCopy, swap),
  282|      1|		FALSE);
  283|       |
  284|      1|	VIPS_ARG_INT(class, "width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  285|      1|		_("Width"),
  286|      1|		_("Image width in pixels"),
  287|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  288|      1|		G_STRUCT_OFFSET(VipsCopy, width),
  289|      1|		0, VIPS_MAX_COORD, 0);
  290|       |
  291|      1|	VIPS_ARG_INT(class, "height", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  292|      1|		_("Height"),
  293|      1|		_("Image height in pixels"),
  294|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  295|      1|		G_STRUCT_OFFSET(VipsCopy, height),
  296|      1|		0, VIPS_MAX_COORD, 0);
  297|       |
  298|      1|	VIPS_ARG_INT(class, "bands", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  299|      1|		_("Bands"),
  300|      1|		_("Number of bands in image"),
  301|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  302|      1|		G_STRUCT_OFFSET(VipsCopy, bands),
  303|      1|		0, VIPS_MAX_COORD, 0);
  304|       |
  305|      1|	VIPS_ARG_ENUM(class, "format", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  306|      1|		_("Format"),
  307|      1|		_("Pixel format in image"),
  308|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  309|      1|		G_STRUCT_OFFSET(VipsCopy, format),
  310|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  311|       |
  312|      1|	VIPS_ARG_ENUM(class, "coding", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  313|      1|		_("Coding"),
  314|      1|		_("Pixel coding"),
  315|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  316|      1|		G_STRUCT_OFFSET(VipsCopy, coding),
  317|      1|		VIPS_TYPE_CODING, VIPS_CODING_NONE);
  318|       |
  319|      1|	VIPS_ARG_ENUM(class, "interpretation", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  320|      1|		_("Interpretation"),
  321|      1|		_("Pixel interpretation"),
  322|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  323|      1|		G_STRUCT_OFFSET(VipsCopy, interpretation),
  324|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
  325|       |
  326|      1|	VIPS_ARG_DOUBLE(class, "xres", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  327|      1|		_("Xres"),
  328|      1|		_("Horizontal resolution in pixels/mm"),
  329|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  330|      1|		G_STRUCT_OFFSET(VipsCopy, xres),
  331|      1|		-0.0, 1000000, 0);
  332|       |
  333|      1|	VIPS_ARG_DOUBLE(class, "yres", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  334|      1|		_("Yres"),
  335|      1|		_("Vertical resolution in pixels/mm"),
  336|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  337|      1|		G_STRUCT_OFFSET(VipsCopy, yres),
  338|      1|		-0.0, 1000000, 0);
  339|       |
  340|      1|	VIPS_ARG_INT(class, "xoffset", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  341|      1|		_("Xoffset"),
  342|      1|		_("Horizontal offset of origin"),
  343|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  344|      1|		G_STRUCT_OFFSET(VipsCopy, xoffset),
  345|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  346|       |
  347|      1|	VIPS_ARG_INT(class, "yoffset", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  348|      1|		_("Yoffset"),
  349|      1|		_("Vertical offset of origin"),
  350|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  351|      1|		G_STRUCT_OFFSET(VipsCopy, yoffset),
  352|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  353|      1|}
copy.c:vips_copy_build:
  164|  51.3k|{
  165|  51.3k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  51.3k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  51.3k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  51.3k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  51.3k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  51.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  51.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  51.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  51.3k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  167|  51.3k|	VipsCopy *copy = (VipsCopy *) object;
  168|       |
  169|  51.3k|	guint64 pel_size_before;
  170|  51.3k|	guint64 pel_size_after;
  171|  51.3k|	VipsImage copy_of_fields;
  172|  51.3k|	int i;
  173|       |
  174|  51.3k|	if (VIPS_OBJECT_CLASS(vips_copy_parent_class)->build(object))
  ------------------
  |  |  435|  51.3k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  51.3k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  51.3k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (174:6): [True: 0, False: 51.3k]
  ------------------
  175|      0|		return -1;
  176|       |
  177|  51.3k|	if (vips_image_pio_input(copy->in))
  ------------------
  |  Branch (177:6): [True: 0, False: 51.3k]
  ------------------
  178|      0|		return -1;
  179|       |
  180|  51.3k|	if (copy->swap)
  ------------------
  |  Branch (180:6): [True: 0, False: 51.3k]
  ------------------
  181|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  182|  51.3k|			_("copy swap is deprecated, use byteswap instead"));
  183|       |
  184|  51.3k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (184:6): [True: 0, False: 51.3k]
  ------------------
  185|  51.3k|			VIPS_DEMAND_STYLE_THINSTRIP, copy->in, NULL))
  186|      0|		return -1;
  187|       |
  188|       |	/* Take a copy of all the basic header fields. We use this for
  189|       |	 * sanity-checking the changes our caller has made.
  190|       |	 */
  191|  51.3k|	copy_of_fields = *conversion->out;
  192|       |
  193|       |	/* Use props to adjust header fields.
  194|       |	 */
  195|   565k|	for (i = 0; i < VIPS_NUMBER(vips_copy_names); i++) {
  ------------------
  |  |   60|   565k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (195:14): [True: 513k, False: 51.3k]
  ------------------
  196|   513k|		const char *name = vips_copy_names[i];
  197|       |
  198|   513k|		GParamSpec *pspec;
  199|   513k|		VipsArgumentClass *argument_class;
  200|   513k|		VipsArgumentInstance *argument_instance;
  201|       |
  202|   513k|		if (vips_object_get_argument(object, name,
  ------------------
  |  Branch (202:7): [True: 0, False: 513k]
  ------------------
  203|   513k|				&pspec, &argument_class, &argument_instance))
  204|      0|			return -1;
  205|       |
  206|   513k|		if (argument_instance->assigned) {
  ------------------
  |  Branch (206:7): [True: 0, False: 513k]
  ------------------
  207|      0|			GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|      0|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|      0|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      0|			GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|      0|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  209|       |
  210|      0|			g_value_init(&value, type);
  211|      0|			g_object_get_property(G_OBJECT(object),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      0|				name, &value);
  213|       |
  214|       |#ifdef VIPS_DEBUG
  215|       |			{
  216|       |				char *str;
  217|       |
  218|       |				str = g_strdup_value_contents(&value);
  219|       |				printf("vips_copy_build: %s = %s\n", name, str);
  220|       |				g_free(str);
  221|       |			}
  222|       |#endif /* VIPS_DEBUG */
  223|       |
  224|      0|			g_object_set_property(G_OBJECT(conversion->out),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      0|				name, &value);
  226|      0|			g_value_unset(&value);
  227|      0|		}
  228|   513k|	}
  229|       |
  230|       |	/* Disallow changes which alter sizeof(pel).
  231|       |	 */
  232|  51.3k|	pel_size_before = VIPS_IMAGE_SIZEOF_PEL(&copy_of_fields);
  ------------------
  |  |  384|  51.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  51.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  233|  51.3k|	pel_size_after = VIPS_IMAGE_SIZEOF_PEL(conversion->out);
  ------------------
  |  |  384|  51.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  51.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  234|  51.3k|	if (pel_size_after != pel_size_before) {
  ------------------
  |  Branch (234:6): [True: 0, False: 51.3k]
  ------------------
  235|      0|		vips_error(class->nickname,
  236|      0|			"%s", _("must not change pel size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|      0|		return -1;
  238|      0|	}
  239|       |
  240|  51.3k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (240:6): [True: 0, False: 51.3k]
  ------------------
  241|  51.3k|			vips_start_one, vips_copy_gen, vips_stop_one,
  242|  51.3k|			copy->in, copy))
  243|      0|		return -1;
  244|       |
  245|  51.3k|	return 0;
  246|  51.3k|}
copy.c:vips_copy_gen:
  136|  83.3k|{
  137|  83.3k|	VipsRegion *ir = (VipsRegion *) seq;
  138|  83.3k|	VipsRect *r = &out_region->valid;
  139|       |
  140|  83.3k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (140:6): [True: 27.3k, False: 56.0k]
  ------------------
  141|  83.3k|		vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (141:3): [True: 0, False: 56.0k]
  ------------------
  142|  27.3k|		return -1;
  143|       |
  144|  56.0k|	return 0;
  145|  83.3k|}
copy.c:vips_copy_init:
  357|  51.3k|{
  358|       |	/* Init our instance fields.
  359|       |	 */
  360|  51.3k|}

embed.c:vips_embed_base_class_init:
  551|      1|{
  552|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  553|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|       |
  555|      1|	VIPS_DEBUG_MSG("vips_embed_base_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|       |
  557|      1|	gobject_class->set_property = vips_object_set_property;
  558|      1|	gobject_class->get_property = vips_object_get_property;
  559|       |
  560|      1|	vobject_class->nickname = "embed_base";
  561|      1|	vobject_class->description = _("embed an image in a larger image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  562|      1|	vobject_class->build = vips_embed_base_build;
  563|       |
  564|       |	/* Not seq with mirror.
  565|       |	 */
  566|       |
  567|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  568|      1|		_("Input"),
  569|      1|		_("Input image"),
  570|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  571|      1|		G_STRUCT_OFFSET(VipsEmbedBase, in));
  572|       |
  573|      1|	VIPS_ARG_INT(class, "width", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  574|      1|		_("Width"),
  575|      1|		_("Image width in pixels"),
  576|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  577|      1|		G_STRUCT_OFFSET(VipsEmbedBase, width),
  578|      1|		1, 1000000000, 1);
  579|       |
  580|      1|	VIPS_ARG_INT(class, "height", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  581|      1|		_("Height"),
  582|      1|		_("Image height in pixels"),
  583|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  584|      1|		G_STRUCT_OFFSET(VipsEmbedBase, height),
  585|      1|		1, 1000000000, 1);
  586|       |
  587|      1|	VIPS_ARG_ENUM(class, "extend", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  588|      1|		_("Extend"),
  589|      1|		_("How to generate the extra pixels"),
  590|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  591|      1|		G_STRUCT_OFFSET(VipsEmbedBase, extend),
  592|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BLACK);
  593|       |
  594|      1|	VIPS_ARG_BOXED(class, "background", 12,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  595|      1|		_("Background"),
  596|      1|		_("Color for background pixels"),
  597|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  598|      1|		G_STRUCT_OFFSET(VipsEmbedBase, background),
  599|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  600|      1|}
embed.c:vips_embed_class_init:
  642|      1|{
  643|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  644|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  645|       |
  646|      1|	VIPS_DEBUG_MSG("vips_embed_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|       |
  648|      1|	gobject_class->set_property = vips_object_set_property;
  649|      1|	gobject_class->get_property = vips_object_get_property;
  650|       |
  651|      1|	vobject_class->nickname = "embed";
  652|      1|	vobject_class->description = _("embed an image in a larger image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  653|      1|	vobject_class->build = vips_embed_build;
  654|       |
  655|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  656|      1|		_("x"),
  657|      1|		_("Left edge of input in output"),
  658|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  659|      1|		G_STRUCT_OFFSET(VipsEmbed, x),
  660|      1|		-1000000000, 1000000000, 0);
  661|       |
  662|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  663|      1|		_("y"),
  664|      1|		_("Top edge of input in output"),
  665|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  666|      1|		G_STRUCT_OFFSET(VipsEmbed, y),
  667|      1|		-1000000000, 1000000000, 0);
  668|      1|}
embed.c:vips_gravity_class_init:
  796|      1|{
  797|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|       |
  800|      1|	VIPS_DEBUG_MSG("vips_gravity_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  801|       |
  802|      1|	gobject_class->set_property = vips_object_set_property;
  803|      1|	gobject_class->get_property = vips_object_get_property;
  804|       |
  805|      1|	vobject_class->nickname = "gravity";
  806|      1|	vobject_class->description = _("place an image within a larger "
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  807|      1|								   "image with a certain gravity");
  808|      1|	vobject_class->build = vips_gravity_build;
  809|       |
  810|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  811|      1|		_("Direction"),
  812|      1|		_("Direction to place image within width/height"),
  813|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  814|      1|		G_STRUCT_OFFSET(VipsGravity, direction),
  815|      1|		VIPS_TYPE_COMPASS_DIRECTION, VIPS_COMPASS_DIRECTION_CENTRE);
  816|      1|}

vips_extract_area:
  260|  2.78k|{
  261|  2.78k|	va_list ap;
  262|  2.78k|	int result;
  263|       |
  264|  2.78k|	va_start(ap, height);
  265|  2.78k|	result = vips_call_split("extract_area", ap, in, out,
  266|  2.78k|		left, top, width, height);
  267|  2.78k|	va_end(ap);
  268|       |
  269|  2.78k|	return result;
  270|  2.78k|}
vips_crop_get_type:
  277|      2|{
  278|      2|	static gsize gtype_id = 0;
  279|       |
  280|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 2, False: 0]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  281|      2|		GType new_type = g_type_register_static_simple(VIPS_TYPE_CONVERSION,
  ------------------
  |  |   38|      2|#define VIPS_TYPE_CONVERSION (vips_conversion_get_type())
  ------------------
  282|      2|			g_intern_static_string("crop"),
  283|      2|			sizeof(VipsExtractAreaClass),
  284|      2|			(GClassInitFunc) (void (*)(void)) vips_extract_area_class_intern_init,
  285|      2|			sizeof(VipsExtractArea),
  286|       |#ifdef __EMSCRIPTEN__
  287|       |			(GInstanceInitFunc) vips_crop_init_adapter,
  288|       |#else
  289|      2|			(GInstanceInitFunc) (void (*)(void)) vips_extract_area_init,
  290|      2|#endif
  291|      2|			(GTypeFlags) 0);
  292|       |
  293|      2|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      2|  }))
  ------------------
  294|      2|	}
  295|       |
  296|      2|	return (GType) gtype_id;
  297|      2|}
vips_extract_band:
  479|  10.5k|{
  480|  10.5k|	va_list ap;
  481|  10.5k|	int result;
  482|       |
  483|  10.5k|	va_start(ap, band);
  484|  10.5k|	result = vips_call_split("extract_band", ap, in, out, band);
  485|  10.5k|	va_end(ap);
  486|       |
  487|  10.5k|	return result;
  488|  10.5k|}
extract.c:vips_extract_area_class_init:
  177|      2|{
  178|      2|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      2|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      2|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  181|       |
  182|      2|	VIPS_DEBUG_MSG("vips_extract_area_class_init\n");
  ------------------
  |  |   47|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      2|	{ \
  |  |   49|      2|		; \
  |  |   50|      2|	} \
  |  |   51|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|       |
  184|      2|	gobject_class->set_property = vips_object_set_property;
  185|      2|	gobject_class->get_property = vips_object_get_property;
  186|       |
  187|      2|	vobject_class->nickname = "extract_area";
  188|      2|	vobject_class->description = _("extract an area from an image");
  ------------------
  |  |   30|      2|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  189|      2|	vobject_class->build = vips_extract_area_build;
  190|       |
  191|      2|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  192|       |
  193|      2|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      2|	{ \
  |  |  113|      2|		GParamSpec *pspec; \
  |  |  114|      2|\
  |  |  115|      2|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      2|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      2|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      2|			vips_argument_get_id(), pspec); \
  |  |  120|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      2|	}
  ------------------
  194|      2|		_("Input"),
  195|      2|		_("Input image"),
  196|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  197|      2|		G_STRUCT_OFFSET(VipsExtractArea, in));
  198|       |
  199|      2|	VIPS_ARG_INT(class, "left", 3,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  200|      2|		_("Left"),
  201|      2|		_("Left edge of extract area"),
  202|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  203|      2|		G_STRUCT_OFFSET(VipsExtractArea, left),
  204|      2|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  205|       |
  206|      2|	VIPS_ARG_INT(class, "top", 4,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  207|      2|		_("Top"),
  208|      2|		_("Top edge of extract area"),
  209|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      2|		G_STRUCT_OFFSET(VipsExtractArea, top),
  211|      2|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  212|       |
  213|      2|	VIPS_ARG_INT(class, "width", 5,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  214|      2|		_("Width"),
  215|      2|		_("Width of extract area"),
  216|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      2|		G_STRUCT_OFFSET(VipsExtractArea, width),
  218|      2|		1, VIPS_MAX_COORD, 1);
  219|       |
  220|      2|	VIPS_ARG_INT(class, "height", 6,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  221|      2|		_("Height"),
  222|      2|		_("Height of extract area"),
  223|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  224|      2|		G_STRUCT_OFFSET(VipsExtractArea, height),
  225|      2|		1, VIPS_MAX_COORD, 1);
  226|      2|}
extract.c:vips_extract_area_build:
  138|  2.78k|{
  139|  2.78k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  2.78k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.78k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.78k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|  2.78k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  2.78k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.78k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.78k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  2.78k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  141|  2.78k|	VipsExtractArea *extract = (VipsExtractArea *) object;
  142|       |
  143|  2.78k|	if (VIPS_OBJECT_CLASS(vips_extract_area_parent_class)->build(object))
  ------------------
  |  |  435|  2.78k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.78k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.78k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (143:6): [True: 0, False: 2.78k]
  ------------------
  144|      0|		return -1;
  145|       |
  146|  2.78k|	if (extract->left + extract->width > extract->in->Xsize ||
  ------------------
  |  Branch (146:6): [True: 0, False: 2.78k]
  ------------------
  147|  2.78k|		extract->top + extract->height > extract->in->Ysize ||
  ------------------
  |  Branch (147:3): [True: 0, False: 2.78k]
  ------------------
  148|  2.78k|		extract->left < 0 || extract->top < 0 ||
  ------------------
  |  Branch (148:3): [True: 0, False: 2.78k]
  |  Branch (148:24): [True: 0, False: 2.78k]
  ------------------
  149|  2.78k|		extract->width <= 0 || extract->height <= 0) {
  ------------------
  |  Branch (149:3): [True: 0, False: 2.78k]
  |  Branch (149:26): [True: 0, False: 2.78k]
  ------------------
  150|      0|		vips_error(class->nickname, "%s", _("bad extract area"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  151|      0|		return -1;
  152|      0|	}
  153|       |
  154|  2.78k|	if (vips_image_pio_input(extract->in) ||
  ------------------
  |  Branch (154:6): [True: 0, False: 2.78k]
  ------------------
  155|  2.78k|		vips_check_coding_known(class->nickname, extract->in))
  ------------------
  |  Branch (155:3): [True: 0, False: 2.78k]
  ------------------
  156|      0|		return -1;
  157|       |
  158|  2.78k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (158:6): [True: 0, False: 2.78k]
  ------------------
  159|  2.78k|			VIPS_DEMAND_STYLE_THINSTRIP, extract->in, NULL))
  160|      0|		return -1;
  161|       |
  162|  2.78k|	conversion->out->Xsize = extract->width;
  163|  2.78k|	conversion->out->Ysize = extract->height;
  164|  2.78k|	conversion->out->Xoffset = -extract->left;
  165|  2.78k|	conversion->out->Yoffset = -extract->top;
  166|       |
  167|  2.78k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (167:6): [True: 0, False: 2.78k]
  ------------------
  168|  2.78k|			vips_start_one, vips_extract_area_gen, vips_stop_one,
  169|  2.78k|			extract->in, extract))
  170|      0|		return -1;
  171|       |
  172|  2.78k|	return 0;
  173|  2.78k|}
extract.c:vips_extract_area_gen:
  113|  7.77k|{
  114|  7.77k|	VipsRegion *ir = (VipsRegion *) seq;
  115|  7.77k|	VipsExtractArea *extract = (VipsExtractArea *) b;
  116|  7.77k|	VipsRect iarea;
  117|       |
  118|       |	/* Ask for input we need. Translate from demand in or's space to
  119|       |	 * demand in ir's space.
  120|       |	 */
  121|  7.77k|	iarea = out_region->valid;
  122|  7.77k|	iarea.left += extract->left;
  123|  7.77k|	iarea.top += extract->top;
  124|  7.77k|	if (vips_region_prepare(ir, &iarea))
  ------------------
  |  Branch (124:6): [True: 1.18k, False: 6.58k]
  ------------------
  125|  1.18k|		return -1;
  126|       |
  127|       |	/* Attach or to ir.
  128|       |	 */
  129|  6.58k|	if (vips_region_region(out_region, ir,
  ------------------
  |  Branch (129:6): [True: 0, False: 6.58k]
  ------------------
  130|  6.58k|			&out_region->valid, iarea.left, iarea.top))
  131|      0|		return -1;
  132|       |
  133|  6.58k|	return 0;
  134|  6.58k|}
extract.c:vips_extract_area_init:
  238|  2.78k|{
  239|  2.78k|}
extract.c:vips_extract_band_class_init:
  415|      1|{
  416|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  419|       |
  420|      1|	VIPS_DEBUG_MSG("vips_extract_band_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|       |
  422|      1|	gobject_class->set_property = vips_object_set_property;
  423|      1|	gobject_class->get_property = vips_object_get_property;
  424|       |
  425|      1|	vobject_class->nickname = "extract_band";
  426|      1|	vobject_class->description = _("extract band from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  427|      1|	vobject_class->build = vips_extract_band_build;
  428|       |
  429|      1|	bandary_class->process_line = vips_extract_band_buffer;
  430|       |
  431|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  432|      1|		_("Input"),
  433|      1|		_("Input image"),
  434|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  435|      1|		G_STRUCT_OFFSET(VipsExtractBand, in));
  436|       |
  437|      1|	VIPS_ARG_INT(class, "band", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  438|      1|		_("Band"),
  439|      1|		_("Band to extract"),
  440|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  441|      1|		G_STRUCT_OFFSET(VipsExtractBand, band),
  442|      1|		0, VIPS_MAX_COORD, 0);
  443|       |
  444|      1|	VIPS_ARG_INT(class, "n", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  445|      1|		_("n"),
  446|      1|		_("Number of bands to extract"),
  447|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  448|      1|		G_STRUCT_OFFSET(VipsExtractBand, n),
  449|      1|		1, VIPS_MAX_COORD, 1);
  450|      1|}
extract.c:vips_extract_band_build:
  382|  10.5k|{
  383|  10.5k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  10.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  10.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  10.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|  10.5k|	VipsBandary *bandary = (VipsBandary *) object;
  385|  10.5k|	VipsExtractBand *extract = (VipsExtractBand *) object;
  386|       |
  387|  10.5k|	if (extract->in) {
  ------------------
  |  Branch (387:6): [True: 10.5k, False: 0]
  ------------------
  388|  10.5k|		int bands;
  389|       |
  390|  10.5k|		vips_image_decode_predict(extract->in, &bands, NULL);
  391|       |
  392|  10.5k|		bandary->n = 1;
  393|  10.5k|		bandary->in = &extract->in;
  394|  10.5k|		bandary->out_bands = extract->n;
  395|       |
  396|  10.5k|		if (extract->band + extract->n > bands) {
  ------------------
  |  Branch (396:7): [True: 0, False: 10.5k]
  ------------------
  397|      0|			vips_error(class->nickname,
  398|      0|				"%s", _("bad extract band"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  399|      0|			return -1;
  400|      0|		}
  401|       |
  402|  10.5k|		if (extract->band == 0 &&
  ------------------
  |  Branch (402:7): [True: 10.5k, False: 0]
  ------------------
  403|  10.5k|			extract->n == bands)
  ------------------
  |  Branch (403:4): [True: 0, False: 10.5k]
  ------------------
  404|      0|			return vips_bandary_copy(bandary);
  405|  10.5k|	}
  406|       |
  407|  10.5k|	if (VIPS_OBJECT_CLASS(vips_extract_band_parent_class)->build(object))
  ------------------
  |  |  435|  10.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  10.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  10.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (407:6): [True: 0, False: 10.5k]
  ------------------
  408|      0|		return -1;
  409|       |
  410|  10.5k|	return 0;
  411|  10.5k|}
extract.c:vips_extract_band_buffer:
  348|   124k|{
  349|   124k|	VipsBandary *bandary = seq->bandary;
  350|   124k|	VipsConversion *conversion = (VipsConversion *) bandary;
  351|   124k|	VipsExtractBand *extract = (VipsExtractBand *) bandary;
  352|   124k|	VipsImage *im = bandary->ready[0];
  353|   124k|	int es = VIPS_IMAGE_SIZEOF_ELEMENT(im);
  ------------------
  |  |  382|   124k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  ------------------
  354|   124k|	int ips = VIPS_IMAGE_SIZEOF_PEL(im);
  ------------------
  |  |  384|   124k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   124k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  355|   124k|	const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out);
  ------------------
  |  |  384|   124k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   124k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  356|       |
  357|   124k|	VipsPel *restrict p;
  358|   124k|	VipsPel *restrict q;
  359|   124k|	int x, z;
  360|       |
  361|   124k|	p = in[0] + extract->band * es;
  362|   124k|	q = out;
  363|   124k|	if (ops == 1) {
  ------------------
  |  Branch (363:6): [True: 97.5k, False: 27.4k]
  ------------------
  364|  4.67M|		for (x = 0; x < width; x++) {
  ------------------
  |  Branch (364:15): [True: 4.57M, False: 97.5k]
  ------------------
  365|  4.57M|			q[x] = p[0];
  366|  4.57M|			p += ips;
  367|  4.57M|		}
  368|  97.5k|	}
  369|  27.4k|	else {
  370|   780k|		for (x = 0; x < width; x++) {
  ------------------
  |  Branch (370:15): [True: 752k, False: 27.4k]
  ------------------
  371|  2.96M|			for (z = 0; z < ops; z++)
  ------------------
  |  Branch (371:16): [True: 2.21M, False: 752k]
  ------------------
  372|  2.21M|				q[z] = p[z];
  373|       |
  374|   752k|			p += ips;
  375|   752k|			q += ops;
  376|   752k|		}
  377|  27.4k|	}
  378|   124k|}
extract.c:vips_extract_band_init:
  454|  10.5k|{
  455|  10.5k|	extract->n = 1;
  456|  10.5k|}

falsecolour.c:vips_falsecolour_class_init:
  365|      1|{
  366|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  369|       |
  370|      1|	gobject_class->set_property = vips_object_set_property;
  371|      1|	gobject_class->get_property = vips_object_get_property;
  372|       |
  373|      1|	vobject_class->nickname = "falsecolour";
  374|      1|	vobject_class->description = _("false-color an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	vobject_class->build = vips_falsecolour_build;
  376|       |
  377|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  378|       |
  379|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  380|      1|		_("Input"),
  381|      1|		_("Input image"),
  382|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  383|      1|		G_STRUCT_OFFSET(VipsFalsecolour, in));
  384|      1|}

vips_flatten:
  477|  1.08k|{
  478|  1.08k|	va_list ap;
  479|  1.08k|	int result;
  480|       |
  481|  1.08k|	va_start(ap, out);
  482|  1.08k|	result = vips_call_split("flatten", ap, in, out);
  483|  1.08k|	va_end(ap);
  484|       |
  485|  1.08k|	return result;
  486|  1.08k|}
flatten.c:vips_flatten_class_init:
  402|      1|{
  403|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  406|       |
  407|      1|	VIPS_DEBUG_MSG("vips_flatten_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|       |
  409|      1|	gobject_class->set_property = vips_object_set_property;
  410|      1|	gobject_class->get_property = vips_object_get_property;
  411|       |
  412|      1|	vobject_class->nickname = "flatten";
  413|      1|	vobject_class->description = _("flatten alpha out of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  414|      1|	vobject_class->build = vips_flatten_build;
  415|       |
  416|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  417|       |
  418|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  419|      1|		_("Input"),
  420|      1|		_("Input image"),
  421|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  422|      1|		G_STRUCT_OFFSET(VipsFlatten, in));
  423|       |
  424|      1|	VIPS_ARG_BOXED(class, "background", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  425|      1|		_("Background"),
  426|      1|		_("Background value"),
  427|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  428|      1|		G_STRUCT_OFFSET(VipsFlatten, background),
  429|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  430|       |
  431|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  432|      1|		_("Maximum alpha"),
  433|      1|		_("Maximum value of alpha channel"),
  434|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  435|      1|		G_STRUCT_OFFSET(VipsFlatten, max_alpha),
  436|      1|		0, 100000000, 255);
  437|      1|}
flatten.c:vips_flatten_build:
  297|  1.08k|{
  298|  1.08k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.08k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.08k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.08k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|  1.08k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  1.08k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.08k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.08k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  1.08k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  300|  1.08k|	VipsFlatten *flatten = (VipsFlatten *) object;
  301|  1.08k|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 4);
  302|       |
  303|  1.08k|	VipsImage *in;
  304|  1.08k|	int i;
  305|  1.08k|	gboolean black;
  306|  1.08k|	VipsBandFormat original_format;
  307|       |
  308|  1.08k|	if (VIPS_OBJECT_CLASS(vips_flatten_parent_class)->build(object))
  ------------------
  |  |  435|  1.08k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.08k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.08k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (308:6): [True: 0, False: 1.08k]
  ------------------
  309|      0|		return -1;
  310|       |
  311|  1.08k|	in = flatten->in;
  312|       |
  313|  1.08k|	if (vips_image_decode(in, &t[0]))
  ------------------
  |  Branch (313:6): [True: 0, False: 1.08k]
  ------------------
  314|      0|		return -1;
  315|  1.08k|	in = t[0];
  316|       |
  317|       |	/* Trivial case: fall back to copy().
  318|       |	 */
  319|  1.08k|	if (in->Bands == 1)
  ------------------
  |  Branch (319:6): [True: 0, False: 1.08k]
  ------------------
  320|      0|		return vips_image_write(in, conversion->out);
  321|       |
  322|  1.08k|	if (vips_check_noncomplex(class->nickname, in))
  ------------------
  |  Branch (322:6): [True: 0, False: 1.08k]
  ------------------
  323|      0|		return -1;
  324|       |
  325|       |	/* Is max-alpha unset? Default to the correct value for this
  326|       |	 * interpretation.
  327|       |	 */
  328|  1.08k|	if (!vips_object_argument_isset(object, "max_alpha"))
  ------------------
  |  Branch (328:6): [True: 1.08k, False: 0]
  ------------------
  329|  1.08k|		flatten->max_alpha = vips_interpretation_max_alpha(in->Type); // FIXME: Invalidates operation cache
  330|       |
  331|       |	/* Is max_alpha less than the numeric range of this image? If it is,
  332|       |	 * we can get int overflow.
  333|       |	 *
  334|       |	 * This is not a common case, so efficiency is not so important.
  335|       |	 * Cast to double, then cast back to the input type right at the end.
  336|       |	 */
  337|  1.08k|	original_format = VIPS_FORMAT_NOTSET;
  338|  1.08k|	if (vips_band_format_isint(in->BandFmt) &&
  ------------------
  |  Branch (338:6): [True: 1.06k, False: 16]
  ------------------
  339|  1.08k|		flatten->max_alpha <
  ------------------
  |  Branch (339:3): [True: 132, False: 937]
  ------------------
  340|  1.06k|			vips_image_get_format_max(in->BandFmt)) {
  341|    132|		original_format = in->BandFmt;
  342|    132|		if (vips_cast(in, &t[1], VIPS_FORMAT_DOUBLE, NULL))
  ------------------
  |  Branch (342:7): [True: 0, False: 132]
  ------------------
  343|      0|			return -1;
  344|    132|		in = t[1];
  345|    132|	}
  346|       |
  347|  1.08k|	t[2] = vips_image_new();
  348|  1.08k|	if (vips_image_pipelinev(t[2],
  ------------------
  |  Branch (348:6): [True: 0, False: 1.08k]
  ------------------
  349|  1.08k|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL))
  350|      0|		return -1;
  351|  1.08k|	t[2]->Bands -= 1;
  352|       |
  353|       |	/* Is the background black? We have a special path for this.
  354|       |	 */
  355|  1.08k|	black = TRUE;
  ------------------
  |  |  798|  1.08k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.08k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  356|  2.17k|	for (i = 0; i < VIPS_AREA(flatten->background)->n; i++) {
  ------------------
  |  |  137|  2.17k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  |  Branch (356:14): [True: 1.08k, False: 1.08k]
  ------------------
  357|  1.08k|		const double *background =
  358|  1.08k|			vips_array_double_get(flatten->background, NULL);
  359|       |
  360|  1.08k|		if (background[i] != 0.0) {
  ------------------
  |  Branch (360:7): [True: 0, False: 1.08k]
  ------------------
  361|      0|			black = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  362|      0|			break;
  363|      0|		}
  364|  1.08k|	}
  365|       |
  366|  1.08k|	if (black) {
  ------------------
  |  Branch (366:6): [True: 1.08k, False: 0]
  ------------------
  367|  1.08k|		if (vips_image_generate(t[2],
  ------------------
  |  Branch (367:7): [True: 0, False: 1.08k]
  ------------------
  368|  1.08k|				vips_start_one, vips_flatten_black_gen, vips_stop_one,
  369|  1.08k|				in, flatten))
  370|      0|			return -1;
  371|  1.08k|		in = t[2];
  372|  1.08k|	}
  373|      0|	else {
  374|       |		/* Convert the background to the image's format.
  375|       |		 */
  376|      0|		if (!(flatten->ink = vips__vector_to_ink(class->nickname, t[2],
  ------------------
  |  Branch (376:7): [True: 0, False: 0]
  ------------------
  377|      0|				  VIPS_AREA(flatten->background)->data, NULL,
  ------------------
  |  |  137|      0|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  378|      0|				  VIPS_AREA(flatten->background)->n)))
  ------------------
  |  |  137|      0|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  379|      0|			return -1;
  380|       |
  381|      0|		if (vips_image_generate(t[2],
  ------------------
  |  Branch (381:7): [True: 0, False: 0]
  ------------------
  382|      0|				vips_start_one, vips_flatten_gen, vips_stop_one,
  383|      0|				in, flatten))
  384|      0|			return -1;
  385|      0|		in = t[2];
  386|      0|	}
  387|       |
  388|  1.08k|	if (original_format != VIPS_FORMAT_NOTSET) {
  ------------------
  |  Branch (388:6): [True: 132, False: 953]
  ------------------
  389|    132|		if (vips_cast(in, &t[3], original_format, NULL))
  ------------------
  |  Branch (389:7): [True: 0, False: 132]
  ------------------
  390|      0|			return -1;
  391|    132|		in = t[3];
  392|    132|	}
  393|       |
  394|  1.08k|	if (vips_image_write(in, conversion->out))
  ------------------
  |  Branch (394:6): [True: 0, False: 1.08k]
  ------------------
  395|      0|		return -1;
  396|       |
  397|  1.08k|	return 0;
  398|  1.08k|}
flatten.c:vips_flatten_black_gen:
  170|    621|{
  171|    621|	VipsRegion *ir = (VipsRegion *) vseq;
  172|    621|	VipsFlatten *flatten = (VipsFlatten *) b;
  173|    621|	VipsRect *r = &out_region->valid;
  174|    621|	int width = r->width;
  175|    621|	int bands = ir->im->Bands;
  176|    621|	double max_alpha = flatten->max_alpha;
  177|       |
  178|    621|	int x, y;
  179|       |
  180|    621|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (180:6): [True: 53, False: 568]
  ------------------
  181|     53|		return -1;
  182|       |
  183|  7.55k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (183:14): [True: 6.98k, False: 568]
  ------------------
  184|  6.98k|		VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  6.98k|	((R)->data + \
  |  |  228|  6.98k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  6.98k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  6.98k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  6.98k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  6.98k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  6.98k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|  6.98k|		VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  6.98k|	((R)->data + \
  |  |  228|  6.98k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  6.98k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  6.98k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  6.98k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  6.98k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  6.98k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|       |
  187|  6.98k|		switch (ir->im->BandFmt) {
  188|  1.21k|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (188:3): [True: 1.21k, False: 5.76k]
  ------------------
  189|  1.21k|			VIPS_FLATTEN_BLACK_INT(unsigned char);
  ------------------
  |  |   89|  1.21k|	{ \
  |  |   90|  1.21k|		TYPE *restrict p = (TYPE *) in; \
  |  |   91|  1.21k|		TYPE *restrict q = (TYPE *) out; \
  |  |   92|  1.21k|\
  |  |   93|  57.8k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (93:15): [True: 56.6k, False: 1.21k]
  |  |  ------------------
  |  |   94|  56.6k|			TYPE alpha = p[bands - 1]; \
  |  |   95|  56.6k|			int b; \
  |  |   96|  56.6k|\
  |  |   97|   113k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (97:16): [True: 56.6k, False: 56.6k]
  |  |  ------------------
  |  |   98|  56.6k|				q[b] = (p[b] * alpha) / max_alpha; \
  |  |   99|  56.6k|\
  |  |  100|  56.6k|			p += bands; \
  |  |  101|  56.6k|			q += bands - 1; \
  |  |  102|  56.6k|		} \
  |  |  103|  1.21k|	}
  ------------------
  190|  1.21k|			break;
  191|       |
  192|    189|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (192:3): [True: 189, False: 6.79k]
  ------------------
  193|    189|			VIPS_FLATTEN_BLACK_INT(signed char);
  ------------------
  |  |   89|    189|	{ \
  |  |   90|    189|		TYPE *restrict p = (TYPE *) in; \
  |  |   91|    189|		TYPE *restrict q = (TYPE *) out; \
  |  |   92|    189|\
  |  |   93|  3.38k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (93:15): [True: 3.19k, False: 189]
  |  |  ------------------
  |  |   94|  3.19k|			TYPE alpha = p[bands - 1]; \
  |  |   95|  3.19k|			int b; \
  |  |   96|  3.19k|\
  |  |   97|  6.39k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (97:16): [True: 3.19k, False: 3.19k]
  |  |  ------------------
  |  |   98|  3.19k|				q[b] = (p[b] * alpha) / max_alpha; \
  |  |   99|  3.19k|\
  |  |  100|  3.19k|			p += bands; \
  |  |  101|  3.19k|			q += bands - 1; \
  |  |  102|  3.19k|		} \
  |  |  103|    189|	}
  ------------------
  194|    189|			break;
  195|       |
  196|  2.61k|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (196:3): [True: 2.61k, False: 4.37k]
  ------------------
  197|  2.61k|			VIPS_FLATTEN_BLACK_FLOAT(unsigned short);
  ------------------
  |  |  109|  2.61k|	{ \
  |  |  110|  2.61k|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|  2.61k|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|  2.61k|\
  |  |  113|   101k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 99.2k, False: 2.61k]
  |  |  ------------------
  |  |  114|  99.2k|			TYPE alpha = p[bands - 1]; \
  |  |  115|  99.2k|			int b; \
  |  |  116|  99.2k|\
  |  |  117|   198k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 99.2k, False: 99.2k]
  |  |  ------------------
  |  |  118|  99.2k|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|  99.2k|\
  |  |  120|  99.2k|			p += bands; \
  |  |  121|  99.2k|			q += bands - 1; \
  |  |  122|  99.2k|		} \
  |  |  123|  2.61k|	}
  ------------------
  198|  2.61k|			break;
  199|       |
  200|    314|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (200:3): [True: 314, False: 6.66k]
  ------------------
  201|    314|			VIPS_FLATTEN_BLACK_FLOAT(signed short);
  ------------------
  |  |  109|    314|	{ \
  |  |  110|    314|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|    314|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|    314|\
  |  |  113|  5.62k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 5.31k, False: 314]
  |  |  ------------------
  |  |  114|  5.31k|			TYPE alpha = p[bands - 1]; \
  |  |  115|  5.31k|			int b; \
  |  |  116|  5.31k|\
  |  |  117|  10.6k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 5.31k, False: 5.31k]
  |  |  ------------------
  |  |  118|  5.31k|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|  5.31k|\
  |  |  120|  5.31k|			p += bands; \
  |  |  121|  5.31k|			q += bands - 1; \
  |  |  122|  5.31k|		} \
  |  |  123|    314|	}
  ------------------
  202|    314|			break;
  203|       |
  204|      0|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (204:3): [True: 0, False: 6.98k]
  ------------------
  205|      0|			VIPS_FLATTEN_BLACK_FLOAT(unsigned int);
  ------------------
  |  |  109|      0|	{ \
  |  |  110|      0|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|      0|\
  |  |  113|      0|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  114|      0|			TYPE alpha = p[bands - 1]; \
  |  |  115|      0|			int b; \
  |  |  116|      0|\
  |  |  117|      0|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  118|      0|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|      0|\
  |  |  120|      0|			p += bands; \
  |  |  121|      0|			q += bands - 1; \
  |  |  122|      0|		} \
  |  |  123|      0|	}
  ------------------
  206|      0|			break;
  207|       |
  208|      0|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (208:3): [True: 0, False: 6.98k]
  ------------------
  209|      0|			VIPS_FLATTEN_BLACK_FLOAT(signed int);
  ------------------
  |  |  109|      0|	{ \
  |  |  110|      0|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|      0|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|      0|\
  |  |  113|      0|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  114|      0|			TYPE alpha = p[bands - 1]; \
  |  |  115|      0|			int b; \
  |  |  116|      0|\
  |  |  117|      0|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  118|      0|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|      0|\
  |  |  120|      0|			p += bands; \
  |  |  121|      0|			q += bands - 1; \
  |  |  122|      0|		} \
  |  |  123|      0|	}
  ------------------
  210|      0|			break;
  211|       |
  212|    255|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (212:3): [True: 255, False: 6.72k]
  ------------------
  213|    255|			VIPS_FLATTEN_BLACK_FLOAT(float);
  ------------------
  |  |  109|    255|	{ \
  |  |  110|    255|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|    255|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|    255|\
  |  |  113|  3.08k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 2.82k, False: 255]
  |  |  ------------------
  |  |  114|  2.82k|			TYPE alpha = p[bands - 1]; \
  |  |  115|  2.82k|			int b; \
  |  |  116|  2.82k|\
  |  |  117|  5.65k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 2.82k, False: 2.82k]
  |  |  ------------------
  |  |  118|  2.82k|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|  2.82k|\
  |  |  120|  2.82k|			p += bands; \
  |  |  121|  2.82k|			q += bands - 1; \
  |  |  122|  2.82k|		} \
  |  |  123|    255|	}
  ------------------
  214|    255|			break;
  215|       |
  216|  2.39k|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (216:3): [True: 2.39k, False: 4.58k]
  ------------------
  217|  2.39k|			VIPS_FLATTEN_BLACK_FLOAT(double);
  ------------------
  |  |  109|  2.39k|	{ \
  |  |  110|  2.39k|		TYPE *restrict p = (TYPE *) in; \
  |  |  111|  2.39k|		TYPE *restrict q = (TYPE *) out; \
  |  |  112|  2.39k|\
  |  |  113|  32.6k|		for (x = 0; x < width; x++) { \
  |  |  ------------------
  |  |  |  Branch (113:15): [True: 30.3k, False: 2.39k]
  |  |  ------------------
  |  |  114|  30.3k|			TYPE alpha = p[bands - 1]; \
  |  |  115|  30.3k|			int b; \
  |  |  116|  30.3k|\
  |  |  117|  60.6k|			for (b = 0; b < bands - 1; b++) \
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 30.3k, False: 30.3k]
  |  |  ------------------
  |  |  118|  30.3k|				q[b] = ((double) p[b] * alpha) / max_alpha; \
  |  |  119|  30.3k|\
  |  |  120|  30.3k|			p += bands; \
  |  |  121|  30.3k|			q += bands - 1; \
  |  |  122|  30.3k|		} \
  |  |  123|  2.39k|	}
  ------------------
  218|  2.39k|			break;
  219|       |
  220|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (220:3): [True: 0, False: 6.98k]
  ------------------
  221|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (221:3): [True: 0, False: 6.98k]
  ------------------
  222|      0|		default:
  ------------------
  |  Branch (222:3): [True: 0, False: 6.98k]
  ------------------
  223|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|  6.98k|		}
  225|  6.98k|	}
  226|       |
  227|    568|	return 0;
  228|    568|}
flatten.c:vips_flatten_init:
  441|  1.08k|{
  442|  1.08k|	flatten->background = vips_array_double_newv(1, 0.0);
  443|  1.08k|	flatten->max_alpha = 255.0;
  444|  1.08k|}

flip.c:vips_flip_class_init:
  226|      1|{
  227|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|       |
  230|      1|	VIPS_DEBUG_MSG("vips_flip_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|      1|	gobject_class->set_property = vips_object_set_property;
  233|      1|	gobject_class->get_property = vips_object_get_property;
  234|       |
  235|      1|	vobject_class->nickname = "flip";
  236|      1|	vobject_class->description = _("flip an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|      1|	vobject_class->build = vips_flip_build;
  238|       |
  239|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  240|      1|		_("Input"),
  241|      1|		_("Input image"),
  242|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  243|      1|		G_STRUCT_OFFSET(VipsFlip, in));
  244|       |
  245|      1|	VIPS_ARG_ENUM(class, "direction", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  246|      1|		_("Direction"),
  247|      1|		_("Direction to flip image"),
  248|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsFlip, direction),
  250|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  251|      1|}

gamma.c:vips_gamma_class_init:
  127|      1|{
  128|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "gamma";
  136|      1|	vobject_class->description = _("gamma an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_gamma_build;
  138|       |
  139|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  140|       |
  141|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  142|      1|		_("Input"),
  143|      1|		_("Input image"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsGamma, in));
  146|       |
  147|      1|	VIPS_ARG_DOUBLE(class, "exponent", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  148|      1|		_("Exponent"),
  149|      1|		_("Gamma factor"),
  150|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsGamma, exponent),
  152|      1|		0.000001, 1000.0, 1.0 / 2.4);
  153|      1|}

grid.c:vips_grid_class_init:
  187|      1|{
  188|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|      1|	gobject_class->set_property = vips_object_set_property;
  192|      1|	gobject_class->get_property = vips_object_get_property;
  193|       |
  194|      1|	vobject_class->nickname = "grid";
  195|      1|	vobject_class->description = _("grid an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|      1|	vobject_class->build = vips_grid_build;
  197|       |
  198|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  199|      1|		_("Input"),
  200|      1|		_("Input image"),
  201|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsGrid, in));
  203|       |
  204|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  205|      1|		_("Tile height"),
  206|      1|		_("Chop into tiles this high"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsGrid, tile_height),
  209|      1|		1, 10000000, 128);
  210|       |
  211|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  212|      1|		_("Across"),
  213|      1|		_("Number of tiles across"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsGrid, across),
  216|      1|		1, 10000000, 1);
  217|       |
  218|      1|	VIPS_ARG_INT(class, "down", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  219|      1|		_("Down"),
  220|      1|		_("Number of tiles down"),
  221|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsGrid, down),
  223|      1|		1, 10000000, 1);
  224|      1|}

ifthenelse.c:vips_ifthenelse_class_init:
  515|      1|{
  516|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|       |
  519|      1|	VIPS_DEBUG_MSG("vips_ifthenelse_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|       |
  521|      1|	gobject_class->set_property = vips_object_set_property;
  522|      1|	gobject_class->get_property = vips_object_get_property;
  523|       |
  524|      1|	vobject_class->nickname = "ifthenelse";
  525|      1|	vobject_class->description = _("ifthenelse an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  526|      1|	vobject_class->build = vips_ifthenelse_build;
  527|       |
  528|      1|	VIPS_ARG_IMAGE(class, "cond", -2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  529|      1|		_("Condition"),
  530|      1|		_("Condition input image"),
  531|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  532|      1|		G_STRUCT_OFFSET(VipsIfthenelse, cond));
  533|       |
  534|      1|	VIPS_ARG_IMAGE(class, "in1", -1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  535|      1|		_("Then image"),
  536|      1|		_("Source for TRUE pixels"),
  537|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  538|      1|		G_STRUCT_OFFSET(VipsIfthenelse, in1));
  539|       |
  540|      1|	VIPS_ARG_IMAGE(class, "in2", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  541|      1|		_("Else image"),
  542|      1|		_("Source for FALSE pixels"),
  543|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  544|      1|		G_STRUCT_OFFSET(VipsIfthenelse, in2));
  545|       |
  546|      1|	VIPS_ARG_BOOL(class, "blend", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  547|      1|		_("Blend"),
  548|      1|		_("Blend smoothly between then and else parts"),
  549|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  550|      1|		G_STRUCT_OFFSET(VipsIfthenelse, blend),
  551|      1|		FALSE);
  552|      1|}

vips__vector_to_pels:
  248|     27|{
  249|       |	/* Run our pipeline relative to this.
  250|       |	 */
  251|     27|	VipsImage *context = vips_image_new();
  252|       |
  253|     27|	VipsImage **t = (VipsImage **)
  254|     27|		vips_object_local_array(VIPS_OBJECT(context), 8);
  ------------------
  |  |  433|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|       |
  256|     27|	VipsImage *in;
  257|     27|	double *ones;
  258|     27|	VipsPel *result;
  259|     27|	int i;
  260|       |
  261|       |#ifdef VIPS_DEBUG
  262|       |	printf("vips__vector_to_pels: starting\n");
  263|       |#endif /*VIPS_DEBUG*/
  264|       |
  265|     27|	ones = VIPS_ARRAY(context, n, double);
  ------------------
  |  |   72|     27|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     27|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|     54|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (266:14): [True: 27, False: 27]
  ------------------
  267|     27|		ones[i] = 1.0;
  268|       |
  269|       |	/* Make the real and imaginary parts.
  270|       |	 */
  271|     27|	if (vips_black(&t[0], 1, 1, "bands", bands, NULL) ||
  ------------------
  |  Branch (271:6): [True: 0, False: 27]
  ------------------
  272|     27|		vips_linear(t[0], &t[1], ones, real, n, NULL)) {
  ------------------
  |  Branch (272:3): [True: 0, False: 27]
  ------------------
  273|      0|		g_object_unref(context);
  274|      0|		return NULL;
  275|      0|	}
  276|     27|	in = t[1];
  277|       |
  278|     27|	if (imag) {
  ------------------
  |  Branch (278:6): [True: 0, False: 27]
  ------------------
  279|      0|		if (vips_black(&t[2], 1, 1, "bands", bands, NULL) ||
  ------------------
  |  Branch (279:7): [True: 0, False: 0]
  ------------------
  280|      0|			vips_linear(t[2], &t[3], ones, imag, n, NULL) ||
  ------------------
  |  Branch (280:4): [True: 0, False: 0]
  ------------------
  281|      0|			vips_complexform(in, t[3], &t[4], NULL)) {
  ------------------
  |  Branch (281:4): [True: 0, False: 0]
  ------------------
  282|      0|			g_object_unref(context);
  283|      0|			return NULL;
  284|      0|		}
  285|      0|		in = t[4];
  286|      0|	}
  287|       |
  288|       |	/* Cast to the output type and coding.
  289|       |	 */
  290|     27|	if (vips_cast(in, &t[5], format, NULL) ||
  ------------------
  |  Branch (290:6): [True: 0, False: 27]
  ------------------
  291|     27|		vips_image_encode(t[5], &t[6], coding)) {
  ------------------
  |  Branch (291:3): [True: 0, False: 27]
  ------------------
  292|      0|		g_object_unref(context);
  293|      0|		return NULL;
  294|      0|	}
  295|     27|	in = t[6];
  296|       |
  297|       |	/* Write to memory, copy to output buffer.
  298|       |	 */
  299|     27|	vips_image_set_int(in, "hide-progress", 1);
  300|     27|	if (!(t[7] = vips_image_new_memory()) ||
  ------------------
  |  Branch (300:6): [True: 0, False: 27]
  ------------------
  301|     27|		vips_image_write(in, t[7])) {
  ------------------
  |  Branch (301:3): [True: 0, False: 27]
  ------------------
  302|      0|		g_object_unref(context);
  303|      0|		return NULL;
  304|      0|	}
  305|     27|	in = t[7];
  306|       |
  307|     27|	if (!(result =
  ------------------
  |  Branch (307:6): [True: 0, False: 27]
  ------------------
  308|     27|				VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_PEL(in), VipsPel))) {
  ------------------
  |  |   72|     27|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     27|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     27|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     27|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     27|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      0|		g_object_unref(context);
  310|      0|		return NULL;
  311|      0|	}
  312|       |
  313|     27|	memcpy(result, in->data, VIPS_IMAGE_SIZEOF_PEL(in));
  ------------------
  |  |  384|     27|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|     27|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  314|       |
  315|       |#ifdef VIPS_DEBUG
  316|       |	{
  317|       |		int i;
  318|       |
  319|       |		printf("vips__vector_to_ink:\n");
  320|       |		printf("\t(real, imag) = ");
  321|       |		for (i = 0; i < n; i++)
  322|       |			printf("(%g, %g) ", real[i], imag ? imag[i] : 0);
  323|       |		printf("\n");
  324|       |		printf("\tink = ");
  325|       |		for (i = 0; i < VIPS_IMAGE_SIZEOF_PEL(in); i++)
  326|       |			printf("%d ", result[i]);
  327|       |		printf("\n");
  328|       |	}
  329|       |#endif /*VIPS_DEBUG*/
  330|       |
  331|     27|	g_object_unref(context);
  332|       |
  333|     27|	return result;
  334|     27|}
vips__vector_to_ink:
  348|     27|{
  349|     27|	int bands;
  350|     27|	VipsBandFormat format;
  351|     27|	VipsPel *result;
  352|       |
  353|     27|	vips_image_decode_predict(im, &bands, &format);
  354|       |
  355|     27|	if (!(result = vips__vector_to_pels(domain,
  ------------------
  |  Branch (355:6): [True: 0, False: 27]
  ------------------
  356|     27|			  bands, format, im->Coding, real, imag, n)))
  357|      0|		return NULL;
  358|       |
  359|     27|	g_signal_connect(im, "postclose",
  ------------------
  |  |  491|     27|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  360|     27|		G_CALLBACK(vips__vector_to_ink_cb), result);
  361|       |
  362|     27|	return result;
  363|     27|}
insert.c:vips_insert_class_init:
  448|      1|{
  449|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  452|       |
  453|      1|	VIPS_DEBUG_MSG("vips_insert_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|      1|	gobject_class->set_property = vips_object_set_property;
  456|      1|	gobject_class->get_property = vips_object_get_property;
  457|       |
  458|      1|	vobject_class->nickname = "insert";
  459|      1|	vobject_class->description =
  460|      1|		_("insert image @sub into @main at @x, @y");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  461|      1|	vobject_class->build = vips_insert_build;
  462|       |
  463|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  464|       |
  465|      1|	VIPS_ARG_IMAGE(class, "main", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  466|      1|		_("Main"),
  467|      1|		_("Main input image"),
  468|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  469|      1|		G_STRUCT_OFFSET(VipsInsert, main));
  470|       |
  471|      1|	VIPS_ARG_IMAGE(class, "sub", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  472|      1|		_("Sub-image"),
  473|      1|		_("Sub-image to insert into main image"),
  474|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  475|      1|		G_STRUCT_OFFSET(VipsInsert, sub));
  476|       |
  477|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  478|      1|		_("X"),
  479|      1|		_("Left edge of sub in main"),
  480|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  481|      1|		G_STRUCT_OFFSET(VipsInsert, x),
  482|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  483|       |
  484|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  485|      1|		_("Y"),
  486|      1|		_("Top edge of sub in main"),
  487|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  488|      1|		G_STRUCT_OFFSET(VipsInsert, y),
  489|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  490|       |
  491|      1|	VIPS_ARG_BOOL(class, "expand", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  492|      1|		_("Expand"),
  493|      1|		_("Expand output to hold all of both inputs"),
  494|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  495|      1|		G_STRUCT_OFFSET(VipsInsert, expand),
  496|      1|		FALSE);
  497|       |
  498|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  499|      1|		_("Background"),
  500|      1|		_("Color for new pixels"),
  501|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  502|      1|		G_STRUCT_OFFSET(VipsInsert, background),
  503|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  504|      1|}
insert.c:vips__vector_to_ink_cb:
  338|     25|{
  339|     25|	g_free(buf);
  340|     25|}

join.c:vips_join_class_init:
  220|      1|{
  221|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  224|       |
  225|      1|	VIPS_DEBUG_MSG("vips_join_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|       |
  227|      1|	gobject_class->set_property = vips_object_set_property;
  228|      1|	gobject_class->get_property = vips_object_get_property;
  229|       |
  230|      1|	vobject_class->nickname = "join";
  231|      1|	vobject_class->description = _("join a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  232|      1|	vobject_class->build = vips_join_build;
  233|       |
  234|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  235|       |
  236|      1|	VIPS_ARG_IMAGE(class, "in1", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  237|      1|		_("in1"),
  238|      1|		_("First input image"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  240|      1|		G_STRUCT_OFFSET(VipsJoin, in1));
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "in2", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("in2"),
  244|      1|		_("Second input image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  246|      1|		G_STRUCT_OFFSET(VipsJoin, in2));
  247|       |
  248|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  249|      1|		_("Direction"),
  250|      1|		_("Join left-right or up-down"),
  251|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsJoin, direction),
  253|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  254|       |
  255|      1|	VIPS_ARG_BOOL(class, "expand", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  256|      1|		_("Expand"),
  257|      1|		_("Expand output to hold all of both inputs"),
  258|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  259|      1|		G_STRUCT_OFFSET(VipsJoin, expand),
  260|      1|		FALSE);
  261|       |
  262|      1|	VIPS_ARG_INT(class, "shim", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  263|      1|		_("Shim"),
  264|      1|		_("Pixels between images"),
  265|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsJoin, shim),
  267|      1|		0, 1000000, 0);
  268|       |
  269|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  270|      1|		_("Background"),
  271|      1|		_("Colour for new pixels"),
  272|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsJoin, background),
  274|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  275|       |
  276|      1|	VIPS_ARG_ENUM(class, "align", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  277|      1|		_("Align"),
  278|      1|		_("Align on the low, centre or high coordinate edge"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsJoin, align),
  281|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  282|      1|}

msb.c:vips_msb_class_init:
  231|      1|{
  232|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  235|       |
  236|      1|	gobject_class->set_property = vips_object_set_property;
  237|      1|	gobject_class->get_property = vips_object_get_property;
  238|       |
  239|      1|	vobject_class->nickname = "msb";
  240|      1|	vobject_class->description =
  241|      1|		_("pick most-significant byte from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  242|      1|	vobject_class->build = vips_msb_build;
  243|       |
  244|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  245|       |
  246|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  247|      1|		_("Input"),
  248|      1|		_("Input image"),
  249|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  250|      1|		G_STRUCT_OFFSET(VipsMsb, in));
  251|       |
  252|      1|	VIPS_ARG_INT(class, "band", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  253|      1|		_("Band"),
  254|      1|		_("Band to msb"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsMsb, band),
  257|      1|		-1, 100000000, -1);
  258|      1|}

premultiply.c:vips_premultiply_class_init:
  244|      1|{
  245|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  248|       |
  249|      1|	VIPS_DEBUG_MSG("vips_premultiply_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|       |
  251|      1|	gobject_class->set_property = vips_object_set_property;
  252|      1|	gobject_class->get_property = vips_object_get_property;
  253|       |
  254|      1|	vobject_class->nickname = "premultiply";
  255|      1|	vobject_class->description = _("premultiply image alpha");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  256|      1|	vobject_class->build = vips_premultiply_build;
  257|       |
  258|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  259|       |
  260|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  261|      1|		_("Input"),
  262|      1|		_("Input image"),
  263|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsPremultiply, in));
  265|       |
  266|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  267|      1|		_("Maximum alpha"),
  268|      1|		_("Maximum value of alpha channel"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsPremultiply, max_alpha),
  271|      1|		0, 100000000, 255);
  272|      1|}

recomb.c:vips_recomb_class_init:
  209|      1|{
  210|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  212|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  213|       |
  214|      1|	gobject_class->set_property = vips_object_set_property;
  215|      1|	gobject_class->get_property = vips_object_get_property;
  216|       |
  217|      1|	object_class->nickname = "recomb";
  218|      1|	object_class->description = _("linear recombination with matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  219|      1|	object_class->build = vips_recomb_build;
  220|       |
  221|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  222|       |
  223|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  224|      1|		_("Input"),
  225|      1|		_("Input image argument"),
  226|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  227|      1|		G_STRUCT_OFFSET(VipsRecomb, in));
  228|       |
  229|      1|	VIPS_ARG_IMAGE(class, "m", 102,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  230|      1|		_("M"),
  231|      1|		_("Matrix of coefficients"),
  232|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  233|      1|		G_STRUCT_OFFSET(VipsRecomb, m));
  234|      1|}

replicate.c:vips_replicate_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|       |
  186|      1|	VIPS_DEBUG_MSG("vips_replicate_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|       |
  188|      1|	gobject_class->set_property = vips_object_set_property;
  189|      1|	gobject_class->get_property = vips_object_get_property;
  190|       |
  191|      1|	vobject_class->nickname = "replicate";
  192|      1|	vobject_class->description = _("replicate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	vobject_class->build = vips_replicate_build;
  194|       |
  195|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  196|      1|		_("Input"),
  197|      1|		_("Input image"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsReplicate, in));
  200|       |
  201|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  202|      1|		_("Across"),
  203|      1|		_("Repeat this many times horizontally"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsReplicate, across),
  206|      1|		1, 1000000, 1);
  207|       |
  208|      1|	VIPS_ARG_INT(class, "down", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  209|      1|		_("Down"),
  210|      1|		_("Repeat this many times vertically"),
  211|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  212|      1|		G_STRUCT_OFFSET(VipsReplicate, down),
  213|      1|		1, 1000000, 1);
  214|      1|}

rot.c:vips_rot_class_init:
  351|      1|{
  352|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|       |
  355|      1|	VIPS_DEBUG_MSG("vips_rot_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|       |
  357|      1|	gobject_class->set_property = vips_object_set_property;
  358|      1|	gobject_class->get_property = vips_object_get_property;
  359|       |
  360|      1|	vobject_class->nickname = "rot";
  361|      1|	vobject_class->description = _("rotate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  362|      1|	vobject_class->build = vips_rot_build;
  363|       |
  364|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  365|      1|		_("Input"),
  366|      1|		_("Input image"),
  367|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  368|      1|		G_STRUCT_OFFSET(VipsRot, in));
  369|       |
  370|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  371|      1|		_("Angle"),
  372|      1|		_("Angle to rotate image"),
  373|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  374|      1|		G_STRUCT_OFFSET(VipsRot, angle),
  375|      1|		VIPS_TYPE_ANGLE, VIPS_ANGLE_D90);
  376|      1|}

rot45.c:vips_rot45_class_init:
  254|      1|{
  255|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|       |
  258|      1|	VIPS_DEBUG_MSG("vips_rot45_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|       |
  260|      1|	gobject_class->set_property = vips_object_set_property;
  261|      1|	gobject_class->get_property = vips_object_get_property;
  262|       |
  263|      1|	vobject_class->nickname = "rot45";
  264|      1|	vobject_class->description = _("rotate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  265|      1|	vobject_class->build = vips_rot45_build;
  266|       |
  267|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  268|      1|		_("Input"),
  269|      1|		_("Input image"),
  270|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  271|      1|		G_STRUCT_OFFSET(VipsRot45, in));
  272|       |
  273|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  274|      1|		_("Angle"),
  275|      1|		_("Angle to rotate image"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsRot45, angle),
  278|      1|		VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D45);
  279|      1|}

scale.c:vips_scale_class_init:
  143|      1|{
  144|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|       |
  147|      1|	gobject_class->set_property = vips_object_set_property;
  148|      1|	gobject_class->get_property = vips_object_get_property;
  149|       |
  150|      1|	vobject_class->nickname = "scale";
  151|      1|	vobject_class->description = _("scale an image to uchar");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|      1|	vobject_class->build = vips_scale_build;
  153|       |
  154|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  155|      1|		_("Input"),
  156|      1|		_("Input image"),
  157|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  158|      1|		G_STRUCT_OFFSET(VipsScale, in));
  159|       |
  160|      1|	VIPS_ARG_BOOL(class, "log", 3,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  161|      1|		_("Log"),
  162|      1|		_("Log scale"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsScale, log),
  165|      1|		FALSE);
  166|       |
  167|      1|	VIPS_ARG_DOUBLE(class, "exp", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  168|      1|		_("Exponent"),
  169|      1|		_("Exponent for log scale"),
  170|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  171|      1|		G_STRUCT_OFFSET(VipsScale, exp),
  172|      1|		0.00001, 10000, 0.25);
  173|      1|}

vips_sequential:
  303|  11.0k|{
  304|  11.0k|	va_list ap;
  305|  11.0k|	int result;
  306|       |
  307|  11.0k|	va_start(ap, out);
  308|  11.0k|	result = vips_call_split("sequential", ap, in, out);
  309|  11.0k|	va_end(ap);
  310|       |
  311|  11.0k|	return result;
  312|  11.0k|}
sequential.c:vips_sequential_class_init:
  228|      1|{
  229|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|      1|	VIPS_DEBUG_MSG("vips_sequential_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|      1|	gobject_class->dispose = vips_sequential_dispose;
  235|      1|	gobject_class->set_property = vips_object_set_property;
  236|      1|	gobject_class->get_property = vips_object_get_property;
  237|       |
  238|      1|	vobject_class->nickname = "sequential";
  239|      1|	vobject_class->description = _("check sequential access");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  240|      1|	vobject_class->build = vips_sequential_build;
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("Input"),
  244|      1|		_("Input image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  246|      1|		G_STRUCT_OFFSET(VipsSequential, in));
  247|       |
  248|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("Tile height"),
  250|      1|		_("Tile height in pixels"),
  251|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsSequential, tile_height),
  253|      1|		1, 1000000, 1);
  254|       |
  255|      1|	VIPS_ARG_ENUM(class, "access", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  256|      1|		_("Strategy"),
  257|      1|		_("Expected access pattern"),
  258|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  259|      1|		G_STRUCT_OFFSET(VipsSequential, access),
  260|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_SEQUENTIAL);
  261|       |
  262|      1|	VIPS_ARG_BOOL(class, "trace", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  263|      1|		_("Trace"),
  264|      1|		_("Trace pixel requests"),
  265|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  266|      1|		G_STRUCT_OFFSET(VipsSequential, trace),
  267|      1|		TRUE);
  268|      1|}
sequential.c:vips_sequential_dispose:
  106|  11.0k|{
  107|  11.0k|	VipsSequential *sequential = (VipsSequential *) gobject;
  108|       |
  109|  11.0k|	VIPS_FREEF(vips_g_mutex_free, sequential->lock);
  ------------------
  |  |   41|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  11.0k|	{ \
  |  |   43|  11.0k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 11.0k, False: 0]
  |  |  ------------------
  |  |   44|  11.0k|			(void) F((S)); \
  |  |   45|  11.0k|			(S) = 0; \
  |  |   46|  11.0k|		} \
  |  |   47|  11.0k|	} \
  |  |   48|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|  11.0k|	G_OBJECT_CLASS(vips_sequential_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  11.0k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  11.0k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  11.0k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|  11.0k|}
sequential.c:vips_sequential_build:
  188|  11.0k|{
  189|  11.0k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  11.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  11.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  11.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  11.0k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  190|  11.0k|	VipsSequential *sequential = (VipsSequential *) object;
  191|       |
  192|  11.0k|	VipsImage *t;
  193|       |
  194|  11.0k|	VIPS_DEBUG_MSG("vips_sequential_build\n");
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|       |
  196|  11.0k|	if (VIPS_OBJECT_CLASS(vips_sequential_parent_class)->build(object))
  ------------------
  |  |  435|  11.0k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  11.0k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  11.0k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (196:6): [True: 0, False: 11.0k]
  ------------------
  197|      0|		return -1;
  198|       |
  199|       |	/* We've gone forwards and backwards on sequential caches being
  200|       |	 * persistent. Persistent caches can be useful if you want to eg.
  201|       |	 * make several crop() operations on a seq image source, but they use
  202|       |	 * a lot of memory with eg. arrayjoin.
  203|       |	 *
  204|       |	 * On balance, if you want to make many crops from one source, use a
  205|       |	 * RANDOM image.
  206|       |	 */
  207|  11.0k|	if (vips_linecache(sequential->in, &t,
  ------------------
  |  Branch (207:6): [True: 0, False: 11.0k]
  ------------------
  208|  11.0k|			"tile_height", sequential->tile_height,
  209|  11.0k|			"access", VIPS_ACCESS_SEQUENTIAL,
  210|  11.0k|			NULL))
  211|      0|		return -1;
  212|       |
  213|  11.0k|	vips_object_local(object, t);
  ------------------
  |  |  698|  11.0k|	(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
  |  |  ------------------
  |  |  |  |  491|  11.0k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |  |  ------------------
  ------------------
  214|       |
  215|  11.0k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (215:6): [True: 0, False: 11.0k]
  ------------------
  216|  11.0k|			VIPS_DEMAND_STYLE_THINSTRIP, t, NULL))
  217|      0|		return -1;
  218|  11.0k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (218:6): [True: 0, False: 11.0k]
  ------------------
  219|  11.0k|			vips_start_one, vips_sequential_generate, vips_stop_one,
  220|  11.0k|			t, sequential))
  221|      0|		return -1;
  222|       |
  223|  11.0k|	return 0;
  224|  11.0k|}
sequential.c:vips_sequential_generate:
  117|  23.9k|{
  118|  23.9k|	VipsSequential *sequential = (VipsSequential *) b;
  119|  23.9k|	VipsRect *r = &out_region->valid;
  120|  23.9k|	VipsRegion *ir = (VipsRegion *) seq;
  121|       |
  122|       |	/*
  123|       |	printf("vips_sequential_generate %p: request for line %d, height %d\n",
  124|       |		sequential, r->top, r->height);
  125|       |	 */
  126|       |
  127|  23.9k|	VIPS_GATE_START("vips_sequential_generate: wait");
  ------------------
  |  |   41|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  23.9k|	{ \
  |  |   43|  23.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 23.9k]
  |  |  ------------------
  |  |   44|  23.9k|			vips__thread_gate_start(NAME); \
  |  |   45|  23.9k|	} \
  |  |   46|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|  23.9k|	vips__worker_lock(sequential->lock);
  130|       |
  131|  23.9k|	VIPS_GATE_STOP("vips_sequential_generate: wait");
  ------------------
  |  |   49|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  23.9k|	{ \
  |  |   51|  23.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 23.9k]
  |  |  ------------------
  |  |   52|  23.9k|			vips__thread_gate_stop(NAME); \
  |  |   53|  23.9k|	} \
  |  |   54|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|       |
  133|       |	/* If we've seen an error, everything must stop.
  134|       |	 */
  135|  23.9k|	if (sequential->error) {
  ------------------
  |  Branch (135:6): [True: 0, False: 23.9k]
  ------------------
  136|      0|		g_mutex_unlock(sequential->lock);
  137|      0|		return -1;
  138|      0|	}
  139|       |
  140|  23.9k|	if (r->top > sequential->y_pos) {
  ------------------
  |  Branch (140:6): [True: 0, False: 23.9k]
  ------------------
  141|       |		/* This is a request for something some way down the image.
  142|       |		 * Probably the operation is something like extract_area and
  143|       |		 * we should skip the initial part of the image. In fact,
  144|       |		 * we read to cache, since it may be useful.
  145|       |		 *
  146|       |		 * Read in chunks, since we may be skipping *many* lines of image from
  147|       |		 * a file source.
  148|       |		 */
  149|      0|		int y;
  150|       |
  151|      0|		for (y = sequential->y_pos; y < r->top; y += sequential->tile_height) {
  ------------------
  |  Branch (151:31): [True: 0, False: 0]
  ------------------
  152|      0|			VipsRect area;
  153|       |
  154|      0|			area.left = 0;
  155|      0|			area.top = y;
  156|      0|			area.width = 1;
  157|      0|			area.height = VIPS_MIN(sequential->tile_height, r->top - area.top);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  158|      0|			if (vips_region_prepare(ir, &area)) {
  ------------------
  |  Branch (158:8): [True: 0, False: 0]
  ------------------
  159|      0|				sequential->error = -1;
  160|      0|				g_mutex_unlock(sequential->lock);
  161|      0|				return -1;
  162|      0|			}
  163|       |
  164|      0|			sequential->y_pos += area.height;
  165|      0|		}
  166|      0|	}
  167|       |
  168|       |	/* This is a request for old pixels, or for pixels exactly at the read
  169|       |	 * point. This might trigger a generate from the thing feeding the cache,
  170|       |	 * eg. a loader.
  171|       |	 */
  172|  23.9k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (172:6): [True: 4.84k, False: 19.1k]
  ------------------
  173|  23.9k|		vips_region_region(out_region, ir, r, r->left, r->top)) {
  ------------------
  |  Branch (173:3): [True: 0, False: 19.1k]
  ------------------
  174|  4.84k|		sequential->error = -1;
  175|  4.84k|		g_mutex_unlock(sequential->lock);
  176|  4.84k|		return -1;
  177|  4.84k|	}
  178|       |
  179|  19.1k|	sequential->y_pos = VIPS_MAX(sequential->y_pos, VIPS_RECT_BOTTOM(r));
  ------------------
  |  |   54|  19.1k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 19.1k]
  |  |  ------------------
  ------------------
  180|       |
  181|  19.1k|	g_mutex_unlock(sequential->lock);
  182|       |
  183|  19.1k|	return 0;
  184|  23.9k|}
sequential.c:vips_sequential_init:
  272|  11.0k|{
  273|  11.0k|	sequential->lock = vips_g_mutex_new();
  274|  11.0k|	sequential->tile_height = 1;
  275|  11.0k|	sequential->error = 0;
  276|  11.0k|	sequential->trace = FALSE;
  ------------------
  |  |  794|  11.0k|#define	FALSE	(0)
  ------------------
  277|  11.0k|}

smartcrop.c:vips_smartcrop_class_init:
  419|      1|{
  420|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|       |
  423|      1|	VIPS_DEBUG_MSG("vips_smartcrop_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|      1|	gobject_class->set_property = vips_object_set_property;
  426|      1|	gobject_class->get_property = vips_object_get_property;
  427|       |
  428|      1|	vobject_class->nickname = "smartcrop";
  429|      1|	vobject_class->description = _("extract an area from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  430|      1|	vobject_class->build = vips_smartcrop_build;
  431|       |
  432|      1|	VIPS_ARG_IMAGE(class, "input", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  433|      1|		_("Input"),
  434|      1|		_("Input image"),
  435|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  436|      1|		G_STRUCT_OFFSET(VipsSmartcrop, in));
  437|       |
  438|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  439|      1|		_("Width"),
  440|      1|		_("Width of extract area"),
  441|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  442|      1|		G_STRUCT_OFFSET(VipsSmartcrop, width),
  443|      1|		1, VIPS_MAX_COORD, 1);
  444|       |
  445|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  446|      1|		_("Height"),
  447|      1|		_("Height of extract area"),
  448|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  449|      1|		G_STRUCT_OFFSET(VipsSmartcrop, height),
  450|      1|		1, VIPS_MAX_COORD, 1);
  451|       |
  452|      1|	VIPS_ARG_ENUM(class, "interesting", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  453|      1|		_("Interesting"),
  454|      1|		_("How to measure interestingness"),
  455|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  456|      1|		G_STRUCT_OFFSET(VipsSmartcrop, interesting),
  457|      1|		VIPS_TYPE_INTERESTING, VIPS_INTERESTING_ATTENTION);
  458|       |
  459|      1|	VIPS_ARG_INT(class, "attention_x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  460|      1|		_("Attention x"),
  461|      1|		_("Horizontal position of attention centre"),
  462|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  463|      1|		G_STRUCT_OFFSET(VipsSmartcrop, attention_x),
  464|      1|		0, VIPS_MAX_COORD, 0);
  465|       |
  466|      1|	VIPS_ARG_INT(class, "attention_y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  467|      1|		_("Attention y"),
  468|      1|		_("Vertical position of attention centre"),
  469|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  470|      1|		G_STRUCT_OFFSET(VipsSmartcrop, attention_y),
  471|      1|		0, VIPS_MAX_COORD, 0);
  472|       |
  473|      1|	VIPS_ARG_BOOL(class, "premultiplied", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  474|      1|		_("Premultiplied"),
  475|      1|		_("Input image already has premultiplied alpha"),
  476|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  477|      1|		G_STRUCT_OFFSET(VipsSmartcrop, premultiplied),
  478|      1|		FALSE);
  479|      1|}

subsample.c:vips_subsample_class_init:
  251|      1|{
  252|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|       |
  255|      1|	gobject_class->set_property = vips_object_set_property;
  256|      1|	gobject_class->get_property = vips_object_get_property;
  257|       |
  258|      1|	vobject_class->nickname = "subsample";
  259|      1|	vobject_class->description = _("subsample an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  260|      1|	vobject_class->build = vips_subsample_build;
  261|       |
  262|       |	/* We don't work well as sequential: we can easily skip the first few
  263|       |	 * scanlines, and that confuses vips_sequential().
  264|       |	 */
  265|       |
  266|      1|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  267|      1|		_("Input"),
  268|      1|		_("Input image"),
  269|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsSubsample, in));
  271|       |
  272|      1|	VIPS_ARG_INT(class, "xfac", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  273|      1|		_("Xfac"),
  274|      1|		_("Horizontal subsample factor"),
  275|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  276|      1|		G_STRUCT_OFFSET(VipsSubsample, xfac),
  277|      1|		1, VIPS_MAX_COORD, 1);
  278|       |
  279|      1|	VIPS_ARG_INT(class, "yfac", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  280|      1|		_("Yfac"),
  281|      1|		_("Vertical subsample factor"),
  282|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  283|      1|		G_STRUCT_OFFSET(VipsSubsample, yfac),
  284|      1|		1, VIPS_MAX_COORD, 1);
  285|       |
  286|      1|	VIPS_ARG_BOOL(class, "point", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  287|      1|		_("Point"),
  288|      1|		_("Point sample"),
  289|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  290|      1|		G_STRUCT_OFFSET(VipsSubsample, point),
  291|      1|		FALSE);
  292|      1|}

switch.c:vips_switch_class_init:
  179|      1|{
  180|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  183|       |
  184|      1|	gobject_class->set_property = vips_object_set_property;
  185|      1|	gobject_class->get_property = vips_object_get_property;
  186|       |
  187|      1|	object_class->nickname = "switch";
  188|      1|	object_class->description =
  189|      1|		_("find the index of the first non-zero pixel in tests");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  190|      1|	object_class->build = vips_switch_build;
  191|       |
  192|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  193|       |
  194|      1|	VIPS_ARG_BOXED(class, "tests", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  195|      1|		_("Tests"),
  196|      1|		_("Table of images to test"),
  197|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsSwitch, tests),
  199|      1|		VIPS_TYPE_ARRAY_IMAGE);
  200|       |
  201|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  202|      1|		_("Output"),
  203|      1|		_("Output image"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  205|      1|		G_STRUCT_OFFSET(VipsSwitch, out));
  206|      1|}

vips_tilecache:
  864|  1.21k|{
  865|  1.21k|	va_list ap;
  866|  1.21k|	int result;
  867|       |
  868|  1.21k|	va_start(ap, out);
  869|  1.21k|	result = vips_call_split("tilecache", ap, in, out);
  870|  1.21k|	va_end(ap);
  871|       |
  872|  1.21k|	return result;
  873|  1.21k|}
vips_linecache:
 1031|  11.0k|{
 1032|  11.0k|	va_list ap;
 1033|  11.0k|	int result;
 1034|       |
 1035|  11.0k|	va_start(ap, out);
 1036|  11.0k|	result = vips_call_split("linecache", ap, in, out);
 1037|  11.0k|	va_end(ap);
 1038|       |
 1039|  11.0k|	return result;
 1040|  11.0k|}
tilecache.c:vips_block_cache_class_init:
  380|      1|{
  381|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  384|       |
  385|      1|	VIPS_DEBUG_MSG("vips_block_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|       |
  387|      1|	gobject_class->dispose = vips_block_cache_dispose;
  388|      1|	gobject_class->set_property = vips_object_set_property;
  389|      1|	gobject_class->get_property = vips_object_get_property;
  390|       |
  391|      1|	vobject_class->nickname = "blockcache";
  392|      1|	vobject_class->description = _("cache an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  393|      1|	vobject_class->build = vips_block_cache_build;
  394|       |
  395|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  396|       |
  397|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  398|      1|		_("Input"),
  399|      1|		_("Input image"),
  400|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  401|      1|		G_STRUCT_OFFSET(VipsBlockCache, in));
  402|       |
  403|      1|	VIPS_ARG_INT(class, "tile_height", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  404|      1|		_("Tile height"),
  405|      1|		_("Tile height in pixels"),
  406|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  407|      1|		G_STRUCT_OFFSET(VipsBlockCache, tile_height),
  408|      1|		1, 1000000, 128);
  409|       |
  410|      1|	VIPS_ARG_ENUM(class, "access", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  411|      1|		_("Access"),
  412|      1|		_("Expected access pattern"),
  413|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  414|      1|		G_STRUCT_OFFSET(VipsBlockCache, access),
  415|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM);
  416|       |
  417|      1|	VIPS_ARG_BOOL(class, "threaded", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  418|      1|		_("Threaded"),
  419|      1|		_("Allow threaded access"),
  420|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  421|      1|		G_STRUCT_OFFSET(VipsBlockCache, threaded),
  422|      1|		FALSE);
  423|       |
  424|      1|	VIPS_ARG_BOOL(class, "persistent", 8,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  425|      1|		_("Persistent"),
  426|      1|		_("Keep cache between evaluations"),
  427|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  428|      1|		G_STRUCT_OFFSET(VipsBlockCache, persistent),
  429|      1|		FALSE);
  430|      1|}
tilecache.c:vips_block_cache_dispose:
  157|  12.2k|{
  158|  12.2k|	VipsBlockCache *cache = (VipsBlockCache *) gobject;
  159|       |
  160|  12.2k|	vips_block_cache_drop_all(cache);
  161|  12.2k|	VIPS_FREEF(vips_g_mutex_free, cache->lock);
  ------------------
  |  |   41|  12.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  12.2k|	{ \
  |  |   43|  12.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 12.2k, False: 0]
  |  |  ------------------
  |  |   44|  12.2k|			(void) F((S)); \
  |  |   45|  12.2k|			(S) = 0; \
  |  |   46|  12.2k|		} \
  |  |   47|  12.2k|	} \
  |  |   48|  12.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|  12.2k|	VIPS_FREEF(vips_g_cond_free, cache->new_tile);
  ------------------
  |  |   41|  12.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  12.2k|	{ \
  |  |   43|  12.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 12.2k, False: 0]
  |  |  ------------------
  |  |   44|  12.2k|			(void) F((S)); \
  |  |   45|  12.2k|			(S) = 0; \
  |  |   46|  12.2k|		} \
  |  |   47|  12.2k|	} \
  |  |   48|  12.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|       |
  164|  12.2k|	if (cache->tiles)
  ------------------
  |  Branch (164:6): [True: 12.2k, False: 0]
  ------------------
  165|  12.2k|		g_assert(g_hash_table_size(cache->tiles) == 0);
  ------------------
  |  |  166|  12.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  12.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  12.2k|	VIPS_FREEF(g_hash_table_destroy, cache->tiles);
  ------------------
  |  |   41|  12.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  12.2k|	{ \
  |  |   43|  12.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 12.2k, False: 0]
  |  |  ------------------
  |  |   44|  12.2k|			(void) F((S)); \
  |  |   45|  12.2k|			(S) = 0; \
  |  |   46|  12.2k|		} \
  |  |   47|  12.2k|	} \
  |  |   48|  12.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|  12.2k|	VIPS_FREEF(g_queue_free, cache->recycle);
  ------------------
  |  |   41|  12.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  12.2k|	{ \
  |  |   43|  12.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 12.2k, False: 0]
  |  |  ------------------
  |  |   44|  12.2k|			(void) F((S)); \
  |  |   45|  12.2k|			(S) = 0; \
  |  |   46|  12.2k|		} \
  |  |   47|  12.2k|	} \
  |  |   48|  12.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|  12.2k|	G_OBJECT_CLASS(vips_block_cache_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  12.2k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  12.2k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  12.2k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|  12.2k|}
tilecache.c:vips_block_cache_drop_all:
  147|  12.2k|{
  148|       |	/* FIXME this is a disaster if active threads are working on tiles. We
  149|       |	 * should have something to block new requests, and only dispose once
  150|       |	 * all tiles are unreffed.
  151|       |	 */
  152|  12.2k|	g_hash_table_remove_all(cache->tiles);
  153|  12.2k|}
tilecache.c:vips_block_cache_build:
  357|  12.3k|{
  358|  12.3k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  12.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  12.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  12.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  12.3k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  359|  12.3k|	VipsBlockCache *cache = (VipsBlockCache *) object;
  360|       |
  361|  12.3k|	VIPS_DEBUG_MSG("vips_block_cache_build:\n");
  ------------------
  |  |   47|  12.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.3k|	{ \
  |  |   49|  12.3k|		; \
  |  |   50|  12.3k|	} \
  |  |   51|  12.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|       |
  363|  12.3k|	if (VIPS_OBJECT_CLASS(vips_block_cache_parent_class)->build(object))
  ------------------
  |  |  435|  12.3k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  12.3k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  12.3k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (363:6): [True: 0, False: 12.3k]
  ------------------
  364|      0|		return -1;
  365|       |
  366|  12.3k|	VIPS_DEBUG_MSG("vips_block_cache_build: max size = %g MB\n",
  ------------------
  |  |   47|  12.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.3k|	{ \
  |  |   49|  12.3k|		; \
  |  |   50|  12.3k|	} \
  |  |   51|  12.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|  12.3k|		(cache->max_tiles * cache->tile_width * cache->tile_height *
  368|  12.3k|			VIPS_IMAGE_SIZEOF_PEL(cache->in)) /
  369|  12.3k|			(1024 * 1024.0));
  370|       |
  371|  12.3k|	if (!cache->persistent)
  ------------------
  |  Branch (371:6): [True: 12.3k, False: 0]
  ------------------
  372|  12.3k|		g_signal_connect(conversion->out, "minimise",
  ------------------
  |  |  491|  12.3k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  373|  12.3k|			G_CALLBACK(vips_block_cache_minimise), cache);
  374|       |
  375|  12.3k|	return 0;
  376|  12.3k|}
tilecache.c:vips_block_cache_minimise:
  342|  24.6k|{
  343|  24.6k|	VIPS_DEBUG_MSG("vips_block_cache_minimise:\n");
  ------------------
  |  |   47|  24.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  24.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  24.6k|	{ \
  |  |   49|  24.6k|		; \
  |  |   50|  24.6k|	} \
  |  |   51|  24.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  24.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|       |
  345|  24.6k|	g_mutex_lock(cache->lock);
  346|       |
  347|       |	/* We can't drop tiles that are in use.
  348|       |	 */
  349|  24.6k|	g_hash_table_foreach_remove(cache->tiles,
  350|  24.6k|		vips_tile_unlocked, NULL);
  351|       |
  352|  24.6k|	g_mutex_unlock(cache->lock);
  353|  24.6k|}
tilecache.c:vips_tile_unlocked:
  334|   102k|{
  335|   102k|	VipsTile *tile = (VipsTile *) value;
  336|       |
  337|   102k|	return !tile->ref_count;
  338|   102k|}
tilecache.c:vips_block_cache_init:
  476|  12.3k|{
  477|  12.3k|	cache->tile_width = 128;
  478|  12.3k|	cache->tile_height = 128;
  479|  12.3k|	cache->max_tiles = 1000;
  480|  12.3k|	cache->access = VIPS_ACCESS_RANDOM;
  481|  12.3k|	cache->threaded = FALSE;
  ------------------
  |  |  794|  12.3k|#define	FALSE	(0)
  ------------------
  482|  12.3k|	cache->persistent = FALSE;
  ------------------
  |  |  794|  12.3k|#define	FALSE	(0)
  ------------------
  483|       |
  484|  12.3k|	cache->lock = vips_g_mutex_new();
  485|  12.3k|	cache->new_tile = vips_g_cond_new();
  486|  12.3k|	cache->tiles = g_hash_table_new_full(
  487|  12.3k|		(GHashFunc) vips_rect_hash,
  488|  12.3k|		(GEqualFunc) vips_rect_equal,
  489|  12.3k|		NULL,
  490|  12.3k|		(GDestroyNotify) vips_tile_destroy);
  491|  12.3k|	cache->recycle = g_queue_new();
  492|  12.3k|}
tilecache.c:vips_rect_hash:
  434|   210k|{
  435|   210k|	guint hash;
  436|       |
  437|       |	/* We could shift down by the tile size?
  438|       |	 *
  439|       |	 * X discrimination is more important than Y, since
  440|       |	 * most tiles will have a similar Y.
  441|       |	 */
  442|   210k|	hash = (guint) pos->left ^ ((guint) pos->top << 16);
  443|       |
  444|   210k|	return hash;
  445|   210k|}
tilecache.c:vips_rect_equal:
  449|  4.93k|{
  450|  4.93k|	return a->left == b->left && a->top == b->top;
  ------------------
  |  Branch (450:9): [True: 4.93k, False: 0]
  |  Branch (450:31): [True: 4.93k, False: 0]
  ------------------
  451|  4.93k|}
tilecache.c:vips_tile_destroy:
  455|   102k|{
  456|   102k|	VipsBlockCache *cache = tile->cache;
  457|       |
  458|   102k|	VIPS_DEBUG_MSG_RED("vips_tile_destroy: tile %d, %d (%p)\n",
  ------------------
  |  |   63|   102k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   102k|	{ \
  |  |   65|   102k|		; \
  |  |   66|   102k|	} \
  |  |   67|   102k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|   102k|		tile->pos.left, tile->pos.top, tile);
  460|       |
  461|       |	/* 0 ref tiles should be on the recycle list.
  462|       |	 */
  463|   102k|	g_assert(tile->ref_count == 0);
  ------------------
  |  |  166|   102k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|   102k|	g_assert(g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   102k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  465|   102k|	g_queue_remove(cache->recycle, tile);
  466|       |
  467|   102k|	tile->cache = NULL;
  468|       |
  469|   102k|	VIPS_UNREF(tile->region);
  ------------------
  |  |   57|   102k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|   102k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   102k|	{ \
  |  |  |  |   43|   102k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 102k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   102k|			(void) F((S)); \
  |  |  |  |   45|   102k|			(S) = 0; \
  |  |  |  |   46|   102k|		} \
  |  |  |  |   47|   102k|	} \
  |  |  |  |   48|   102k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|       |
  471|   102k|	g_free(tile);
  472|   102k|}
tilecache.c:vips_tile_cache_class_init:
  786|      1|{
  787|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  788|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|       |
  790|      1|	VIPS_DEBUG_MSG("vips_tile_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|       |
  792|      1|	gobject_class->set_property = vips_object_set_property;
  793|      1|	gobject_class->get_property = vips_object_get_property;
  794|       |
  795|      1|	vobject_class->nickname = "tilecache";
  796|      1|	vobject_class->description = _("cache an image as a set of tiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  797|      1|	vobject_class->build = vips_tile_cache_build;
  798|       |
  799|      1|	VIPS_ARG_INT(class, "tile_width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  800|      1|		_("Tile width"),
  801|      1|		_("Tile width in pixels"),
  802|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  803|      1|		G_STRUCT_OFFSET(VipsBlockCache, tile_width),
  804|      1|		1, 1000000, 128);
  805|       |
  806|      1|	VIPS_ARG_INT(class, "max_tiles", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  807|      1|		_("Max tiles"),
  808|      1|		_("Maximum number of tiles to cache"),
  809|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  810|      1|		G_STRUCT_OFFSET(VipsBlockCache, max_tiles),
  811|      1|		-1, 1000000, 1000);
  812|      1|}
tilecache.c:vips_tile_cache_build:
  759|  1.21k|{
  760|  1.21k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  1.21k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.21k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.21k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  1.21k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  761|  1.21k|	VipsBlockCache *block_cache = (VipsBlockCache *) object;
  762|  1.21k|	VipsTileCache *cache = (VipsTileCache *) object;
  763|       |
  764|  1.21k|	VIPS_DEBUG_MSG("vips_tile_cache_build\n");
  ------------------
  |  |   47|  1.21k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.21k|	{ \
  |  |   49|  1.21k|		; \
  |  |   50|  1.21k|	} \
  |  |   51|  1.21k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|       |
  766|  1.21k|	if (VIPS_OBJECT_CLASS(vips_tile_cache_parent_class)->build(object))
  ------------------
  |  |  435|  1.21k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.21k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.21k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (766:6): [True: 0, False: 1.21k]
  ------------------
  767|      0|		return -1;
  768|       |
  769|  1.21k|	if (vips_image_pio_input(block_cache->in))
  ------------------
  |  Branch (769:6): [True: 0, False: 1.21k]
  ------------------
  770|      0|		return -1;
  771|       |
  772|  1.21k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (772:6): [True: 0, False: 1.21k]
  ------------------
  773|  1.21k|			VIPS_DEMAND_STYLE_SMALLTILE, block_cache->in, NULL))
  774|      0|		return -1;
  775|       |
  776|  1.21k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (776:6): [True: 0, False: 1.21k]
  ------------------
  777|  1.21k|			vips_start_one, vips_tile_cache_gen, vips_stop_one,
  778|  1.21k|			block_cache->in, cache))
  779|      0|		return -1;
  780|       |
  781|  1.21k|	return 0;
  782|  1.21k|}
tilecache.c:vips_tile_cache_gen:
  604|  25.1k|{
  605|  25.1k|	VipsRegion *in = (VipsRegion *) seq;
  606|  25.1k|	VipsBlockCache *cache = (VipsBlockCache *) b;
  607|  25.1k|	VipsRect *r = &out_region->valid;
  608|       |
  609|  25.1k|	VipsTile *tile;
  610|  25.1k|	GSList *work;
  611|  25.1k|	GSList *p;
  612|  25.1k|	int result;
  613|       |
  614|  25.1k|	result = 0;
  615|       |
  616|  25.1k|	VIPS_GATE_START("vips_tile_cache_gen: wait1");
  ------------------
  |  |   41|  25.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  25.1k|	{ \
  |  |   43|  25.1k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 25.1k]
  |  |  ------------------
  |  |   44|  25.1k|			vips__thread_gate_start(NAME); \
  |  |   45|  25.1k|	} \
  |  |   46|  25.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|       |
  618|  25.1k|	vips__worker_lock(cache->lock);
  619|       |
  620|  25.1k|	VIPS_GATE_STOP("vips_tile_cache_gen: wait1");
  ------------------
  |  |   49|  25.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  25.1k|	{ \
  |  |   51|  25.1k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 25.1k]
  |  |  ------------------
  |  |   52|  25.1k|			vips__thread_gate_stop(NAME); \
  |  |   53|  25.1k|	} \
  |  |   54|  25.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|       |
  622|  25.1k|	VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|  25.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|  25.1k|	{ \
  |  |   65|  25.1k|		; \
  |  |   66|  25.1k|	} \
  |  |   67|  25.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|  25.1k|		"vips_tile_cache_gen: "
  624|  25.1k|		"left = %d, top = %d, width = %d, height = %d\n",
  625|  25.1k|		r->left, r->top, r->width, r->height);
  626|       |
  627|       |	/* Ref all the tiles we will need.
  628|       |	 */
  629|  25.1k|	work = vips_tile_cache_ref(cache, r);
  630|       |
  631|   153k|	while (work) {
  ------------------
  |  Branch (631:9): [True: 128k, False: 25.1k]
  ------------------
  632|       |		/* Search for data tiles: easy, we can just paste those in.
  633|       |		 */
  634|   235k|		for (;;) {
  635|   939k|			for (p = work; p; p = p->next) {
  ------------------
  |  Branch (635:19): [True: 811k, False: 128k]
  ------------------
  636|   811k|				tile = (VipsTile *) p->data;
  637|       |
  638|   811k|				if (tile->state == VIPS_TILE_STATE_DATA)
  ------------------
  |  Branch (638:9): [True: 107k, False: 703k]
  ------------------
  639|   107k|					break;
  640|   811k|			}
  641|       |
  642|   235k|			if (!p)
  ------------------
  |  Branch (642:8): [True: 128k, False: 107k]
  ------------------
  643|   128k|				break;
  644|       |
  645|   235k|			VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   107k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   107k|	{ \
  |  |   65|   107k|		; \
  |  |   66|   107k|	} \
  |  |   67|   235k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|   107k|				"vips_tile_cache_gen: pasting %p\n",
  647|   107k|				tile);
  648|       |
  649|   107k|			vips_tile_paste(tile, out_region);
  650|       |
  651|       |			/* We're done with this tile.
  652|       |			 */
  653|   107k|			work = g_slist_remove(work, tile);
  654|   107k|			vips_tile_unref(tile);
  655|   107k|		}
  656|       |
  657|       |		/* Calculate the first PEND tile we find on the work list. We
  658|       |		 * don't calculate all PEND tiles since after the first, more
  659|       |		 * DATA tiles might heve been made available by other threads
  660|       |		 * and we want to get them out of the way as soon as we can.
  661|       |		 */
  662|   128k|		for (p = work; p; p = p->next) {
  ------------------
  |  Branch (662:18): [True: 102k, False: 25.1k]
  ------------------
  663|   102k|			tile = (VipsTile *) p->data;
  664|       |
  665|   102k|			if (tile->state == VIPS_TILE_STATE_PEND) {
  ------------------
  |  Branch (665:8): [True: 102k, False: 0]
  ------------------
  666|   102k|				tile->state = VIPS_TILE_STATE_CALC;
  667|       |
  668|   102k|				VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   102k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   102k|	{ \
  |  |   65|   102k|		; \
  |  |   66|   102k|	} \
  |  |   67|   102k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  669|   102k|					"vips_tile_cache_gen: calc of %p\n",
  670|   102k|					tile);
  671|       |
  672|       |				/* In threaded mode, we let other threads run
  673|       |				 * while we calc this tile. In non-threaded
  674|       |				 * mode, we keep the lock and make 'em wait.
  675|       |				 */
  676|   102k|				if (cache->threaded)
  ------------------
  |  Branch (676:9): [True: 1.21k, False: 101k]
  ------------------
  677|  1.21k|					g_mutex_unlock(cache->lock);
  678|       |
  679|       |				/* Don't compute if we've seen an error
  680|       |				 * previously.
  681|       |				 */
  682|   102k|				if (!result)
  ------------------
  |  Branch (682:9): [True: 53.2k, False: 49.5k]
  ------------------
  683|  53.2k|					result = vips_region_prepare_to(in,
  684|  53.2k|						tile->region,
  685|  53.2k|						&tile->pos,
  686|  53.2k|						tile->pos.left, tile->pos.top);
  687|       |
  688|   102k|				if (cache->threaded) {
  ------------------
  |  Branch (688:9): [True: 1.21k, False: 101k]
  ------------------
  689|  1.21k|					VIPS_GATE_START("vips_tile_cache_gen: wait2");
  ------------------
  |  |   41|  1.21k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  1.21k|	{ \
  |  |   43|  1.21k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 1.21k]
  |  |  ------------------
  |  |   44|  1.21k|			vips__thread_gate_start(NAME); \
  |  |   45|  1.21k|	} \
  |  |   46|  1.21k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|       |
  691|  1.21k|					g_mutex_lock(cache->lock);
  692|       |
  693|  1.21k|					VIPS_GATE_STOP("vips_tile_cache_gen: wait2");
  ------------------
  |  |   49|  1.21k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  1.21k|	{ \
  |  |   51|  1.21k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 1.21k]
  |  |  ------------------
  |  |   52|  1.21k|			vips__thread_gate_stop(NAME); \
  |  |   53|  1.21k|	} \
  |  |   54|  1.21k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  694|  1.21k|				}
  695|       |
  696|       |				/* If there was an error calculating this
  697|       |				 * tile, black it out and terminate
  698|       |				 * calculation. We have to stop so we can
  699|       |				 * support things like --fail on jpegload.
  700|       |				 *
  701|       |				 * Don't return early, we'd deadlock.
  702|       |				 */
  703|   102k|				if (result) {
  ------------------
  |  Branch (703:9): [True: 54.5k, False: 48.2k]
  ------------------
  704|  54.5k|					VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|  54.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  54.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|  54.5k|	{ \
  |  |   65|  54.5k|		; \
  |  |   66|  54.5k|	} \
  |  |   67|  54.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  54.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|  54.5k|						"vips_tile_cache_gen: error on tile %p\n",
  706|  54.5k|						tile);
  707|       |
  708|  54.5k|					g_warning(_("error in tile %d x %d"),
  ------------------
  |  |  338|  54.5k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  54.5k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  54.5k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  54.5k|                               __VA_ARGS__)
  ------------------
  709|  54.5k|						tile->pos.left, tile->pos.top);
  710|       |
  711|  54.5k|					vips_region_black(tile->region);
  712|       |
  713|  54.5k|					*stop = TRUE;
  ------------------
  |  |  798|  54.5k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  54.5k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  714|  54.5k|				}
  715|       |
  716|   102k|				tile->state = VIPS_TILE_STATE_DATA;
  717|       |
  718|       |				/* Let everyone know there's a new DATA tile.
  719|       |				 * They need to all check their work lists.
  720|       |				 */
  721|   102k|				g_cond_broadcast(cache->new_tile);
  722|       |
  723|   102k|				break;
  724|   102k|			}
  725|   102k|		}
  726|       |
  727|       |		/* There are no PEND or DATA tiles, we must need a tile some
  728|       |		 * other thread is currently calculating.
  729|       |		 *
  730|       |		 * We must block until the CALC tiles we need are done.
  731|       |		 */
  732|   128k|		if (!p &&
  ------------------
  |  Branch (732:7): [True: 25.1k, False: 102k]
  ------------------
  733|   128k|			work) {
  ------------------
  |  Branch (733:4): [True: 0, False: 25.1k]
  ------------------
  734|      0|			for (p = work; p; p = p->next) {
  ------------------
  |  Branch (734:19): [True: 0, False: 0]
  ------------------
  735|      0|				tile = (VipsTile *) p->data;
  736|       |
  737|      0|				g_assert(tile->state == VIPS_TILE_STATE_CALC);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|      0|			}
  739|       |
  740|      0|			VIPS_DEBUG_MSG_RED("vips_tile_cache_gen: waiting\n");
  ------------------
  |  |   63|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      0|	{ \
  |  |   65|      0|		; \
  |  |   66|      0|	} \
  |  |   67|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|       |
  742|      0|			VIPS_GATE_START("vips_tile_cache_gen: wait3");
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			vips__thread_gate_start(NAME); \
  |  |   45|      0|	} \
  |  |   46|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|       |
  744|      0|			vips__worker_cond_wait(cache->new_tile, cache->lock);
  745|       |
  746|      0|			VIPS_GATE_STOP("vips_tile_cache_gen: wait3");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|       |
  748|      0|			VIPS_DEBUG_MSG("vips_tile_cache_gen: awake!\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|		}
  750|   128k|	}
  751|       |
  752|  25.1k|	g_mutex_unlock(cache->lock);
  753|       |
  754|  25.1k|	return result;
  755|  25.1k|}
tilecache.c:vips_tile_cache_ref:
  549|  25.1k|{
  550|  25.1k|	const int tw = cache->tile_width;
  551|  25.1k|	const int th = cache->tile_height;
  552|       |
  553|       |	/* Find top left of tiles we need.
  554|       |	 */
  555|  25.1k|	const int xs = (r->left / tw) * tw;
  556|  25.1k|	const int ys = (r->top / th) * th;
  557|       |
  558|  25.1k|	GSList *work;
  559|  25.1k|	VipsTile *tile;
  560|  25.1k|	int x, y;
  561|       |
  562|       |	/* Ref all the tiles we will need.
  563|       |	 */
  564|  25.1k|	work = NULL;
  565|   132k|	for (y = ys; y < VIPS_RECT_BOTTOM(r); y += th)
  ------------------
  |  |   49|   132k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (565:15): [True: 107k, False: 25.1k]
  ------------------
  566|   215k|		for (x = xs; x < VIPS_RECT_RIGHT(r); x += tw) {
  ------------------
  |  |   48|   215k|#define VIPS_RECT_RIGHT(R) ((R)->left + (R)->width)
  ------------------
  |  Branch (566:16): [True: 107k, False: 107k]
  ------------------
  567|   107k|			if (!(tile = vips_tile_find(cache, x, y))) {
  ------------------
  |  Branch (567:8): [True: 0, False: 107k]
  ------------------
  568|      0|				vips_tile_cache_unref(work);
  569|      0|				return NULL;
  570|      0|			}
  571|       |
  572|   107k|			vips_tile_ref(tile);
  573|       |
  574|       |			/* We must append, since we want to keep tile ordering
  575|       |			 * for sequential sources.
  576|       |			 */
  577|   107k|			work = g_slist_append(work, tile);
  578|       |
  579|   107k|			VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   107k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   107k|	{ \
  |  |   65|   107k|		; \
  |  |   66|   107k|	} \
  |  |   67|   107k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|   107k|				"vips_tile_cache_ref: tile %d, %d (%p)\n",
  581|   107k|				x, y, tile);
  582|   107k|		}
  583|       |
  584|  25.1k|	return work;
  585|  25.1k|}
tilecache.c:vips_tile_find:
  277|   107k|{
  278|   107k|	VipsTile *tile;
  279|       |
  280|       |	/* In cache already?
  281|       |	 */
  282|   107k|	if ((tile = vips_tile_search(cache, x, y))) {
  ------------------
  |  Branch (282:6): [True: 4.93k, False: 102k]
  ------------------
  283|  4.93k|		VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|  4.93k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.93k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|  4.93k|	{ \
  |  |   65|  4.93k|		; \
  |  |   66|  4.93k|	} \
  |  |   67|  4.93k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.93k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  4.93k|			"vips_tile_find: tile %d x %d in cache\n", x, y);
  285|  4.93k|		return tile;
  286|  4.93k|	}
  287|       |
  288|       |	/* VipsBlockCache not full?
  289|       |	 */
  290|   102k|	if (cache->max_tiles == -1 ||
  ------------------
  |  Branch (290:6): [True: 0, False: 102k]
  ------------------
  291|   102k|		g_hash_table_size(cache->tiles) < cache->max_tiles) {
  ------------------
  |  Branch (291:3): [True: 102k, False: 0]
  ------------------
  292|   102k|		VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   102k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   102k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   102k|	{ \
  |  |   65|   102k|		; \
  |  |   66|   102k|	} \
  |  |   67|   102k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   102k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|   102k|			"vips_tile_find: making new tile at %d x %d\n", x, y);
  294|   102k|		if (!(tile = vips_tile_new(cache, x, y)))
  ------------------
  |  Branch (294:7): [True: 0, False: 102k]
  ------------------
  295|      0|			return NULL;
  296|       |
  297|   102k|		return tile;
  298|   102k|	}
  299|       |
  300|       |	/* Reuse an old one, if there are any. We just peek the tile pointer,
  301|       |	 * it is removed from the recycle list later on _ref.
  302|       |	 */
  303|      0|	if (cache->recycle) {
  ------------------
  |  Branch (303:6): [True: 0, False: 0]
  ------------------
  304|      0|		if (cache->access == VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (304:7): [True: 0, False: 0]
  ------------------
  305|      0|			tile = g_queue_peek_head(cache->recycle);
  306|      0|		else
  307|       |			/* This is slower :( We have to search the recycle
  308|       |			 * queue.
  309|       |			 */
  310|      0|			tile = vips_tile_find_topmost(cache->recycle);
  311|      0|	}
  312|       |
  313|      0|	if (!tile) {
  ------------------
  |  Branch (313:6): [True: 0, False: 0]
  ------------------
  314|       |		/* There are no tiles we can reuse -- we have to make another
  315|       |		 * for now. They will get culled down again next time around.
  316|       |		 */
  317|      0|		if (!(tile = vips_tile_new(cache, x, y)))
  ------------------
  |  Branch (317:7): [True: 0, False: 0]
  ------------------
  318|      0|			return NULL;
  319|       |
  320|      0|		return tile;
  321|      0|	}
  322|       |
  323|      0|	VIPS_DEBUG_MSG_RED("vips_tile_find: reusing tile %d x %d\n",
  ------------------
  |  |   63|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      0|	{ \
  |  |   65|      0|		; \
  |  |   66|      0|	} \
  |  |   67|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|      0|		tile->pos.left, tile->pos.top);
  325|       |
  326|      0|	if (vips_tile_move(tile, x, y))
  ------------------
  |  Branch (326:6): [True: 0, False: 0]
  ------------------
  327|      0|		return NULL;
  328|       |
  329|      0|	return tile;
  330|      0|}
tilecache.c:vips_tile_search:
  235|   107k|{
  236|   107k|	VipsRect pos;
  237|   107k|	VipsTile *tile;
  238|       |
  239|   107k|	pos.left = x;
  240|   107k|	pos.top = y;
  241|   107k|	pos.width = cache->tile_width;
  242|   107k|	pos.height = cache->tile_height;
  243|   107k|	tile = (VipsTile *) g_hash_table_lookup(cache->tiles, &pos);
  244|       |
  245|   107k|	return tile;
  246|   107k|}
tilecache.c:vips_tile_new:
  199|   102k|{
  200|   102k|	VipsTile *tile;
  201|       |
  202|   102k|	if (!(tile = VIPS_NEW(NULL, VipsTile)))
  ------------------
  |  |   70|   102k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   102k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   102k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   102k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   102k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (202:6): [True: 0, False: 102k]
  ------------------
  203|      0|		return NULL;
  204|       |
  205|   102k|	tile->cache = cache;
  206|   102k|	tile->state = VIPS_TILE_STATE_PEND;
  207|   102k|	tile->ref_count = 0;
  208|   102k|	tile->region = NULL;
  209|   102k|	tile->pos.left = x;
  210|   102k|	tile->pos.top = y;
  211|   102k|	tile->pos.width = cache->tile_width;
  212|   102k|	tile->pos.height = cache->tile_height;
  213|   102k|	g_hash_table_insert(cache->tiles, &tile->pos, tile);
  214|   102k|	g_queue_push_tail(tile->cache->recycle, tile);
  215|       |
  216|   102k|	if (!(tile->region = vips_region_new(cache->in))) {
  ------------------
  |  Branch (216:6): [True: 0, False: 102k]
  ------------------
  217|      0|		g_hash_table_remove(cache->tiles, &tile->pos);
  218|      0|		return NULL;
  219|      0|	}
  220|       |
  221|   102k|	vips__region_no_ownership(tile->region);
  222|       |
  223|   102k|	if (vips_region_buffer(tile->region, &tile->pos)) {
  ------------------
  |  Branch (223:6): [True: 0, False: 102k]
  ------------------
  224|      0|		g_hash_table_remove(cache->tiles, &tile->pos);
  225|      0|		return NULL;
  226|      0|	}
  227|       |
  228|   102k|	return tile;
  229|   102k|}
tilecache.c:vips_tile_ref:
  522|   107k|{
  523|   107k|	tile->ref_count += 1;
  524|       |
  525|   107k|	g_assert(tile->ref_count > 0);
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|       |
  527|   107k|	if (tile->ref_count == 1) {
  ------------------
  |  Branch (527:6): [True: 107k, False: 0]
  ------------------
  528|   107k|		g_assert(g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|       |
  530|   107k|		g_queue_remove(tile->cache->recycle, tile);
  531|   107k|	}
  532|   107k|}
tilecache.c:vips_tile_paste:
  589|   107k|{
  590|   107k|	VipsRect hit;
  591|       |
  592|       |	/* The part of the tile that we need.
  593|       |	 */
  594|   107k|	vips_rect_intersectrect(&out_region->valid, &tile->pos, &hit);
  595|   107k|	if (!vips_rect_isempty(&hit))
  ------------------
  |  Branch (595:6): [True: 107k, False: 0]
  ------------------
  596|   107k|		vips_region_copy(tile->region, out_region, &hit, hit.left, hit.top);
  597|   107k|}
tilecache.c:vips_tile_unref:
  505|   107k|{
  506|   107k|	g_assert(tile->ref_count > 0);
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|       |
  508|   107k|	tile->ref_count -= 1;
  509|       |
  510|   107k|	if (tile->ref_count == 0) {
  ------------------
  |  Branch (510:6): [True: 107k, False: 0]
  ------------------
  511|       |		/* Place at the end of the recycle queue. We pop from the
  512|       |		 * front when selecting an unused tile for reuse.
  513|       |		 */
  514|   107k|		g_assert(!g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|       |
  516|   107k|		g_queue_push_tail(tile->cache->recycle, tile);
  517|   107k|	}
  518|   107k|}
tilecache.c:vips_tile_cache_init:
  816|  1.21k|{
  817|  1.21k|}
tilecache.c:vips_line_cache_class_init:
  977|      1|{
  978|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  979|       |
  980|      1|	VIPS_DEBUG_MSG("vips_line_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|       |
  982|      1|	vobject_class->nickname = "linecache";
  983|      1|	vobject_class->description = _("cache an image as a set of lines");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  984|      1|	vobject_class->build = vips_line_cache_build;
  985|      1|}
tilecache.c:vips_line_cache_build:
  913|  11.0k|{
  914|  11.0k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  11.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  11.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  11.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  11.0k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  915|  11.0k|	VipsBlockCache *block_cache = (VipsBlockCache *) object;
  916|  11.0k|	VipsLineCache *cache = (VipsLineCache *) object;
  917|       |
  918|  11.0k|	int tile_width;
  919|  11.0k|	int tile_height;
  920|  11.0k|	int n_lines;
  921|       |
  922|  11.0k|	VIPS_DEBUG_MSG("vips_line_cache_build\n");
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|       |
  924|  11.0k|	if (!vips_object_argument_isset(object, "access"))
  ------------------
  |  Branch (924:6): [True: 0, False: 11.0k]
  ------------------
  925|      0|		block_cache->access = VIPS_ACCESS_SEQUENTIAL; // FIXME: Invalidates operation cache
  926|       |
  927|  11.0k|	if (VIPS_OBJECT_CLASS(vips_line_cache_parent_class)->build(object))
  ------------------
  |  |  435|  11.0k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  11.0k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  11.0k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (927:6): [True: 0, False: 11.0k]
  ------------------
  928|      0|		return -1;
  929|       |
  930|       |	/* This can go up with request size, see vips_line_cache_gen().
  931|       |	 */
  932|  11.0k|	vips_get_tile_size(block_cache->in,
  933|  11.0k|		&tile_width, &tile_height, &n_lines);
  934|  11.0k|	block_cache->tile_width = block_cache->in->Xsize; // FIXME: Invalidates operation cache
  935|       |
  936|       |	/* Output has two buffers n_lines height, so 2 * n_lines is the maximum
  937|       |	 * non-locality from threading. Double again for conv, rounding, etc.
  938|       |	 *
  939|       |	 * tile_height can be huge for things like tiff read, where we can
  940|       |	 * have a whole strip in a single tile ... we still need to have a
  941|       |	 * minimum of two strips, so we can handle requests that straddle a
  942|       |	 * tile boundary.
  943|       |	 */
  944|  11.0k|	block_cache->max_tiles = VIPS_MAX(2, // FIXME: Invalidates operation cache
  ------------------
  |  |   54|  11.0k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 11.0k]
  |  |  ------------------
  ------------------
  945|  11.0k|		4 * n_lines / block_cache->tile_height);
  946|       |
  947|  11.0k|	VIPS_DEBUG_MSG("vips_line_cache_build: n_lines = %d\n",
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  948|  11.0k|		n_lines);
  949|  11.0k|	VIPS_DEBUG_MSG("vips_line_cache_build: max_tiles = %d\n",
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|  11.0k|		block_cache->max_tiles);
  951|  11.0k|	VIPS_DEBUG_MSG("vips_line_cache_build: tile_height = %d\n",
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|  11.0k|		block_cache->tile_height);
  953|  11.0k|	VIPS_DEBUG_MSG("vips_line_cache_build: max size = %g MB\n",
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|  11.0k|		(block_cache->max_tiles *
  955|  11.0k|			block_cache->tile_width *
  956|  11.0k|			block_cache->tile_height *
  957|  11.0k|			VIPS_IMAGE_SIZEOF_PEL(block_cache->in)) /
  958|  11.0k|			(1024 * 1024.0));
  959|       |
  960|  11.0k|	if (vips_image_pio_input(block_cache->in))
  ------------------
  |  Branch (960:6): [True: 0, False: 11.0k]
  ------------------
  961|      0|		return -1;
  962|       |
  963|  11.0k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (963:6): [True: 0, False: 11.0k]
  ------------------
  964|  11.0k|			VIPS_DEMAND_STYLE_THINSTRIP, block_cache->in, NULL))
  965|      0|		return -1;
  966|       |
  967|  11.0k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (967:6): [True: 0, False: 11.0k]
  ------------------
  968|  11.0k|			vips_start_one, vips_line_cache_gen, vips_stop_one,
  969|  11.0k|			block_cache->in, cache))
  970|      0|		return -1;
  971|       |
  972|  11.0k|	return 0;
  973|  11.0k|}
tilecache.c:vips_line_cache_gen:
  887|  23.9k|{
  888|  23.9k|	VipsBlockCache *block_cache = (VipsBlockCache *) b;
  889|       |
  890|  23.9k|	VIPS_GATE_START("vips_line_cache_gen: wait");
  ------------------
  |  |   41|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  23.9k|	{ \
  |  |   43|  23.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 23.9k]
  |  |  ------------------
  |  |   44|  23.9k|			vips__thread_gate_start(NAME); \
  |  |   45|  23.9k|	} \
  |  |   46|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|       |
  892|  23.9k|	vips__worker_lock(block_cache->lock);
  893|       |
  894|  23.9k|	VIPS_GATE_STOP("vips_line_cache_gen: wait");
  ------------------
  |  |   49|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  23.9k|	{ \
  |  |   51|  23.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 23.9k]
  |  |  ------------------
  |  |   52|  23.9k|			vips__thread_gate_stop(NAME); \
  |  |   53|  23.9k|	} \
  |  |   54|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  895|       |
  896|       |	/* We size up the cache to the largest request.
  897|       |	 */
  898|  23.9k|	if (out_region->valid.height >
  ------------------
  |  Branch (898:6): [True: 0, False: 23.9k]
  ------------------
  899|  23.9k|		block_cache->max_tiles * block_cache->tile_height) {
  900|      0|		block_cache->max_tiles = // FIXME: Invalidates operation cache
  901|      0|			1 + (out_region->valid.height / block_cache->tile_height);
  902|      0|		VIPS_DEBUG_MSG("vips_line_cache_gen: bumped max_tiles to %d\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  903|      0|			block_cache->max_tiles);
  904|      0|	}
  905|       |
  906|  23.9k|	g_mutex_unlock(block_cache->lock);
  907|       |
  908|  23.9k|	return vips_tile_cache_gen(out_region, seq, a, b, stop);
  909|  23.9k|}
tilecache.c:vips_line_cache_init:
  989|  11.0k|{
  990|  11.0k|}

transpose3d.c:vips_transpose3d_class_init:
  155|      1|{
  156|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|       |
  159|      1|	gobject_class->set_property = vips_object_set_property;
  160|      1|	gobject_class->get_property = vips_object_get_property;
  161|       |
  162|      1|	vobject_class->nickname = "transpose3d";
  163|      1|	vobject_class->description = _("transpose3d an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  164|      1|	vobject_class->build = vips_transpose3d_build;
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Input"),
  168|      1|		_("Input image"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsTranspose3d, in));
  171|       |
  172|      1|	VIPS_ARG_INT(class, "page_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("Page height"),
  174|      1|		_("Height of each input page"),
  175|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsTranspose3d, page_height),
  177|      1|		0, 10000000, 0);
  178|      1|}

vips_unpremultiply:
  393|    875|{
  394|    875|	va_list ap;
  395|    875|	int result;
  396|       |
  397|    875|	va_start(ap, out);
  398|    875|	result = vips_call_split("unpremultiply", ap, in, out);
  399|    875|	va_end(ap);
  400|       |
  401|    875|	return result;
  402|    875|}
unpremultiply.c:vips_unpremultiply_class_init:
  306|      1|{
  307|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  310|       |
  311|      1|	VIPS_DEBUG_MSG("vips_unpremultiply_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|       |
  313|      1|	gobject_class->set_property = vips_object_set_property;
  314|      1|	gobject_class->get_property = vips_object_get_property;
  315|       |
  316|      1|	vobject_class->nickname = "unpremultiply";
  317|      1|	vobject_class->description = _("unpremultiply image alpha");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  318|      1|	vobject_class->build = vips_unpremultiply_build;
  319|       |
  320|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  321|       |
  322|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  323|      1|		_("Input"),
  324|      1|		_("Input image"),
  325|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  326|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, in));
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Maximum alpha"),
  330|      1|		_("Maximum value of alpha channel"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, max_alpha),
  333|      1|		0, 100000000, 255);
  334|       |
  335|      1|	VIPS_ARG_INT(class, "alpha_band", 116,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  336|      1|		_("Alpha band"),
  337|      1|		_("Unpremultiply with this alpha"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, alpha_band),
  340|      1|		0, 100000000, 3);
  341|      1|}
unpremultiply.c:vips_unpremultiply_build:
  251|    875|{
  252|    875|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|    875|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    875|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    875|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|    875|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|    875|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    875|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    875|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    875|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  254|    875|	VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) object;
  255|    875|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 1);
  256|       |
  257|    875|	VipsImage *in;
  258|       |
  259|    875|	if (VIPS_OBJECT_CLASS(vips_unpremultiply_parent_class)->build(object))
  ------------------
  |  |  435|    875|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    875|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    875|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (259:6): [True: 0, False: 875]
  ------------------
  260|      0|		return -1;
  261|       |
  262|    875|	in = unpremultiply->in;
  263|       |
  264|    875|	if (vips_image_decode(in, &t[0]))
  ------------------
  |  Branch (264:6): [True: 0, False: 875]
  ------------------
  265|      0|		return -1;
  266|    875|	in = t[0];
  267|       |
  268|       |	/* Trivial case: fall back to copy().
  269|       |	 */
  270|    875|	if (in->Bands == 1)
  ------------------
  |  Branch (270:6): [True: 101, False: 774]
  ------------------
  271|    101|		return vips_image_write(in, conversion->out);
  272|       |
  273|    774|	if (vips_check_noncomplex(class->nickname, in))
  ------------------
  |  Branch (273:6): [True: 0, False: 774]
  ------------------
  274|      0|		return -1;
  275|       |
  276|    774|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (276:6): [True: 0, False: 774]
  ------------------
  277|    774|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL))
  278|      0|		return -1;
  279|       |
  280|       |	/* Is max-alpha unset? Default to the correct value for this
  281|       |	 * interpretation.
  282|       |	 */
  283|    774|	if (!vips_object_argument_isset(object, "max_alpha"))
  ------------------
  |  Branch (283:6): [True: 774, False: 0]
  ------------------
  284|    774|		unpremultiply->max_alpha = vips_interpretation_max_alpha(in->Type); // FIXME: Invalidates operation cache
  285|       |
  286|       |	/* Is alpha-band unset? Default to the final band for this image.
  287|       |	 */
  288|    774|	if (!vips_object_argument_isset(object, "alpha_band"))
  ------------------
  |  Branch (288:6): [True: 0, False: 774]
  ------------------
  289|      0|		unpremultiply->alpha_band = in->Bands - 1; // FIXME: Invalidates operation cache
  290|       |
  291|    774|	if (in->BandFmt == VIPS_FORMAT_DOUBLE)
  ------------------
  |  Branch (291:6): [True: 0, False: 774]
  ------------------
  292|      0|		conversion->out->BandFmt = VIPS_FORMAT_DOUBLE;
  293|    774|	else
  294|    774|		conversion->out->BandFmt = VIPS_FORMAT_FLOAT;
  295|       |
  296|    774|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (296:6): [True: 0, False: 774]
  ------------------
  297|    774|			vips_start_one, vips_unpremultiply_gen, vips_stop_one,
  298|    774|			in, unpremultiply))
  299|      0|		return -1;
  300|       |
  301|    774|	return 0;
  302|    774|}
unpremultiply.c:vips_unpremultiply_init:
  345|    875|{
  346|    875|	unpremultiply->max_alpha = 255.0;
  347|    875|}
unpremultiply.c:vips_unpremultiply_gen.avx.0:
  187|  1.44k|{
  188|  1.44k|	VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) b;
  189|  1.44k|	VipsRegion *ir = (VipsRegion *) vseq;
  190|  1.44k|	VipsImage *im = ir->im;
  191|  1.44k|	VipsRect *r = &out_region->valid;
  192|  1.44k|	int width = r->width;
  193|  1.44k|	int bands = im->Bands;
  194|  1.44k|	double max_alpha = unpremultiply->max_alpha;
  195|  1.44k|	int alpha_band = unpremultiply->alpha_band;
  196|       |
  197|  1.44k|	int x, y, i;
  198|       |
  199|  1.44k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (199:6): [True: 3, False: 1.44k]
  ------------------
  200|      3|		return -1;
  201|       |
  202|  19.5k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (202:14): [True: 18.1k, False: 1.44k]
  ------------------
  203|  18.1k|		VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  18.1k|	((R)->data + \
  |  |  228|  18.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  18.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  18.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  18.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  18.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  18.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  18.1k|		VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  18.1k|	((R)->data + \
  |  |  228|  18.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  18.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  18.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  18.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  18.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  18.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|       |
  206|  18.1k|		switch (im->BandFmt) {
  207|  1.56k|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (207:3): [True: 1.56k, False: 16.5k]
  ------------------
  208|  1.56k|			UNPRE(unsigned char, float);
  ------------------
  |  |  122|  1.56k|	{ \
  |  |  123|  1.56k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 477, False: 1.09k]
  |  |  ------------------
  |  |  124|    477|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|    477|	{ \
  |  |  |  |  104|    477|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|    477|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|    477|\
  |  |  |  |  107|  15.3k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 14.9k, False: 477]
  |  |  |  |  ------------------
  |  |  |  |  108|  14.9k|			IN alpha = p[3]; \
  |  |  |  |  109|  14.9k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 12.3k, False: 2.56k]
  |  |  |  |  ------------------
  |  |  |  |  110|  14.9k|\
  |  |  |  |  111|  14.9k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  14.9k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  14.9k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  14.9k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  14.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  29.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 14.9k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 14.9k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 14.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  14.9k|\
  |  |  |  |  116|  14.9k|			p += 4; \
  |  |  |  |  117|  14.9k|			q += 4; \
  |  |  |  |  118|  14.9k|		} \
  |  |  |  |  119|    477|	}
  |  |  ------------------
  |  |  125|    477|		} \
  |  |  126|  1.56k|		else { \
  |  |  127|  1.09k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.09k|	{ \
  |  |  |  |   82|  1.09k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.09k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.09k|\
  |  |  |  |   85|  8.74k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 7.65k, False: 1.09k]
  |  |  |  |  ------------------
  |  |  |  |   86|  7.65k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  7.65k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 3.09k, False: 4.55k]
  |  |  |  |  ------------------
  |  |  |  |   88|  7.65k|\
  |  |  |  |   89|  11.7k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 4.07k, False: 7.65k]
  |  |  |  |  ------------------
  |  |  |  |   90|  7.65k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  7.65k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  7.65k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  15.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 7.65k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 7.65k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 7.65k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  17.3k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 9.72k, False: 7.65k]
  |  |  |  |  ------------------
  |  |  |  |   93|  9.72k|				q[i] = p[i]; \
  |  |  |  |   94|  7.65k|\
  |  |  |  |   95|  7.65k|			p += bands; \
  |  |  |  |   96|  7.65k|			q += bands; \
  |  |  |  |   97|  7.65k|		} \
  |  |  |  |   98|  1.09k|	}
  |  |  ------------------
  |  |  128|  1.09k|		} \
  |  |  129|  1.56k|	}
  ------------------
  209|  1.56k|			break;
  210|       |
  211|  1.07k|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (211:3): [True: 1.07k, False: 17.0k]
  ------------------
  212|  1.07k|			UNPRE(signed char, float);
  ------------------
  |  |  122|  1.07k|	{ \
  |  |  123|  1.07k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 481, False: 597]
  |  |  ------------------
  |  |  124|    481|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|    481|	{ \
  |  |  |  |  104|    481|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|    481|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|    481|\
  |  |  |  |  107|  16.1k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 15.7k, False: 481]
  |  |  |  |  ------------------
  |  |  |  |  108|  15.7k|			IN alpha = p[3]; \
  |  |  |  |  109|  15.7k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 3.15k, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |  110|  15.7k|\
  |  |  |  |  111|  15.7k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  15.7k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  15.7k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  15.7k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  15.7k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  31.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 6.76k, False: 8.95k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 15.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 8.95k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  15.7k|\
  |  |  |  |  116|  15.7k|			p += 4; \
  |  |  |  |  117|  15.7k|			q += 4; \
  |  |  |  |  118|  15.7k|		} \
  |  |  |  |  119|    481|	}
  |  |  ------------------
  |  |  125|    481|		} \
  |  |  126|  1.07k|		else { \
  |  |  127|    597|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|    597|	{ \
  |  |  |  |   82|    597|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|    597|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|    597|\
  |  |  |  |   85|  7.27k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 6.67k, False: 597]
  |  |  |  |  ------------------
  |  |  |  |   86|  6.67k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  6.67k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 2.61k, False: 4.06k]
  |  |  |  |  ------------------
  |  |  |  |   88|  6.67k|\
  |  |  |  |   89|  15.6k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 8.99k, False: 6.67k]
  |  |  |  |  ------------------
  |  |  |  |   90|  8.99k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  6.67k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  6.67k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  13.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.63k, False: 5.04k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 6.67k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 5.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  8.20k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 1.52k, False: 6.67k]
  |  |  |  |  ------------------
  |  |  |  |   93|  6.67k|				q[i] = p[i]; \
  |  |  |  |   94|  6.67k|\
  |  |  |  |   95|  6.67k|			p += bands; \
  |  |  |  |   96|  6.67k|			q += bands; \
  |  |  |  |   97|  6.67k|		} \
  |  |  |  |   98|    597|	}
  |  |  ------------------
  |  |  128|    597|		} \
  |  |  129|  1.07k|	}
  ------------------
  213|  1.07k|			break;
  214|       |
  215|  1.24k|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (215:3): [True: 1.24k, False: 16.8k]
  ------------------
  216|  1.24k|			UNPRE(unsigned short, float);
  ------------------
  |  |  122|  1.24k|	{ \
  |  |  123|  1.24k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 423, False: 822]
  |  |  ------------------
  |  |  124|    423|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|    423|	{ \
  |  |  |  |  104|    423|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|    423|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|    423|\
  |  |  |  |  107|  11.8k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 11.4k, False: 423]
  |  |  |  |  ------------------
  |  |  |  |  108|  11.4k|			IN alpha = p[3]; \
  |  |  |  |  109|  11.4k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 2.34k, False: 9.05k]
  |  |  |  |  ------------------
  |  |  |  |  110|  11.4k|\
  |  |  |  |  111|  11.4k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  11.4k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  11.4k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  11.4k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  11.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  22.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 11.4k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 7.09k, False: 4.30k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 7.09k, False: 4.30k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  11.4k|\
  |  |  |  |  116|  11.4k|			p += 4; \
  |  |  |  |  117|  11.4k|			q += 4; \
  |  |  |  |  118|  11.4k|		} \
  |  |  |  |  119|    423|	}
  |  |  ------------------
  |  |  125|    423|		} \
  |  |  126|  1.24k|		else { \
  |  |  127|    822|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|    822|	{ \
  |  |  |  |   82|    822|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|    822|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|    822|\
  |  |  |  |   85|  9.90k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 9.08k, False: 822]
  |  |  |  |  ------------------
  |  |  |  |   86|  9.08k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  9.08k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 5.00k, False: 4.07k]
  |  |  |  |  ------------------
  |  |  |  |   88|  9.08k|\
  |  |  |  |   89|  21.0k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 12.0k, False: 9.08k]
  |  |  |  |  ------------------
  |  |  |  |   90|  12.0k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  9.08k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  9.08k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  18.1k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 9.08k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.61k, False: 7.46k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.61k, False: 7.46k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  14.7k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 5.71k, False: 9.08k]
  |  |  |  |  ------------------
  |  |  |  |   93|  9.08k|				q[i] = p[i]; \
  |  |  |  |   94|  9.08k|\
  |  |  |  |   95|  9.08k|			p += bands; \
  |  |  |  |   96|  9.08k|			q += bands; \
  |  |  |  |   97|  9.08k|		} \
  |  |  |  |   98|    822|	}
  |  |  ------------------
  |  |  128|    822|		} \
  |  |  129|  1.24k|	}
  ------------------
  217|  1.24k|			break;
  218|       |
  219|  4.29k|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (219:3): [True: 4.29k, False: 13.8k]
  ------------------
  220|  4.29k|			UNPRE(signed short, float);
  ------------------
  |  |  122|  4.29k|	{ \
  |  |  123|  4.29k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 2.15k, False: 2.14k]
  |  |  ------------------
  |  |  124|  2.15k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  2.15k|	{ \
  |  |  |  |  104|  2.15k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  2.15k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  2.15k|\
  |  |  |  |  107|  86.2k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 84.1k, False: 2.15k]
  |  |  |  |  ------------------
  |  |  |  |  108|  84.1k|			IN alpha = p[3]; \
  |  |  |  |  109|  84.1k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 18.8k, False: 65.3k]
  |  |  |  |  ------------------
  |  |  |  |  110|  84.1k|\
  |  |  |  |  111|  84.1k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  84.1k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  84.1k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  84.1k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  84.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   168k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 19.2k, False: 64.8k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 32.3k, False: 51.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 32.3k, False: 32.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  84.1k|\
  |  |  |  |  116|  84.1k|			p += 4; \
  |  |  |  |  117|  84.1k|			q += 4; \
  |  |  |  |  118|  84.1k|		} \
  |  |  |  |  119|  2.15k|	}
  |  |  ------------------
  |  |  125|  2.15k|		} \
  |  |  126|  4.29k|		else { \
  |  |  127|  2.14k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  2.14k|	{ \
  |  |  |  |   82|  2.14k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  2.14k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  2.14k|\
  |  |  |  |   85|  46.4k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 44.3k, False: 2.14k]
  |  |  |  |  ------------------
  |  |  |  |   86|  44.3k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  44.3k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 20.7k, False: 23.5k]
  |  |  |  |  ------------------
  |  |  |  |   88|  44.3k|\
  |  |  |  |   89|   109k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 65.1k, False: 44.3k]
  |  |  |  |  ------------------
  |  |  |  |   90|  65.1k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  44.3k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  44.3k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  88.6k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 7.29k, False: 37.0k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.63k, False: 38.6k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.63k, False: 31.3k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  58.9k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 14.6k, False: 44.3k]
  |  |  |  |  ------------------
  |  |  |  |   93|  44.3k|				q[i] = p[i]; \
  |  |  |  |   94|  44.3k|\
  |  |  |  |   95|  44.3k|			p += bands; \
  |  |  |  |   96|  44.3k|			q += bands; \
  |  |  |  |   97|  44.3k|		} \
  |  |  |  |   98|  2.14k|	}
  |  |  ------------------
  |  |  128|  2.14k|		} \
  |  |  129|  4.29k|	}
  ------------------
  221|  4.29k|			break;
  222|       |
  223|  3.20k|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (223:3): [True: 3.20k, False: 14.8k]
  ------------------
  224|  3.20k|			UNPRE(unsigned int, float);
  ------------------
  |  |  122|  3.20k|	{ \
  |  |  123|  3.20k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 1.56k, False: 1.64k]
  |  |  ------------------
  |  |  124|  1.56k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  1.56k|	{ \
  |  |  |  |  104|  1.56k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  1.56k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  1.56k|\
  |  |  |  |  107|  63.2k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 61.6k, False: 1.56k]
  |  |  |  |  ------------------
  |  |  |  |  108|  61.6k|			IN alpha = p[3]; \
  |  |  |  |  109|  61.6k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 9.90k, False: 51.7k]
  |  |  |  |  ------------------
  |  |  |  |  110|  61.6k|\
  |  |  |  |  111|  61.6k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  61.6k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  61.6k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  61.6k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  61.6k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   123k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 61.6k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 47.9k, False: 13.6k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 47.9k, False: 13.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  61.6k|\
  |  |  |  |  116|  61.6k|			p += 4; \
  |  |  |  |  117|  61.6k|			q += 4; \
  |  |  |  |  118|  61.6k|		} \
  |  |  |  |  119|  1.56k|	}
  |  |  ------------------
  |  |  125|  1.56k|		} \
  |  |  126|  3.20k|		else { \
  |  |  127|  1.64k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.64k|	{ \
  |  |  |  |   82|  1.64k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.64k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.64k|\
  |  |  |  |   85|  13.9k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 12.2k, False: 1.64k]
  |  |  |  |  ------------------
  |  |  |  |   86|  12.2k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  12.2k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 1.68k, False: 10.6k]
  |  |  |  |  ------------------
  |  |  |  |   88|  12.2k|\
  |  |  |  |   89|  30.2k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 17.9k, False: 12.2k]
  |  |  |  |  ------------------
  |  |  |  |   90|  17.9k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  12.2k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  12.2k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  24.5k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 12.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 9.54k, False: 2.74k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 9.54k, False: 2.74k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  14.5k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 2.22k, False: 12.2k]
  |  |  |  |  ------------------
  |  |  |  |   93|  12.2k|				q[i] = p[i]; \
  |  |  |  |   94|  12.2k|\
  |  |  |  |   95|  12.2k|			p += bands; \
  |  |  |  |   96|  12.2k|			q += bands; \
  |  |  |  |   97|  12.2k|		} \
  |  |  |  |   98|  1.64k|	}
  |  |  ------------------
  |  |  128|  1.64k|		} \
  |  |  129|  3.20k|	}
  ------------------
  225|  3.20k|			break;
  226|       |
  227|  3.48k|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (227:3): [True: 3.48k, False: 14.6k]
  ------------------
  228|  3.48k|			UNPRE(signed int, float);
  ------------------
  |  |  122|  3.48k|	{ \
  |  |  123|  3.48k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 2.07k, False: 1.41k]
  |  |  ------------------
  |  |  124|  2.07k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  2.07k|	{ \
  |  |  |  |  104|  2.07k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  2.07k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  2.07k|\
  |  |  |  |  107|  81.1k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 79.0k, False: 2.07k]
  |  |  |  |  ------------------
  |  |  |  |  108|  79.0k|			IN alpha = p[3]; \
  |  |  |  |  109|  79.0k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 11.0k, False: 68.0k]
  |  |  |  |  ------------------
  |  |  |  |  110|  79.0k|\
  |  |  |  |  111|  79.0k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  79.0k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  79.0k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  79.0k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  79.0k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   158k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 19.7k, False: 59.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 45.5k, False: 33.4k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 45.5k, False: 13.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  79.0k|\
  |  |  |  |  116|  79.0k|			p += 4; \
  |  |  |  |  117|  79.0k|			q += 4; \
  |  |  |  |  118|  79.0k|		} \
  |  |  |  |  119|  2.07k|	}
  |  |  ------------------
  |  |  125|  2.07k|		} \
  |  |  126|  3.48k|		else { \
  |  |  127|  1.41k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.41k|	{ \
  |  |  |  |   82|  1.41k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.41k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.41k|\
  |  |  |  |   85|  21.2k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 19.8k, False: 1.41k]
  |  |  |  |  ------------------
  |  |  |  |   86|  19.8k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  19.8k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 1.43k, False: 18.3k]
  |  |  |  |  ------------------
  |  |  |  |   88|  19.8k|\
  |  |  |  |   89|  54.0k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 34.1k, False: 19.8k]
  |  |  |  |  ------------------
  |  |  |  |   90|  34.1k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  19.8k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  19.8k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  39.6k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 5.46k, False: 14.3k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 11.7k, False: 8.06k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 11.7k, False: 2.59k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  24.6k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 4.78k, False: 19.8k]
  |  |  |  |  ------------------
  |  |  |  |   93|  19.8k|				q[i] = p[i]; \
  |  |  |  |   94|  19.8k|\
  |  |  |  |   95|  19.8k|			p += bands; \
  |  |  |  |   96|  19.8k|			q += bands; \
  |  |  |  |   97|  19.8k|		} \
  |  |  |  |   98|  1.41k|	}
  |  |  ------------------
  |  |  128|  1.41k|		} \
  |  |  129|  3.48k|	}
  ------------------
  229|  3.48k|			break;
  230|       |
  231|  3.21k|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (231:3): [True: 3.21k, False: 14.8k]
  ------------------
  232|  3.21k|			FUNPRE(float, float);
  ------------------
  |  |  174|  3.21k|	{ \
  |  |  175|  3.21k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (175:7): [True: 752, False: 2.46k]
  |  |  ------------------
  |  |  176|    752|			FUNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  155|    752|	{ \
  |  |  |  |  156|    752|		IN *restrict p = (IN *) in; \
  |  |  |  |  157|    752|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  158|    752|\
  |  |  |  |  159|  27.6k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (159:15): [True: 26.8k, False: 752]
  |  |  |  |  ------------------
  |  |  |  |  160|  26.8k|			IN alpha = p[3]; \
  |  |  |  |  161|  26.8k|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  26.8k|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 16.7k, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:17): [True: 16.0k, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |  162|  26.8k|\
  |  |  |  |  163|  26.8k|			q[0] = factor * p[0]; \
  |  |  |  |  164|  26.8k|			q[1] = factor * p[1]; \
  |  |  |  |  165|  26.8k|			q[2] = factor * p[2]; \
  |  |  |  |  166|  26.8k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  26.8k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  53.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 7.67k, False: 19.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 2.97k, False: 23.9k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 2.97k, False: 16.2k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  167|  26.8k|\
  |  |  |  |  168|  26.8k|			p += 4; \
  |  |  |  |  169|  26.8k|			q += 4; \
  |  |  |  |  170|  26.8k|		} \
  |  |  |  |  171|    752|	}
  |  |  ------------------
  |  |  177|    752|		} \
  |  |  178|  3.21k|		else { \
  |  |  179|  2.46k|			FUNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |  135|  2.46k|	{ \
  |  |  |  |  136|  2.46k|		IN *restrict p = (IN *) in; \
  |  |  |  |  137|  2.46k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  138|  2.46k|\
  |  |  |  |  139|  28.8k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (139:15): [True: 26.3k, False: 2.46k]
  |  |  |  |  ------------------
  |  |  |  |  140|  26.3k|			IN alpha = p[alpha_band]; \
  |  |  |  |  141|  26.3k|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  26.3k|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 23.2k, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (141:17): [True: 18.4k, False: 7.92k]
  |  |  |  |  ------------------
  |  |  |  |  142|  26.3k|\
  |  |  |  |  143|  61.0k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (143:16): [True: 34.6k, False: 26.3k]
  |  |  |  |  ------------------
  |  |  |  |  144|  34.6k|				q[i] = factor * p[i]; \
  |  |  |  |  145|  26.3k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  26.3k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  52.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 3.11k, False: 23.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 653, False: 25.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 653, False: 22.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|  42.3k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:29): [True: 15.9k, False: 26.3k]
  |  |  |  |  ------------------
  |  |  |  |  147|  26.3k|				q[i] = p[i]; \
  |  |  |  |  148|  26.3k|\
  |  |  |  |  149|  26.3k|			p += bands; \
  |  |  |  |  150|  26.3k|			q += bands; \
  |  |  |  |  151|  26.3k|		} \
  |  |  |  |  152|  2.46k|	}
  |  |  ------------------
  |  |  180|  2.46k|		} \
  |  |  181|  3.21k|	}
  ------------------
  233|  3.21k|			break;
  234|       |
  235|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (235:3): [True: 0, False: 18.1k]
  ------------------
  236|      0|			FUNPRE(double, double);
  ------------------
  |  |  174|      0|	{ \
  |  |  175|      0|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (175:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  176|      0|			FUNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  155|      0|	{ \
  |  |  |  |  156|      0|		IN *restrict p = (IN *) in; \
  |  |  |  |  157|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  158|      0|\
  |  |  |  |  159|      0|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (159:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  160|      0|			IN alpha = p[3]; \
  |  |  |  |  161|      0|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  162|      0|\
  |  |  |  |  163|      0|			q[0] = factor * p[0]; \
  |  |  |  |  164|      0|			q[1] = factor * p[1]; \
  |  |  |  |  165|      0|			q[2] = factor * p[2]; \
  |  |  |  |  166|      0|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  167|      0|\
  |  |  |  |  168|      0|			p += 4; \
  |  |  |  |  169|      0|			q += 4; \
  |  |  |  |  170|      0|		} \
  |  |  |  |  171|      0|	}
  |  |  ------------------
  |  |  177|      0|		} \
  |  |  178|      0|		else { \
  |  |  179|      0|			FUNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |  135|      0|	{ \
  |  |  |  |  136|      0|		IN *restrict p = (IN *) in; \
  |  |  |  |  137|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  138|      0|\
  |  |  |  |  139|      0|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (139:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  140|      0|			IN alpha = p[alpha_band]; \
  |  |  |  |  141|      0|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (141:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  142|      0|\
  |  |  |  |  143|      0|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (143:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  144|      0|				q[i] = factor * p[i]; \
  |  |  |  |  145|      0|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  147|      0|				q[i] = p[i]; \
  |  |  |  |  148|      0|\
  |  |  |  |  149|      0|			p += bands; \
  |  |  |  |  150|      0|			q += bands; \
  |  |  |  |  151|      0|		} \
  |  |  |  |  152|      0|	}
  |  |  ------------------
  |  |  180|      0|		} \
  |  |  181|      0|	}
  ------------------
  237|      0|			break;
  238|       |
  239|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (239:3): [True: 0, False: 18.1k]
  ------------------
  240|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (240:3): [True: 0, False: 18.1k]
  ------------------
  241|      0|		default:
  ------------------
  |  Branch (241:3): [True: 0, False: 18.1k]
  ------------------
  242|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|  18.1k|		}
  244|  18.1k|	}
  245|       |
  246|  1.44k|	return 0;
  247|  1.44k|}

wrap.c:vips_wrap_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|      1|	gobject_class->set_property = vips_object_set_property;
  112|      1|	gobject_class->get_property = vips_object_get_property;
  113|       |
  114|      1|	vobject_class->nickname = "wrap";
  115|      1|	vobject_class->description = _("wrap image origin");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  116|      1|	vobject_class->build = vips_wrap_build;
  117|       |
  118|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  119|      1|		_("Input"),
  120|      1|		_("Input image"),
  121|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  122|      1|		G_STRUCT_OFFSET(VipsWrap, in));
  123|       |
  124|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  125|      1|		_("x"),
  126|      1|		_("Left edge of input in output"),
  127|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  128|      1|		G_STRUCT_OFFSET(VipsWrap, x),
  129|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  130|       |
  131|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  132|      1|		_("y"),
  133|      1|		_("Top edge of input in output"),
  134|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  135|      1|		G_STRUCT_OFFSET(VipsWrap, y),
  136|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  137|      1|}

zoom.c:vips_zoom_class_init:
  358|      1|{
  359|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  361|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  362|       |
  363|      1|	gobject_class->set_property = vips_object_set_property;
  364|      1|	gobject_class->get_property = vips_object_get_property;
  365|       |
  366|      1|	vobject_class->nickname = "zoom";
  367|      1|	vobject_class->description = _("zoom an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  368|      1|	vobject_class->build = vips_zoom_build;
  369|       |
  370|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  371|       |
  372|      1|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  373|      1|		_("Input"),
  374|      1|		_("Input image"),
  375|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  376|      1|		G_STRUCT_OFFSET(VipsZoom, in));
  377|       |
  378|      1|	VIPS_ARG_INT(class, "xfac", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  379|      1|		_("Xfac"),
  380|      1|		_("Horizontal zoom factor"),
  381|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  382|      1|		G_STRUCT_OFFSET(VipsZoom, xfac),
  383|      1|		1, VIPS_MAX_COORD, 1);
  384|       |
  385|      1|	VIPS_ARG_INT(class, "yfac", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  386|      1|		_("Yfac"),
  387|      1|		_("Vertical zoom factor"),
  388|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  389|      1|		G_STRUCT_OFFSET(VipsZoom, yfac),
  390|      1|		1, VIPS_MAX_COORD, 1);
  391|      1|}

canny.c:vips_canny_class_init:
  427|      1|{
  428|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  430|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  431|       |
  432|      1|	gobject_class->set_property = vips_object_set_property;
  433|      1|	gobject_class->get_property = vips_object_get_property;
  434|       |
  435|      1|	object_class->nickname = "canny";
  436|      1|	object_class->description = _("Canny edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  437|      1|	object_class->build = vips_canny_build;
  438|       |
  439|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  440|       |
  441|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  442|      1|		_("Input"),
  443|      1|		_("Input image"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  445|      1|		G_STRUCT_OFFSET(VipsCanny, in));
  446|       |
  447|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  448|      1|		_("Output"),
  449|      1|		_("Output image"),
  450|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  451|      1|		G_STRUCT_OFFSET(VipsCanny, out));
  452|       |
  453|      1|	VIPS_ARG_DOUBLE(class, "sigma", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  454|      1|		_("Sigma"),
  455|      1|		_("Sigma of Gaussian"),
  456|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  457|      1|		G_STRUCT_OFFSET(VipsCanny, sigma),
  458|      1|		0.01, 1000, 1.4);
  459|       |
  460|      1|	VIPS_ARG_ENUM(class, "precision", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  461|      1|		_("Precision"),
  462|      1|		_("Convolve with this precision"),
  463|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  464|      1|		G_STRUCT_OFFSET(VipsCanny, precision),
  465|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  466|      1|}

compass.c:vips_compass_class_init:
  151|      1|{
  152|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  154|       |
  155|      1|	gobject_class->set_property = vips_object_set_property;
  156|      1|	gobject_class->get_property = vips_object_get_property;
  157|       |
  158|      1|	object_class->nickname = "compass";
  159|      1|	object_class->description = _("convolve with rotating mask");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  160|      1|	object_class->build = vips_compass_build;
  161|       |
  162|      1|	VIPS_ARG_INT(class, "times", 101,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  163|      1|		_("Times"),
  164|      1|		_("Rotate and convolve this many times"),
  165|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  166|      1|		G_STRUCT_OFFSET(VipsCompass, times),
  167|      1|		1, 1000, 2);
  168|       |
  169|      1|	VIPS_ARG_ENUM(class, "angle", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  170|      1|		_("Angle"),
  171|      1|		_("Rotate mask by this much between convolutions"),
  172|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  173|      1|		G_STRUCT_OFFSET(VipsCompass, angle),
  174|      1|		VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D90);
  175|       |
  176|      1|	VIPS_ARG_ENUM(class, "combine", 104,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  177|      1|		_("Combine"),
  178|      1|		_("Combine convolution results like this"),
  179|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  180|      1|		G_STRUCT_OFFSET(VipsCompass, combine),
  181|      1|		VIPS_TYPE_COMBINE, VIPS_COMBINE_MAX);
  182|       |
  183|      1|	VIPS_ARG_ENUM(class, "precision", 203,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  184|      1|		_("Precision"),
  185|      1|		_("Convolve with this precision"),
  186|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  187|      1|		G_STRUCT_OFFSET(VipsCompass, precision),
  188|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  189|       |
  190|      1|	VIPS_ARG_INT(class, "layers", 204,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Layers"),
  192|      1|		_("Use this many layers in approximation"),
  193|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsCompass, layers),
  195|      1|		1, 1000, 5);
  196|       |
  197|      1|	VIPS_ARG_INT(class, "cluster", 205,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  198|      1|		_("Cluster"),
  199|      1|		_("Cluster lines closer than this in approximation"),
  200|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsCompass, cluster),
  202|      1|		1, 100, 1);
  203|      1|}

conv.c:vips_conv_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  125|       |
  126|      1|	gobject_class->set_property = vips_object_set_property;
  127|      1|	gobject_class->get_property = vips_object_get_property;
  128|       |
  129|      1|	object_class->nickname = "conv";
  130|      1|	object_class->description = _("convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  131|      1|	object_class->build = vips_conv_build;
  132|       |
  133|      1|	VIPS_ARG_ENUM(class, "precision", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  134|      1|		_("Precision"),
  135|      1|		_("Convolve with this precision"),
  136|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  137|      1|		G_STRUCT_OFFSET(VipsConv, precision),
  138|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  139|       |
  140|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  141|      1|		_("Layers"),
  142|      1|		_("Use this many layers in approximation"),
  143|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsConv, layers),
  145|      1|		1, 1000, 5);
  146|       |
  147|      1|	VIPS_ARG_INT(class, "cluster", 105,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  148|      1|		_("Cluster"),
  149|      1|		_("Cluster lines closer than this in approximation"),
  150|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsConv, cluster),
  152|      1|		1, 100, 1);
  153|      1|}

conva.c:vips_conva_class_init:
 1311|      1|{
 1312|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1314|       |
 1315|      1|	gobject_class->set_property = vips_object_set_property;
 1316|      1|	gobject_class->get_property = vips_object_get_property;
 1317|       |
 1318|      1|	object_class->nickname = "conva";
 1319|      1|	object_class->description = _("approximate integer convolution");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1320|      1|	object_class->build = vips_conva_build;
 1321|       |
 1322|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1323|      1|		_("Layers"),
 1324|      1|		_("Use this many layers in approximation"),
 1325|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1326|      1|		G_STRUCT_OFFSET(VipsConva, layers),
 1327|      1|		1, 1000, 5);
 1328|       |
 1329|      1|	VIPS_ARG_INT(class, "cluster", 105,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1330|      1|		_("Cluster"),
 1331|      1|		_("Cluster lines closer than this in approximation"),
 1332|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1333|      1|		G_STRUCT_OFFSET(VipsConva, cluster),
 1334|      1|		1, 100, 1);
 1335|      1|}

convasep.c:vips_convasep_class_init:
  905|      1|{
  906|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  907|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  908|       |
  909|      1|	gobject_class->set_property = vips_object_set_property;
  910|      1|	gobject_class->get_property = vips_object_get_property;
  911|       |
  912|      1|	object_class->nickname = "convasep";
  913|      1|	object_class->description =
  914|      1|		_("approximate separable integer convolution");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  915|      1|	object_class->build = vips_convasep_build;
  916|       |
  917|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  918|      1|		_("Layers"),
  919|      1|		_("Use this many layers in approximation"),
  920|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  921|      1|		G_STRUCT_OFFSET(VipsConvasep, layers),
  922|      1|		1, 1000, 5);
  923|      1|}

convf.c:vips_convf_class_init:
  370|      1|{
  371|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  372|       |
  373|      1|	object_class->nickname = "convf";
  374|      1|	object_class->description = _("float convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	object_class->build = vips_convf_build;
  376|      1|}

convi.c:vips_convi_class_init:
 1234|      1|{
 1235|       |#ifdef HAVE_ORC
 1236|       |	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
 1237|       |#endif /*HAVE_ORC*/
 1238|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1239|       |
 1240|       |#ifdef HAVE_ORC
 1241|       |	gobject_class->finalize = vips_convi_finalize;
 1242|       |#endif /*HAVE_ORC*/
 1243|       |
 1244|      1|	object_class->nickname = "convi";
 1245|      1|	object_class->description = _("int convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1246|      1|	object_class->build = vips_convi_build;
 1247|      1|}

vips_convolution_operation_init:
  156|      2|{
  157|      2|	extern GType vips_conv_get_type(void);
  158|      2|	extern GType vips_conva_get_type(void);
  159|      2|	extern GType vips_convf_get_type(void);
  160|      2|	extern GType vips_convi_get_type(void);
  161|      2|	extern GType vips_convsep_get_type(void);
  162|      2|	extern GType vips_convasep_get_type(void);
  163|      2|	extern GType vips_compass_get_type(void);
  164|      2|	extern GType vips_fastcor_get_type(void);
  165|      2|	extern GType vips_spcor_get_type(void);
  166|      2|	extern GType vips_sharpen_get_type(void);
  167|      2|	extern GType vips_gaussblur_get_type(void);
  168|      2|	extern GType vips_sobel_get_type(void);
  169|      2|	extern GType vips_scharr_get_type(void);
  170|      2|	extern GType vips_prewitt_get_type(void);
  171|      2|	extern GType vips_canny_get_type(void);
  172|       |
  173|      2|	vips_conv_get_type();
  174|      2|	vips_conva_get_type();
  175|      2|	vips_convf_get_type();
  176|      2|	vips_convi_get_type();
  177|      2|	vips_compass_get_type();
  178|      2|	vips_convsep_get_type();
  179|      2|	vips_convasep_get_type();
  180|      2|	vips_fastcor_get_type();
  181|      2|	vips_spcor_get_type();
  182|      2|	vips_sharpen_get_type();
  183|      2|	vips_gaussblur_get_type();
  184|      2|	vips_sobel_get_type();
  185|      2|	vips_scharr_get_type();
  186|      2|	vips_prewitt_get_type();
  187|      2|	vips_canny_get_type();
  188|      2|}
convolution.c:vips_convolution_class_init:
  110|      1|{
  111|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  114|       |
  115|      1|	gobject_class->set_property = vips_object_set_property;
  116|      1|	gobject_class->get_property = vips_object_get_property;
  117|       |
  118|      1|	vobject_class->nickname = "convolution";
  119|      1|	vobject_class->description = _("convolution operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  120|      1|	vobject_class->build = vips_convolution_build;
  121|       |
  122|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  123|       |
  124|       |	/* Inputs set by subclassess.
  125|       |	 */
  126|       |
  127|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  128|      1|		_("Input"),
  129|      1|		_("Input image argument"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsConvolution, in));
  132|       |
  133|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  134|      1|		_("Output"),
  135|      1|		_("Output image"),
  136|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  137|      1|		G_STRUCT_OFFSET(VipsConvolution, out));
  138|       |
  139|      1|	VIPS_ARG_IMAGE(class, "mask", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  140|      1|		_("Mask"),
  141|      1|		_("Input matrix image"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsConvolution, mask));
  144|      1|}

convsep.c:vips_convsep_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	object_class->nickname = "convsep";
  126|      1|	object_class->description = _("separable convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	object_class->build = vips_convsep_build;
  128|       |
  129|      1|	VIPS_ARG_ENUM(class, "precision", 203,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  130|      1|		_("Precision"),
  131|      1|		_("Convolve with this precision"),
  132|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  133|      1|		G_STRUCT_OFFSET(VipsConvsep, precision),
  134|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  135|       |
  136|      1|	VIPS_ARG_INT(class, "layers", 204,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  137|      1|		_("Layers"),
  138|      1|		_("Use this many layers in approximation"),
  139|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  140|      1|		G_STRUCT_OFFSET(VipsConvsep, layers),
  141|      1|		1, 1000, 5);
  142|       |
  143|      1|	VIPS_ARG_INT(class, "cluster", 205,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  144|      1|		_("Cluster"),
  145|      1|		_("Cluster lines closer than this in approximation"),
  146|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  147|      1|		G_STRUCT_OFFSET(VipsConvsep, cluster),
  148|      1|		1, 100, 1);
  149|      1|}

correlation.c:vips_correlation_class_init:
  135|      1|{
  136|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  138|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  139|       |
  140|      1|	gobject_class->set_property = vips_object_set_property;
  141|      1|	gobject_class->get_property = vips_object_get_property;
  142|       |
  143|      1|	object_class->nickname = "correlation";
  144|      1|	object_class->description = _("correlation operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  145|      1|	object_class->build = vips_correlation_build;
  146|       |
  147|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  148|       |
  149|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  150|      1|		_("Input"),
  151|      1|		_("Input image argument"),
  152|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  153|      1|		G_STRUCT_OFFSET(VipsCorrelation, in));
  154|       |
  155|      1|	VIPS_ARG_IMAGE(class, "ref", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  156|      1|		_("Mask"),
  157|      1|		_("Input reference image"),
  158|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  159|      1|		G_STRUCT_OFFSET(VipsCorrelation, ref));
  160|       |
  161|      1|	VIPS_ARG_IMAGE(class, "out", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  162|      1|		_("Output"),
  163|      1|		_("Output image"),
  164|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  165|      1|		G_STRUCT_OFFSET(VipsCorrelation, out));
  166|      1|}

edge.c:vips_edge_class_init:
  204|      1|{
  205|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|       |
  208|      1|	gobject_class->dispose = vips_edge_dispose;
  209|      1|	gobject_class->set_property = vips_object_set_property;
  210|      1|	gobject_class->get_property = vips_object_get_property;
  211|       |
  212|      1|	object_class->nickname = "edge";
  213|      1|	object_class->description = _("Edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  214|      1|	object_class->build = vips_edge_build;
  215|       |
  216|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  217|      1|		_("Input"),
  218|      1|		_("Input image"),
  219|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  220|      1|		G_STRUCT_OFFSET(VipsEdge, in));
  221|       |
  222|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  223|      1|		_("Output"),
  224|      1|		_("Output image"),
  225|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  226|      1|		G_STRUCT_OFFSET(VipsEdge, out));
  227|      1|}
edge.c:vips_sobel_class_init:
  254|      1|{
  255|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  256|       |
  257|      1|	object_class->nickname = "sobel";
  258|      1|	object_class->description = _("Sobel edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  259|      1|	object_class->build = vips_sobel_build;
  260|      1|}
edge.c:vips_scharr_class_init:
  287|      1|{
  288|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  289|       |
  290|      1|	object_class->nickname = "scharr";
  291|      1|	object_class->description = _("Scharr edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  292|      1|	object_class->build = vips_scharr_build;
  293|      1|}
edge.c:vips_prewitt_class_init:
  320|      1|{
  321|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  322|       |
  323|      1|	object_class->nickname = "prewitt";
  324|      1|	object_class->description = _("Prewitt edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  325|      1|	object_class->build = vips_prewitt_build;
  326|      1|}

fastcor.c:vips_fastcor_class_init:
  213|      1|{
  214|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  215|      1|	VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_CORRELATION, VipsCorrelationClass))
  ------------------
  216|       |
  217|      1|	object_class->nickname = "fastcor";
  218|      1|	object_class->description = _("fast correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  219|       |
  220|      1|	cclass->format_table = vips_fastcor_format_table;
  221|      1|	cclass->correlation = vips_fastcor_correlation;
  222|      1|}

gaussblur.c:vips_gaussblur_class_init:
  117|      1|{
  118|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  120|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	object_class->nickname = "gaussblur";
  126|      1|	object_class->description = _("gaussian blur");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	object_class->build = vips_gaussblur_build;
  128|       |
  129|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  130|       |
  131|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  132|      1|		_("Input"),
  133|      1|		_("Input image"),
  134|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  135|      1|		G_STRUCT_OFFSET(VipsGaussblur, in));
  136|       |
  137|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  138|      1|		_("Output"),
  139|      1|		_("Output image"),
  140|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  141|      1|		G_STRUCT_OFFSET(VipsGaussblur, out));
  142|       |
  143|      1|	VIPS_ARG_DOUBLE(class, "sigma", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  144|      1|		_("Sigma"),
  145|      1|		_("Sigma of Gaussian"),
  146|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  147|      1|		G_STRUCT_OFFSET(VipsGaussblur, sigma),
  148|      1|		0.0, 1000, 1.5);
  149|       |
  150|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  151|      1|		_("Minimum amplitude"),
  152|      1|		_("Minimum amplitude of Gaussian"),
  153|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  154|      1|		G_STRUCT_OFFSET(VipsGaussblur, min_ampl),
  155|      1|		0.001, 1.0, 0.2);
  156|       |
  157|      1|	VIPS_ARG_ENUM(class, "precision", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  158|      1|		_("Precision"),
  159|      1|		_("Convolve with this precision"),
  160|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  161|      1|		G_STRUCT_OFFSET(VipsGaussblur, precision),
  162|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  163|      1|}

sharpen.c:vips_sharpen_class_init:
  307|      1|{
  308|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  310|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  311|       |
  312|      1|	gobject_class->set_property = vips_object_set_property;
  313|      1|	gobject_class->get_property = vips_object_get_property;
  314|       |
  315|      1|	object_class->nickname = "sharpen";
  316|      1|	object_class->description = _("unsharp masking for print");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  317|      1|	object_class->build = vips_sharpen_build;
  318|       |
  319|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  320|       |
  321|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  322|      1|		_("Input"),
  323|      1|		_("Input image"),
  324|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsSharpen, in));
  326|       |
  327|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  328|      1|		_("Output"),
  329|      1|		_("Output image"),
  330|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  331|      1|		G_STRUCT_OFFSET(VipsSharpen, out));
  332|       |
  333|      1|	VIPS_ARG_DOUBLE(class, "sigma", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  334|      1|		_("Sigma"),
  335|      1|		_("Sigma of Gaussian"),
  336|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  337|      1|		G_STRUCT_OFFSET(VipsSharpen, sigma),
  338|      1|		0.000001, 10.0, 0.5);
  339|       |
  340|      1|	VIPS_ARG_DOUBLE(class, "x1", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  341|      1|		_("x1"),
  342|      1|		_("Flat/jaggy threshold"),
  343|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  344|      1|		G_STRUCT_OFFSET(VipsSharpen, x1),
  345|      1|		0, 1000000, 2.0);
  346|       |
  347|      1|	VIPS_ARG_DOUBLE(class, "y2", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  348|      1|		_("y2"),
  349|      1|		_("Maximum brightening"),
  350|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  351|      1|		G_STRUCT_OFFSET(VipsSharpen, y2),
  352|      1|		0, 1000000, 10);
  353|       |
  354|      1|	VIPS_ARG_DOUBLE(class, "y3", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  355|      1|		_("y3"),
  356|      1|		_("Maximum darkening"),
  357|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  358|      1|		G_STRUCT_OFFSET(VipsSharpen, y3),
  359|      1|		0, 1000000, 20);
  360|       |
  361|      1|	VIPS_ARG_DOUBLE(class, "m1", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  362|      1|		_("m1"),
  363|      1|		_("Slope for flat areas"),
  364|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  365|      1|		G_STRUCT_OFFSET(VipsSharpen, m1),
  366|      1|		0, 1000000, 0.0);
  367|       |
  368|      1|	VIPS_ARG_DOUBLE(class, "m2", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  369|      1|		_("m2"),
  370|      1|		_("Slope for jaggy areas"),
  371|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  372|      1|		G_STRUCT_OFFSET(VipsSharpen, m2),
  373|      1|		0, 1000000, 3.0);
  374|       |
  375|       |	/* We used to have a radius control.
  376|       |	 */
  377|      1|	VIPS_ARG_INT(class, "radius", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  378|      1|		_("Radius"),
  379|      1|		_("Radius of Gaussian"),
  380|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  381|      1|		G_STRUCT_OFFSET(VipsSharpen, radius),
  382|      1|		1, 100, 1);
  383|      1|}

spcor.c:vips_spcor_class_init:
  312|      1|{
  313|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  314|      1|	VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_CORRELATION, VipsCorrelationClass))
  ------------------
  315|       |
  316|      1|	object_class->nickname = "spcor";
  317|      1|	object_class->description = _("spatial correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  318|       |
  319|      1|	cclass->format_table = vips_spcor_format_table;
  320|      1|	cclass->pre_generate = vips_spcor_pre_generate;
  321|      1|	cclass->correlation = vips_spcor_correlation;
  322|      1|}

vips_black:
  186|     27|{
  187|     27|	va_list ap;
  188|     27|	int result;
  189|       |
  190|     27|	va_start(ap, height);
  191|     27|	result = vips_call_split("black", ap, out, width, height);
  192|     27|	va_end(ap);
  193|       |
  194|     27|	return result;
  195|     27|}
black.c:vips_black_class_init:
  126|      1|{
  127|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|       |
  130|      1|	VIPS_DEBUG_MSG("vips_black_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "black";
  136|      1|	vobject_class->description = _("make a black image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_black_build;
  138|       |
  139|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  140|      1|		_("Width"),
  141|      1|		_("Image width in pixels"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsBlack, width),
  144|      1|		1, VIPS_MAX_COORD, 1);
  145|       |
  146|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("Height"),
  148|      1|		_("Image height in pixels"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsBlack, height),
  151|      1|		1, VIPS_MAX_COORD, 1);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "bands", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("Bands"),
  155|      1|		_("Number of bands in image"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsBlack, bands),
  158|      1|		1, VIPS_MAX_COORD, 1);
  159|      1|}
black.c:vips_black_build:
  101|     16|{
  102|     16|	VipsCreate *create = VIPS_CREATE(object);
  ------------------
  |  |   40|     16|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     16|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     16|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     16|		VIPS_TYPE_CREATE, VipsCreate))
  ------------------
  103|     16|	VipsBlack *black = (VipsBlack *) object;
  104|       |
  105|     16|	if (VIPS_OBJECT_CLASS(vips_black_parent_class)->build(object))
  ------------------
  |  |  435|     16|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     16|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     16|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (105:6): [True: 0, False: 16]
  ------------------
  106|      0|		return -1;
  107|       |
  108|     16|	vips_image_init_fields(create->out,
  109|     16|		black->width, black->height, black->bands,
  110|     16|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  111|     16|		VIPS_INTERPRETATION_MULTIBAND,
  112|     16|		1.0, 1.0);
  113|     16|	if (vips_image_pipelinev(create->out,
  ------------------
  |  Branch (113:6): [True: 0, False: 16]
  ------------------
  114|     16|			VIPS_DEMAND_STYLE_ANY, NULL))
  115|      0|		return -1;
  116|       |
  117|     16|	if (vips_image_generate(create->out,
  ------------------
  |  Branch (117:6): [True: 0, False: 16]
  ------------------
  118|     16|			NULL, vips_black_gen, NULL, NULL, NULL))
  119|      0|		return -1;
  120|       |
  121|     16|	return 0;
  122|     16|}
black.c:vips_black_gen:
   85|     27|{
   86|       |	/*
   87|       |	VipsRect *r = &out_region->valid;
   88|       |
   89|       |	printf("vips_black_gen: "
   90|       |		   "left = %d, top = %d, width = %d, height = %d\n",
   91|       |		r->left, r->top, r->width, r->height);
   92|       |	 */
   93|       |
   94|     27|	vips_region_black(out_region);
   95|       |
   96|     27|	return 0;
   97|     27|}
black.c:vips_black_init:
  163|     27|{
  164|     27|	black->bands = 1;
  165|     27|}

buildlut.c:vips_buildlut_class_init:
  250|      1|{
  251|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|       |
  254|      1|	gobject_class->dispose = vips_buildlut_dispose;
  255|      1|	gobject_class->set_property = vips_object_set_property;
  256|      1|	gobject_class->get_property = vips_object_get_property;
  257|       |
  258|      1|	vobject_class->nickname = "buildlut";
  259|      1|	vobject_class->description = _("build a look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  260|      1|	vobject_class->build = vips_buildlut_build;
  261|       |
  262|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  263|      1|		_("Input"),
  264|      1|		_("Matrix of XY coordinates"),
  265|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsBuildlut, in));
  267|      1|}

vips_create_operation_init:
  137|      2|{
  138|      2|	extern GType vips_black_get_type(void);
  139|      2|	extern GType vips_gaussmat_get_type(void);
  140|      2|	extern GType vips_logmat_get_type(void);
  141|      2|	extern GType vips_gaussnoise_get_type(void);
  142|       |#ifdef HAVE_PANGOCAIRO
  143|       |	extern GType vips_text_get_type(void);
  144|       |#endif /*HAVE_PANGOCAIRO*/
  145|      2|	extern GType vips_xyz_get_type(void);
  146|      2|	extern GType vips_sdf_get_type(void);
  147|      2|	extern GType vips_eye_get_type(void);
  148|      2|	extern GType vips_grey_get_type(void);
  149|      2|	extern GType vips_zone_get_type(void);
  150|      2|	extern GType vips_sines_get_type(void);
  151|      2|	extern GType vips_buildlut_get_type(void);
  152|      2|	extern GType vips_invertlut_get_type(void);
  153|      2|	extern GType vips_tonelut_get_type(void);
  154|      2|	extern GType vips_identity_get_type(void);
  155|      2|	extern GType vips_mask_butterworth_get_type(void);
  156|      2|	extern GType vips_mask_butterworth_ring_get_type(void);
  157|      2|	extern GType vips_mask_butterworth_band_get_type(void);
  158|      2|	extern GType vips_mask_gaussian_get_type(void);
  159|      2|	extern GType vips_mask_gaussian_ring_get_type(void);
  160|      2|	extern GType vips_mask_gaussian_band_get_type(void);
  161|      2|	extern GType vips_mask_ideal_get_type(void);
  162|      2|	extern GType vips_mask_ideal_ring_get_type(void);
  163|      2|	extern GType vips_mask_ideal_band_get_type(void);
  164|      2|	extern GType vips_mask_fractal_get_type(void);
  165|      2|	extern GType vips_fractsurf_get_type(void);
  166|      2|	extern GType vips_worley_get_type(void);
  167|      2|	extern GType vips_perlin_get_type(void);
  168|       |
  169|      2|	vips_black_get_type();
  170|      2|	vips_gaussmat_get_type();
  171|      2|	vips_logmat_get_type();
  172|      2|	vips_gaussnoise_get_type();
  173|       |#ifdef HAVE_PANGOCAIRO
  174|       |	vips_text_get_type();
  175|       |#endif /*HAVE_PANGOCAIRO*/
  176|      2|	vips_xyz_get_type();
  177|      2|	vips_sdf_get_type();
  178|      2|	vips_eye_get_type();
  179|      2|	vips_grey_get_type();
  180|      2|	vips_zone_get_type();
  181|      2|	vips_sines_get_type();
  182|      2|	vips_buildlut_get_type();
  183|      2|	vips_invertlut_get_type();
  184|      2|	vips_tonelut_get_type();
  185|      2|	vips_identity_get_type();
  186|      2|	vips_mask_ideal_get_type();
  187|      2|	vips_mask_ideal_ring_get_type();
  188|      2|	vips_mask_ideal_band_get_type();
  189|      2|	vips_mask_butterworth_get_type();
  190|      2|	vips_mask_butterworth_ring_get_type();
  191|      2|	vips_mask_butterworth_band_get_type();
  192|      2|	vips_mask_gaussian_get_type();
  193|      2|	vips_mask_gaussian_ring_get_type();
  194|      2|	vips_mask_gaussian_band_get_type();
  195|      2|	vips_mask_fractal_get_type();
  196|      2|	vips_fractsurf_get_type();
  197|      2|	vips_worley_get_type();
  198|      2|	vips_perlin_get_type();
  199|      2|}
create.c:vips_create_class_init:
  112|      1|{
  113|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	vobject_class->nickname = "create";
  120|      1|	vobject_class->description = _("create operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|      1|	vobject_class->build = vips_create_build;
  122|       |
  123|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  124|      1|		_("Output"),
  125|      1|		_("Output image"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsCreate, out));
  128|      1|}
create.c:vips_create_build:
   93|     16|{
   94|     16|	VipsCreate *create = VIPS_CREATE(object);
  ------------------
  |  |   40|     16|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     16|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     16|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     16|		VIPS_TYPE_CREATE, VipsCreate))
  ------------------
   95|       |
   96|       |#ifdef DEBUG
   97|       |	printf("vips_create_build: ");
   98|       |	vips_object_print_name(object);
   99|       |	printf("\n");
  100|       |#endif /*DEBUG*/
  101|       |
  102|     16|	g_object_set(create, "out", vips_image_new(), NULL);
  103|       |
  104|     16|	if (VIPS_OBJECT_CLASS(vips_create_parent_class)->build(object))
  ------------------
  |  |  435|     16|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     16|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     16|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (104:6): [True: 0, False: 16]
  ------------------
  105|      0|		return -1;
  106|       |
  107|     16|	return 0;
  108|     16|}
create.c:vips_create_init:
  132|     27|{
  133|     27|}

eye.c:vips_eye_class_init:
   93|      1|{
   94|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   97|       |
   98|      1|	gobject_class->set_property = vips_object_set_property;
   99|      1|	gobject_class->get_property = vips_object_get_property;
  100|       |
  101|      1|	vobject_class->nickname = "eye";
  102|      1|	vobject_class->description =
  103|      1|		_("make an image showing the eye's spatial response");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  104|       |
  105|      1|	point_class->point = vips_eye_point;
  106|       |
  107|      1|	VIPS_ARG_DOUBLE(class, "factor", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  108|      1|		_("Factor"),
  109|      1|		_("Maximum spatial frequency"),
  110|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  111|      1|		G_STRUCT_OFFSET(VipsEye, factor),
  112|      1|		0.0, 1.0, 0.5);
  113|      1|}

fractsurf.c:vips_fractsurf_class_init:
   92|      1|{
   93|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|       |
   96|      1|	gobject_class->set_property = vips_object_set_property;
   97|      1|	gobject_class->get_property = vips_object_get_property;
   98|       |
   99|      1|	vobject_class->nickname = "fractsurf";
  100|      1|	vobject_class->description = _("make a fractal surface");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  101|      1|	vobject_class->build = vips_fractsurf_build;
  102|       |
  103|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  104|      1|		_("Width"),
  105|      1|		_("Image width in pixels"),
  106|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  107|      1|		G_STRUCT_OFFSET(VipsFractsurf, width),
  108|      1|		1, VIPS_MAX_COORD, 64);
  109|       |
  110|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  111|      1|		_("Height"),
  112|      1|		_("Image height in pixels"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsFractsurf, height),
  115|      1|		1, VIPS_MAX_COORD, 64);
  116|       |
  117|      1|	VIPS_ARG_DOUBLE(class, "fractal_dimension", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  118|      1|		_("Fractal dimension"),
  119|      1|		_("Fractal dimension"),
  120|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  121|      1|		G_STRUCT_OFFSET(VipsFractsurf, fractal_dimension),
  122|      1|		2.0, 3.0, 2.5);
  123|      1|}

gaussmat.c:vips_gaussmat_class_init:
  173|      1|{
  174|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|       |
  177|      1|	gobject_class->set_property = vips_object_set_property;
  178|      1|	gobject_class->get_property = vips_object_get_property;
  179|       |
  180|      1|	vobject_class->nickname = "gaussmat";
  181|      1|	vobject_class->description = _("make a gaussian image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  182|      1|	vobject_class->build = vips_gaussmat_build;
  183|       |
  184|      1|	VIPS_ARG_DOUBLE(class, "sigma", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  185|      1|		_("Sigma"),
  186|      1|		_("Sigma of Gaussian"),
  187|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsGaussmat, sigma),
  189|      1|		0.000001, 10000.0, 1.0);
  190|       |
  191|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  192|      1|		_("Minimum amplitude"),
  193|      1|		_("Minimum amplitude of Gaussian"),
  194|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsGaussmat, min_ampl),
  196|      1|		0.000001, 10000.0, 0.1);
  197|       |
  198|      1|	VIPS_ARG_BOOL(class, "separable", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  199|      1|		_("Separable"),
  200|      1|		_("Generate separable Gaussian"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsGaussmat, separable),
  203|      1|		FALSE);
  204|       |
  205|      1|	VIPS_ARG_BOOL(class, "integer", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  206|      1|		_("Integer"),
  207|      1|		_("Generate integer Gaussian"),
  208|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  209|      1|		G_STRUCT_OFFSET(VipsGaussmat, integer),
  210|      1|		FALSE);
  211|       |
  212|      1|	VIPS_ARG_ENUM(class, "precision", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  213|      1|		_("Precision"),
  214|      1|		_("Generate with this precision"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  216|      1|		G_STRUCT_OFFSET(VipsGaussmat, precision),
  217|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  218|      1|}

gaussnoise.c:vips_gaussnoise_class_init:
  150|      1|{
  151|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  154|       |
  155|      1|	gobject_class->set_property = vips_object_set_property;
  156|      1|	gobject_class->get_property = vips_object_get_property;
  157|       |
  158|      1|	vobject_class->nickname = "gaussnoise";
  159|      1|	vobject_class->description = _("make a gaussnoise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  160|      1|	vobject_class->build = vips_gaussnoise_build;
  161|       |
  162|       |	/* We want a new set of numbers each time.
  163|       |	 */
  164|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  165|       |
  166|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  167|      1|		_("Width"),
  168|      1|		_("Image width in pixels"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsGaussnoise, width),
  171|      1|		1, VIPS_MAX_COORD, 1);
  172|       |
  173|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  174|      1|		_("Height"),
  175|      1|		_("Image height in pixels"),
  176|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  177|      1|		G_STRUCT_OFFSET(VipsGaussnoise, height),
  178|      1|		1, VIPS_MAX_COORD, 1);
  179|       |
  180|      1|	VIPS_ARG_DOUBLE(class, "mean", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  181|      1|		_("Mean"),
  182|      1|		_("Mean of pixels in generated image"),
  183|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsGaussnoise, mean),
  185|      1|		-10000000, 1000000, 128);
  186|       |
  187|      1|	VIPS_ARG_DOUBLE(class, "sigma", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  188|      1|		_("Sigma"),
  189|      1|		_("Standard deviation of pixels in generated image"),
  190|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  191|      1|		G_STRUCT_OFFSET(VipsGaussnoise, sigma),
  192|      1|		0, 100000, 30);
  193|       |
  194|      1|	VIPS_ARG_INT(class, "seed", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  195|      1|		_("Seed"),
  196|      1|		_("Random number seed"),
  197|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsGaussnoise, seed),
  199|      1|		INT_MIN, INT_MAX, 0);
  200|      1|}

grey.c:vips_grey_class_init:
   84|      1|{
   85|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   87|       |
   88|      1|	vobject_class->nickname = "grey";
   89|      1|	vobject_class->description = _("make a grey ramp image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   90|       |
   91|      1|	point_class->point = vips_grey_point;
   92|      1|	point_class->min = 0.0;
   93|      1|	point_class->max = 1.0;
   94|      1|}

identity.c:vips_identity_class_init:
  130|      1|{
  131|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|       |
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	vobject_class->nickname = "identity";
  138|      1|	vobject_class->description =
  139|      1|		_("make a 1D image where pixel values are indexes");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  140|      1|	vobject_class->build = vips_identity_build;
  141|       |
  142|      1|	VIPS_ARG_INT(class, "bands", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  143|      1|		_("Bands"),
  144|      1|		_("Number of bands in LUT"),
  145|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  146|      1|		G_STRUCT_OFFSET(VipsIdentity, bands),
  147|      1|		1, 100000, 1);
  148|       |
  149|      1|	VIPS_ARG_BOOL(class, "ushort", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  150|      1|		_("Ushort"),
  151|      1|		_("Create a 16-bit LUT"),
  152|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  153|      1|		G_STRUCT_OFFSET(VipsIdentity, ushort),
  154|      1|		FALSE);
  155|       |
  156|      1|	VIPS_ARG_INT(class, "size", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  157|      1|		_("Size"),
  158|      1|		_("Size of 16-bit LUT"),
  159|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  160|      1|		G_STRUCT_OFFSET(VipsIdentity, size),
  161|      1|		1, 65536, 65536);
  162|      1|}

invertlut.c:vips_invertlut_class_init:
  275|      1|{
  276|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|       |
  279|      1|	gobject_class->dispose = vips_invertlut_dispose;
  280|      1|	gobject_class->set_property = vips_object_set_property;
  281|      1|	gobject_class->get_property = vips_object_get_property;
  282|       |
  283|      1|	vobject_class->nickname = "invertlut";
  284|      1|	vobject_class->description = _("build an inverted look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  285|      1|	vobject_class->build = vips_invertlut_build;
  286|       |
  287|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  288|      1|		_("Input"),
  289|      1|		_("Matrix of XY coordinates"),
  290|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipsInvertlut, in));
  292|       |
  293|      1|	VIPS_ARG_INT(class, "size", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Size"),
  295|      1|		_("LUT size to generate"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsInvertlut, size),
  298|      1|		1, 1000000, 256);
  299|      1|}

logmat.c:vips_logmat_class_init:
  189|      1|{
  190|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	vobject_class->nickname = "logmat";
  197|      1|	vobject_class->description = _("make a Laplacian of Gaussian image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|      1|	vobject_class->build = vips_logmat_build;
  199|       |
  200|      1|	VIPS_ARG_DOUBLE(class, "sigma", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  201|      1|		_("Radius"),
  202|      1|		_("Radius of Gaussian"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsLogmat, sigma),
  205|      1|		0.000001, 10000.0, 1.0);
  206|       |
  207|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  208|      1|		_("Width"),
  209|      1|		_("Minimum amplitude of Gaussian"),
  210|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  211|      1|		G_STRUCT_OFFSET(VipsLogmat, min_ampl),
  212|      1|		0.000001, 10000.0, 0.1);
  213|       |
  214|      1|	VIPS_ARG_BOOL(class, "separable", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  215|      1|		_("Separable"),
  216|      1|		_("Generate separable Gaussian"),
  217|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  218|      1|		G_STRUCT_OFFSET(VipsLogmat, separable),
  219|      1|		FALSE);
  220|       |
  221|      1|	VIPS_ARG_BOOL(class, "integer", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  222|      1|		_("Integer"),
  223|      1|		_("Generate integer Gaussian"),
  224|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  225|      1|		G_STRUCT_OFFSET(VipsLogmat, integer),
  226|      1|		FALSE);
  227|       |
  228|      1|	VIPS_ARG_ENUM(class, "precision", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  229|      1|		_("Precision"),
  230|      1|		_("Generate with this precision"),
  231|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  232|      1|		G_STRUCT_OFFSET(VipsLogmat, precision),
  233|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  234|      1|}

mask.c:vips_mask_class_init:
  105|      1|{
  106|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	vobject_class->nickname = "mask";
  114|      1|	vobject_class->description = _("base class for frequency filters");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	point_class->point = vips_mask_point;
  117|      1|	point_class->min = 0.0;
  118|      1|	point_class->max = 1.0;
  119|      1|	point_class->interpretation = VIPS_INTERPRETATION_FOURIER;
  120|       |
  121|      1|	VIPS_ARG_BOOL(class, "optical", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  122|      1|		_("Optical"),
  123|      1|		_("Rotate quadrants to optical space"),
  124|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMask, optical),
  126|      1|		FALSE);
  127|       |
  128|      1|	VIPS_ARG_BOOL(class, "reject", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  129|      1|		_("Reject"),
  130|      1|		_("Invert the sense of the filter"),
  131|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  132|      1|		G_STRUCT_OFFSET(VipsMask, reject),
  133|      1|		FALSE);
  134|       |
  135|      1|	VIPS_ARG_BOOL(class, "nodc", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  136|      1|		_("Nodc"),
  137|      1|		_("Remove DC component"),
  138|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  139|      1|		G_STRUCT_OFFSET(VipsMask, nodc),
  140|      1|		FALSE);
  141|      1|}

mask_butterworth.c:vips_mask_butterworth_class_init:
   77|      1|{
   78|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   81|       |
   82|      1|	gobject_class->set_property = vips_object_set_property;
   83|      1|	gobject_class->get_property = vips_object_get_property;
   84|       |
   85|      1|	vobject_class->nickname = "mask_butterworth";
   86|      1|	vobject_class->description = _("make a butterworth filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   87|       |
   88|      1|	mask_class->point = vips_mask_butterworth_point;
   89|       |
   90|      1|	VIPS_ARG_DOUBLE(class, "order", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   91|      1|		_("Order"),
   92|      1|		_("Filter order"),
   93|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   94|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, order),
   95|      1|		1.0, 1000000.0, 1.0);
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Frequency cutoff"),
   99|      1|		_("Frequency cutoff"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, frequency_cutoff),
  102|      1|		0.0, 1000000.0, 0.5);
  103|       |
  104|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  105|      1|		_("Amplitude cutoff"),
  106|      1|		_("Amplitude cutoff"),
  107|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  108|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, amplitude_cutoff),
  109|      1|		0.0, 1.0, 0.5);
  110|      1|}

mask_butterworth_band.c:vips_mask_butterworth_band_class_init:
  101|      1|{
  102|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
  105|       |
  106|      1|	gobject_class->set_property = vips_object_set_property;
  107|      1|	gobject_class->get_property = vips_object_get_property;
  108|       |
  109|      1|	vobject_class->nickname = "mask_butterworth_band";
  110|      1|	vobject_class->description = _("make a butterworth_band filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  111|       |
  112|      1|	mask_class->point = vips_mask_butterworth_band_point;
  113|       |
  114|      1|	VIPS_ARG_DOUBLE(class, "order", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  115|      1|		_("Order"),
  116|      1|		_("Filter order"),
  117|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  118|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, order),
  119|      1|		1.0, 1000000.0, 1.0);
  120|       |
  121|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  122|      1|		_("Frequency cutoff x"),
  123|      1|		_("Frequency cutoff x"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_x),
  126|      1|		0.0, 1000000.0, 0.5);
  127|       |
  128|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  129|      1|		_("Frequency cutoff y"),
  130|      1|		_("Frequency cutoff y"),
  131|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  132|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_y),
  133|      1|		0.0, 1000000.0, 0.5);
  134|       |
  135|      1|	VIPS_ARG_DOUBLE(class, "radius", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  136|      1|		_("Radius"),
  137|      1|		_("Radius of circle"),
  138|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  139|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, radius),
  140|      1|		0.0, 1000000.0, 0.1);
  141|       |
  142|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  143|      1|		_("Amplitude cutoff"),
  144|      1|		_("Amplitude cutoff"),
  145|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  146|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, amplitude_cutoff),
  147|      1|		0.0, 1.0, 0.5);
  148|      1|}

mask_butterworth_ring.c:vips_mask_butterworth_ring_class_init:
   92|      1|{
   93|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   96|       |
   97|      1|	gobject_class->set_property = vips_object_set_property;
   98|      1|	gobject_class->get_property = vips_object_get_property;
   99|       |
  100|      1|	vobject_class->nickname = "mask_butterworth_ring";
  101|      1|	vobject_class->description = _("make a butterworth ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  102|       |
  103|      1|	mask_class->point = vips_mask_butterworth_ring_point;
  104|       |
  105|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  106|      1|		_("Ringwidth"),
  107|      1|		_("Ringwidth"),
  108|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  109|      1|		G_STRUCT_OFFSET(VipsMaskButterworthRing, ringwidth),
  110|      1|		0.0, 1000000.0, 0.1);
  111|      1|}

mask_fractal.c:vips_mask_fractal_class_init:
   79|      1|{
   80|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   83|       |
   84|      1|	gobject_class->set_property = vips_object_set_property;
   85|      1|	gobject_class->get_property = vips_object_get_property;
   86|       |
   87|      1|	vobject_class->nickname = "mask_fractal";
   88|      1|	vobject_class->description = _("make fractal filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   89|       |
   90|      1|	mask_class->point = vips_mask_fractal_point;
   91|       |
   92|      1|	VIPS_ARG_DOUBLE(class, "fractal_dimension", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   93|      1|		_("Fractal dimension"),
   94|      1|		_("Fractal dimension"),
   95|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   96|      1|		G_STRUCT_OFFSET(VipsMaskFractal, fractal_dimension),
   97|      1|		2.0, 3.0, 2.5);
   98|      1|}

mask_gaussian.c:vips_mask_gaussian_class_init:
   72|      1|{
   73|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   76|       |
   77|      1|	gobject_class->set_property = vips_object_set_property;
   78|      1|	gobject_class->get_property = vips_object_get_property;
   79|       |
   80|      1|	vobject_class->nickname = "mask_gaussian";
   81|      1|	vobject_class->description = _("make a gaussian filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|       |
   83|      1|	mask_class->point = vips_mask_gaussian_point;
   84|       |
   85|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   86|      1|		_("Frequency cutoff"),
   87|      1|		_("Frequency cutoff"),
   88|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   89|      1|		G_STRUCT_OFFSET(VipsMaskGaussian, frequency_cutoff),
   90|      1|		0.0, 1000000.0, 0.5);
   91|       |
   92|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   93|      1|		_("Amplitude cutoff"),
   94|      1|		_("Amplitude cutoff"),
   95|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   96|      1|		G_STRUCT_OFFSET(VipsMaskGaussian, amplitude_cutoff),
   97|      1|		0.0, 1.0, 0.5);
   98|      1|}

mask_gaussian_band.c:vips_mask_gaussian_band_class_init:
   93|      1|{
   94|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   97|       |
   98|      1|	gobject_class->set_property = vips_object_set_property;
   99|      1|	gobject_class->get_property = vips_object_get_property;
  100|       |
  101|      1|	vobject_class->nickname = "mask_gaussian_band";
  102|      1|	vobject_class->description = _("make a gaussian filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  103|       |
  104|      1|	mask_class->point = vips_mask_gaussian_band_point;
  105|       |
  106|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  107|      1|		_("Frequency cutoff x"),
  108|      1|		_("Frequency cutoff x"),
  109|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  110|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_x),
  111|      1|		0.0, 1000000.0, 0.5);
  112|       |
  113|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  114|      1|		_("Frequency cutoff y"),
  115|      1|		_("Frequency cutoff y"),
  116|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_y),
  118|      1|		0.0, 1000000.0, 0.5);
  119|       |
  120|      1|	VIPS_ARG_DOUBLE(class, "radius", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  121|      1|		_("Radius"),
  122|      1|		_("Radius of circle"),
  123|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, radius),
  125|      1|		0.0, 1000000.0, 0.1);
  126|       |
  127|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  128|      1|		_("Amplitude cutoff"),
  129|      1|		_("Amplitude cutoff"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, amplitude_cutoff),
  132|      1|		0.0, 1.0, 0.5);
  133|      1|}

mask_gaussian_ring.c:vips_mask_gaussian_ring_class_init:
   87|      1|{
   88|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   91|       |
   92|      1|	gobject_class->set_property = vips_object_set_property;
   93|      1|	gobject_class->get_property = vips_object_get_property;
   94|       |
   95|      1|	vobject_class->nickname = "mask_gaussian_ring";
   96|      1|	vobject_class->description = _("make a gaussian ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   97|       |
   98|      1|	mask_class->point = vips_mask_gaussian_ring_point;
   99|       |
  100|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  101|      1|		_("Ringwidth"),
  102|      1|		_("Ringwidth"),
  103|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  104|      1|		G_STRUCT_OFFSET(VipsMaskGaussianRing, ringwidth),
  105|      1|		0.0, 1000000.0, 0.5);
  106|      1|}

mask_ideal.c:vips_mask_ideal_class_init:
   70|      1|{
   71|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   74|       |
   75|      1|	gobject_class->set_property = vips_object_set_property;
   76|      1|	gobject_class->get_property = vips_object_get_property;
   77|       |
   78|      1|	vobject_class->nickname = "mask_ideal";
   79|      1|	vobject_class->description = _("make an ideal filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   80|       |
   81|      1|	mask_class->point = vips_mask_ideal_point;
   82|       |
   83|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   84|      1|		_("Frequency cutoff"),
   85|      1|		_("Frequency cutoff"),
   86|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   87|      1|		G_STRUCT_OFFSET(VipsMaskIdeal, frequency_cutoff),
   88|      1|		0.0, 1000000.0, 0.5);
   89|      1|}

mask_ideal_band.c:vips_mask_ideal_band_class_init:
   84|      1|{
   85|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   88|       |
   89|      1|	gobject_class->set_property = vips_object_set_property;
   90|      1|	gobject_class->get_property = vips_object_get_property;
   91|       |
   92|      1|	vobject_class->nickname = "mask_ideal_band";
   93|      1|	vobject_class->description = _("make an ideal band filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   94|       |
   95|      1|	mask_class->point = vips_mask_ideal_band_point;
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Frequency cutoff x"),
   99|      1|		_("Frequency cutoff x"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_x),
  102|      1|		0.0, 1000000.0, 0.5);
  103|       |
  104|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  105|      1|		_("Frequency cutoff y"),
  106|      1|		_("Frequency cutoff y"),
  107|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  108|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_y),
  109|      1|		0.0, 1000000.0, 0.5);
  110|       |
  111|      1|	VIPS_ARG_DOUBLE(class, "radius", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  112|      1|		_("Radius"),
  113|      1|		_("Radius of circle"),
  114|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  115|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, radius),
  116|      1|		0.0, 1000000.0, 0.1);
  117|      1|}

mask_ideal_ring.c:vips_mask_ideal_ring_class_init:
   84|      1|{
   85|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   88|       |
   89|      1|	gobject_class->set_property = vips_object_set_property;
   90|      1|	gobject_class->get_property = vips_object_get_property;
   91|       |
   92|      1|	vobject_class->nickname = "mask_ideal_ring";
   93|      1|	vobject_class->description = _("make an ideal ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   94|       |
   95|      1|	mask_class->point = vips_mask_ideal_ring_point;
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Ringwidth"),
   99|      1|		_("Ringwidth"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskIdealRing, ringwidth),
  102|      1|		0.0, 1000000.0, 0.5);
  103|      1|}

perlin.c:vips_perlin_class_init:
  278|      1|{
  279|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  280|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|       |
  282|      1|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      1|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  283|       |
  284|      1|	VIPS_ONCE(&once, vips_perlin_make_tables, NULL);
  ------------------
  |  |   93|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      1|	{ \
  |  |   95|      1|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      1|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      1| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      1|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      1|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      1|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      1|   else                                         \
  |  |  |  |  |  |  931|      1|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      1|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      1|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      1|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      1|	} \
  |  |   98|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|       |
  286|      1|	gobject_class->set_property = vips_object_set_property;
  287|      1|	gobject_class->get_property = vips_object_get_property;
  288|       |
  289|      1|	vobject_class->nickname = "perlin";
  290|      1|	vobject_class->description = _("make a perlin noise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  291|      1|	vobject_class->build = vips_perlin_build;
  292|       |
  293|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Width"),
  295|      1|		_("Image width in pixels"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsPerlin, width),
  298|      1|		1, VIPS_MAX_COORD, 1);
  299|       |
  300|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  301|      1|		_("Height"),
  302|      1|		_("Image height in pixels"),
  303|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  304|      1|		G_STRUCT_OFFSET(VipsPerlin, height),
  305|      1|		1, VIPS_MAX_COORD, 1);
  306|       |
  307|      1|	VIPS_ARG_INT(class, "cell_size", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  308|      1|		_("Cell size"),
  309|      1|		_("Size of Perlin cells"),
  310|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsPerlin, cell_size),
  312|      1|		1, VIPS_MAX_COORD, 256);
  313|       |
  314|      1|	VIPS_ARG_BOOL(class, "uchar", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  315|      1|		_("Uchar"),
  316|      1|		_("Output an unsigned char image"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsPerlin, uchar),
  319|      1|		FALSE);
  320|       |
  321|      1|	VIPS_ARG_INT(class, "seed", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  322|      1|		_("Seed"),
  323|      1|		_("Random number seed"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsPerlin, seed),
  326|      1|		INT_MIN, INT_MAX, 0);
  327|      1|}
perlin.c:vips_perlin_make_tables:
  263|      1|{
  264|      1|	int i;
  265|       |
  266|    257|	for (i = 0; i < 256; i++) {
  ------------------
  |  Branch (266:14): [True: 256, False: 1]
  ------------------
  267|    256|		double angle = 2 * VIPS_PI * i / 256.0;
  ------------------
  |  |   47|    256|#define VIPS_PI (3.14159265358979323846)
  ------------------
  268|       |
  269|    256|		vips_perlin_cos[i] = cos(angle);
  270|    256|		vips_perlin_sin[i] = sin(angle);
  271|    256|	}
  272|       |
  273|      1|	return NULL;
  274|      1|}

point.c:vips_point_class_init:
  124|      1|{
  125|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|       |
  128|      1|	gobject_class->set_property = vips_object_set_property;
  129|      1|	gobject_class->get_property = vips_object_get_property;
  130|       |
  131|      1|	vobject_class->nickname = "point";
  132|      1|	vobject_class->description = _("make a point image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  133|      1|	vobject_class->build = vips_point_build;
  134|       |
  135|      1|	class->point = NULL;
  136|      1|	class->min = -1.0;
  137|      1|	class->max = 1.0;
  138|      1|	class->interpretation = VIPS_INTERPRETATION_MULTIBAND;
  139|       |
  140|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  141|      1|		_("Width"),
  142|      1|		_("Image width in pixels"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsPoint, width),
  145|      1|		1, VIPS_MAX_COORD, 1);
  146|       |
  147|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  148|      1|		_("Height"),
  149|      1|		_("Image height in pixels"),
  150|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsPoint, height),
  152|      1|		1, VIPS_MAX_COORD, 1);
  153|       |
  154|      1|	VIPS_ARG_BOOL(class, "uchar", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  155|      1|		_("Uchar"),
  156|      1|		_("Output an unsigned char image"),
  157|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  158|      1|		G_STRUCT_OFFSET(VipsPoint, uchar),
  159|      1|		FALSE);
  160|      1|}

sdf.c:vips_sdf_class_init:
  290|      1|{
  291|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|       |
  294|      1|	VIPS_DEBUG_MSG("vips_sdf_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|       |
  296|      1|	gobject_class->set_property = vips_object_set_property;
  297|      1|	gobject_class->get_property = vips_object_get_property;
  298|       |
  299|      1|	vobject_class->nickname = "sdf";
  300|      1|	vobject_class->description = _("create an SDF image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  301|      1|	vobject_class->build = vips_sdf_build;
  302|       |
  303|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  304|      1|		_("Width"),
  305|      1|		_("Image width in pixels"),
  306|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  307|      1|		G_STRUCT_OFFSET(VipsSdf, width),
  308|      1|		1, VIPS_MAX_COORD, 1);
  309|       |
  310|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  311|      1|		_("Height"),
  312|      1|		_("Image height in pixels"),
  313|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  314|      1|		G_STRUCT_OFFSET(VipsSdf, height),
  315|      1|		1, VIPS_MAX_COORD, 1);
  316|       |
  317|      1|	VIPS_ARG_ENUM(class, "shape", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  318|      1|		_("Shape"),
  319|      1|		_("SDF shape to create"),
  320|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  321|      1|		G_STRUCT_OFFSET(VipsSdf, shape),
  322|      1|		VIPS_TYPE_SDF_SHAPE, VIPS_SDF_SHAPE_CIRCLE);
  323|       |
  324|      1|	VIPS_ARG_DOUBLE(class, "r", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  325|      1|		_("r"),
  326|      1|		_("Radius"),
  327|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  328|      1|		G_STRUCT_OFFSET(VipsSdf, r),
  329|      1|		0.0, VIPS_MAX_COORD, 50);
  330|       |
  331|      1|	VIPS_ARG_BOXED(class, "a", 13,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  332|      1|		_("a"),
  333|      1|		_("Point a"),
  334|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  335|      1|		G_STRUCT_OFFSET(VipsSdf, a_area),
  336|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  337|       |
  338|      1|	VIPS_ARG_BOXED(class, "b", 14,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  339|      1|		_("b"),
  340|      1|		_("Point b"),
  341|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  342|      1|		G_STRUCT_OFFSET(VipsSdf, b_area),
  343|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  344|       |
  345|      1|	VIPS_ARG_BOXED(class, "corners", 15,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  346|      1|		_("corners"),
  347|      1|		_("Corner radii"),
  348|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  349|      1|		G_STRUCT_OFFSET(VipsSdf, corners_area),
  350|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  351|       |
  352|      1|}

sines.c:vips_sines_class_init:
  113|      1|{
  114|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
  117|       |
  118|      1|	gobject_class->set_property = vips_object_set_property;
  119|      1|	gobject_class->get_property = vips_object_get_property;
  120|       |
  121|      1|	vobject_class->nickname = "sines";
  122|      1|	vobject_class->description = _("make a 2D sine wave");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  123|      1|	vobject_class->build = vips_sines_build;
  124|       |
  125|      1|	point_class->point = vips_sines_point;
  126|       |
  127|      1|	VIPS_ARG_DOUBLE(class, "hfreq", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  128|      1|		_("hfreq"),
  129|      1|		_("Horizontal spatial frequency"),
  130|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsSines, hfreq),
  132|      1|		0.0, 10000.0, 0.5);
  133|       |
  134|      1|	VIPS_ARG_DOUBLE(class, "vfreq", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  135|      1|		_("vfreq"),
  136|      1|		_("Vertical spatial frequency"),
  137|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  138|      1|		G_STRUCT_OFFSET(VipsSines, vfreq),
  139|      1|		0.0, 10000.0, 0.5);
  140|      1|}

tonelut.c:vips_tonelut_class_init:
  213|      1|{
  214|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  215|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|       |
  217|      1|	gobject_class->set_property = vips_object_set_property;
  218|      1|	gobject_class->get_property = vips_object_get_property;
  219|       |
  220|      1|	vobject_class->nickname = "tonelut";
  221|      1|	vobject_class->description = _("build a look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  222|      1|	vobject_class->build = vips_tonelut_build;
  223|       |
  224|      1|	VIPS_ARG_INT(class, "in_max", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  225|      1|		_("In-max"),
  226|      1|		_("Size of LUT to build"),
  227|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  228|      1|		G_STRUCT_OFFSET(VipsTonelut, in_max),
  229|      1|		1, 65535, 32767);
  230|       |
  231|      1|	VIPS_ARG_INT(class, "out_max", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  232|      1|		_("Out-max"),
  233|      1|		_("Maximum value in output LUT"),
  234|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsTonelut, out_max),
  236|      1|		1, 65535, 32767);
  237|       |
  238|      1|	VIPS_ARG_DOUBLE(class, "Lb", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  239|      1|		_("Black point"),
  240|      1|		_("Lowest value in output"),
  241|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsTonelut, Lb),
  243|      1|		0, 100, 0);
  244|       |
  245|      1|	VIPS_ARG_DOUBLE(class, "Lw", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  246|      1|		_("White point"),
  247|      1|		_("Highest value in output"),
  248|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsTonelut, Lw),
  250|      1|		0, 100, 100);
  251|       |
  252|      1|	VIPS_ARG_DOUBLE(class, "Ps", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  253|      1|		_("Shadow point"),
  254|      1|		_("Position of shadow"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsTonelut, Ps),
  257|      1|		0, 1, 0.2);
  258|       |
  259|      1|	VIPS_ARG_DOUBLE(class, "Pm", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  260|      1|		_("Mid-tone point"),
  261|      1|		_("Position of mid-tones"),
  262|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  263|      1|		G_STRUCT_OFFSET(VipsTonelut, Pm),
  264|      1|		0, 1, 0.5);
  265|       |
  266|      1|	VIPS_ARG_DOUBLE(class, "Ph", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  267|      1|		_("Highlight point"),
  268|      1|		_("Position of highlights"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsTonelut, Ph),
  271|      1|		0, 1, 0.8);
  272|       |
  273|      1|	VIPS_ARG_DOUBLE(class, "S", 11,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  274|      1|		_("Shadow adjust"),
  275|      1|		_("Adjust shadows by this much"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsTonelut, S),
  278|      1|		-30, 30, 0);
  279|       |
  280|      1|	VIPS_ARG_DOUBLE(class, "M", 12,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  281|      1|		_("Mid-tone adjust"),
  282|      1|		_("Adjust mid-tones by this much"),
  283|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsTonelut, M),
  285|      1|		-30, 30, 0);
  286|       |
  287|      1|	VIPS_ARG_DOUBLE(class, "H", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  288|      1|		_("Highlight adjust"),
  289|      1|		_("Adjust highlights by this much"),
  290|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipsTonelut, H),
  292|      1|		-30, 30, 0);
  293|      1|}

worley.c:vips_worley_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|       |
  299|      1|	gobject_class->set_property = vips_object_set_property;
  300|      1|	gobject_class->get_property = vips_object_get_property;
  301|       |
  302|      1|	vobject_class->nickname = "worley";
  303|      1|	vobject_class->description = _("make a worley noise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  304|      1|	vobject_class->build = vips_worley_build;
  305|       |
  306|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  307|      1|		_("Width"),
  308|      1|		_("Image width in pixels"),
  309|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  310|      1|		G_STRUCT_OFFSET(VipsWorley, width),
  311|      1|		1, VIPS_MAX_COORD, 1);
  312|       |
  313|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  314|      1|		_("Height"),
  315|      1|		_("Image height in pixels"),
  316|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  317|      1|		G_STRUCT_OFFSET(VipsWorley, height),
  318|      1|		1, VIPS_MAX_COORD, 1);
  319|       |
  320|      1|	VIPS_ARG_INT(class, "cell_size", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  321|      1|		_("Cell size"),
  322|      1|		_("Size of Worley cells"),
  323|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  324|      1|		G_STRUCT_OFFSET(VipsWorley, cell_size),
  325|      1|		1, VIPS_MAX_COORD, 256);
  326|       |
  327|      1|	VIPS_ARG_INT(class, "seed", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  328|      1|		_("Seed"),
  329|      1|		_("Random number seed"),
  330|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  331|      1|		G_STRUCT_OFFSET(VipsWorley, seed),
  332|      1|		INT_MIN, INT_MAX, 0);
  333|      1|}

xyz.c:vips_xyz_class_init:
  176|      1|{
  177|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	VIPS_DEBUG_MSG("vips_xyz_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|       |
  182|      1|	gobject_class->set_property = vips_object_set_property;
  183|      1|	gobject_class->get_property = vips_object_get_property;
  184|       |
  185|      1|	vobject_class->nickname = "xyz";
  186|      1|	vobject_class->description =
  187|      1|		_("make an image where pixel values are coordinates");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  188|      1|	vobject_class->build = vips_xyz_build;
  189|       |
  190|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Width"),
  192|      1|		_("Image width in pixels"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsXyz, width),
  195|      1|		1, VIPS_MAX_COORD, 64);
  196|       |
  197|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  198|      1|		_("Height"),
  199|      1|		_("Image height in pixels"),
  200|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsXyz, height),
  202|      1|		1, VIPS_MAX_COORD, 64);
  203|       |
  204|      1|	VIPS_ARG_INT(class, "csize", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  205|      1|		_("csize"),
  206|      1|		_("Size of third dimension"),
  207|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsXyz, csize),
  209|      1|		1, VIPS_MAX_COORD, 1);
  210|       |
  211|      1|	VIPS_ARG_INT(class, "dsize", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  212|      1|		_("dsize"),
  213|      1|		_("Size of fourth dimension"),
  214|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsXyz, dsize),
  216|      1|		1, VIPS_MAX_COORD, 1);
  217|       |
  218|      1|	VIPS_ARG_INT(class, "esize", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  219|      1|		_("esize"),
  220|      1|		_("Size of fifth dimension"),
  221|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsXyz, esize),
  223|      1|		1, VIPS_MAX_COORD, 1);
  224|      1|}

zone.c:vips_zone_class_init:
   85|      1|{
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   88|       |
   89|      1|	vobject_class->nickname = "zone";
   90|      1|	vobject_class->description = _("make a zone plate");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   91|       |
   92|      1|	point_class->point = vips_zone_point;
   93|      1|}

vips_draw_operation_init:
  151|      2|{
  152|      2|	extern GType vips_draw_rect_get_type(void);
  153|      2|	extern GType vips_draw_image_get_type(void);
  154|      2|	extern GType vips_draw_mask_get_type(void);
  155|      2|	extern GType vips_draw_line_get_type(void);
  156|      2|	extern GType vips_draw_circle_get_type(void);
  157|      2|	extern GType vips_draw_flood_get_type(void);
  158|      2|	extern GType vips_draw_smudge_get_type(void);
  159|       |
  160|      2|	vips_draw_rect_get_type();
  161|      2|	vips_draw_image_get_type();
  162|      2|	vips_draw_mask_get_type();
  163|      2|	vips_draw_line_get_type();
  164|      2|	vips_draw_circle_get_type();
  165|      2|	vips_draw_flood_get_type();
  166|      2|	vips_draw_smudge_get_type();
  167|      2|}
draw.c:vips_draw_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  126|       |
  127|      1|	gobject_class->set_property = vips_object_set_property;
  128|      1|	gobject_class->get_property = vips_object_get_property;
  129|       |
  130|      1|	vobject_class->nickname = "draw";
  131|      1|	vobject_class->description = _("draw operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  132|      1|	vobject_class->build = vips_draw_build;
  133|       |
  134|       |	// no draw operation is cached
  135|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  136|       |
  137|      1|	VIPS_ARG_IMAGE(class, "image", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  138|      1|		_("Image"),
  139|      1|		_("Image to draw on"),
  140|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_MODIFY,
  141|      1|		G_STRUCT_OFFSET(VipsDraw, image));
  142|      1|}

draw_circle.c:vips_draw_circle_class_init:
  222|      1|{
  223|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|       |
  226|      1|	gobject_class->set_property = vips_object_set_property;
  227|      1|	gobject_class->get_property = vips_object_get_property;
  228|       |
  229|      1|	vobject_class->nickname = "draw_circle";
  230|      1|	vobject_class->description = _("draw a circle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  231|      1|	vobject_class->build = vips_draw_circle_build;
  232|       |
  233|      1|	VIPS_ARG_INT(class, "cx", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  234|      1|		_("cx"),
  235|      1|		_("Centre of draw_circle"),
  236|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  237|      1|		G_STRUCT_OFFSET(VipsDrawCircle, cx),
  238|      1|		-1000000000, 1000000000, 0);
  239|       |
  240|      1|	VIPS_ARG_INT(class, "cy", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  241|      1|		_("cy"),
  242|      1|		_("Centre of draw_circle"),
  243|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  244|      1|		G_STRUCT_OFFSET(VipsDrawCircle, cy),
  245|      1|		-1000000000, 1000000000, 0);
  246|       |
  247|      1|	VIPS_ARG_INT(class, "radius", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  248|      1|		_("Radius"),
  249|      1|		_("Radius in pixels"),
  250|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  251|      1|		G_STRUCT_OFFSET(VipsDrawCircle, radius),
  252|      1|		0, 1000000000, 0);
  253|       |
  254|      1|	VIPS_ARG_BOOL(class, "fill", 6,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  255|      1|		_("Fill"),
  256|      1|		_("Draw a solid object"),
  257|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  258|      1|		G_STRUCT_OFFSET(VipsDrawCircle, fill),
  259|      1|		FALSE);
  260|      1|}

draw_flood.c:vips_draw_flood_class_init:
  554|      1|{
  555|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|       |
  558|      1|	gobject_class->set_property = vips_object_set_property;
  559|      1|	gobject_class->get_property = vips_object_get_property;
  560|       |
  561|      1|	vobject_class->nickname = "draw_flood";
  562|      1|	vobject_class->description = _("flood-fill an area");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  563|      1|	vobject_class->build = vips_draw_flood_build;
  564|       |
  565|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  566|      1|		_("x"),
  567|      1|		_("DrawFlood start point"),
  568|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  569|      1|		G_STRUCT_OFFSET(VipsDrawFlood, x),
  570|      1|		0, 1000000000, 0);
  571|       |
  572|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  573|      1|		_("y"),
  574|      1|		_("DrawFlood start point"),
  575|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  576|      1|		G_STRUCT_OFFSET(VipsDrawFlood, y),
  577|      1|		0, 1000000000, 0);
  578|       |
  579|      1|	VIPS_ARG_IMAGE(class, "test", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  580|      1|		_("Test"),
  581|      1|		_("Test pixels in this image"),
  582|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  583|      1|		G_STRUCT_OFFSET(VipsDrawFlood, test));
  584|       |
  585|      1|	VIPS_ARG_BOOL(class, "equal", 6,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  586|      1|		_("Equal"),
  587|      1|		_("DrawFlood while equal to edge"),
  588|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsDrawFlood, equal),
  590|      1|		FALSE);
  591|       |
  592|      1|	VIPS_ARG_INT(class, "left", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  593|      1|		_("Left"),
  594|      1|		_("Left edge of modified area"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  596|      1|		G_STRUCT_OFFSET(VipsDrawFlood, left),
  597|      1|		0, 1000000000, 0);
  598|       |
  599|      1|	VIPS_ARG_INT(class, "top", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  600|      1|		_("Top"),
  601|      1|		_("Top edge of modified area"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  603|      1|		G_STRUCT_OFFSET(VipsDrawFlood, top),
  604|      1|		0, 1000000000, 0);
  605|       |
  606|      1|	VIPS_ARG_INT(class, "width", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  607|      1|		_("Width"),
  608|      1|		_("Width of modified area"),
  609|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  610|      1|		G_STRUCT_OFFSET(VipsDrawFlood, width),
  611|      1|		0, 1000000000, 0);
  612|       |
  613|      1|	VIPS_ARG_INT(class, "height", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  614|      1|		_("Height"),
  615|      1|		_("Height of modified area"),
  616|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  617|      1|		G_STRUCT_OFFSET(VipsDrawFlood, height),
  618|      1|		0, 1000000000, 0);
  619|      1|}

draw_image.c:vips_draw_image_class_init:
  257|      1|{
  258|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|       |
  261|      1|	gobject_class->set_property = vips_object_set_property;
  262|      1|	gobject_class->get_property = vips_object_get_property;
  263|       |
  264|      1|	vobject_class->nickname = "draw_image";
  265|      1|	vobject_class->description = _("paint an image into another image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  266|      1|	vobject_class->build = vips_draw_image_build;
  267|       |
  268|      1|	VIPS_ARG_IMAGE(class, "sub", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  269|      1|		_("Sub-image"),
  270|      1|		_("Sub-image to insert into main image"),
  271|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  272|      1|		G_STRUCT_OFFSET(VipsDrawImage, sub));
  273|       |
  274|      1|	VIPS_ARG_INT(class, "x", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  275|      1|		_("x"),
  276|      1|		_("Draw image here"),
  277|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  278|      1|		G_STRUCT_OFFSET(VipsDrawImage, x),
  279|      1|		-1000000000, 1000000000, 0);
  280|       |
  281|      1|	VIPS_ARG_INT(class, "y", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  282|      1|		_("y"),
  283|      1|		_("Draw image here"),
  284|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  285|      1|		G_STRUCT_OFFSET(VipsDrawImage, y),
  286|      1|		-1000000000, 1000000000, 0);
  287|       |
  288|      1|	VIPS_ARG_ENUM(class, "mode", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  289|      1|		_("Mode"),
  290|      1|		_("Combining mode"),
  291|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  292|      1|		G_STRUCT_OFFSET(VipsDrawImage, mode),
  293|      1|		VIPS_TYPE_COMBINE_MODE, VIPS_COMBINE_MODE_SET);
  294|      1|}

draw_line.c:vips_draw_line_class_init:
  272|      1|{
  273|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|       |
  276|      1|	gobject_class->set_property = vips_object_set_property;
  277|      1|	gobject_class->get_property = vips_object_get_property;
  278|       |
  279|      1|	vobject_class->nickname = "draw_line";
  280|      1|	vobject_class->description = _("draw a line on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  281|      1|	vobject_class->build = vips_draw_line_build;
  282|       |
  283|      1|	VIPS_ARG_INT(class, "x1", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  284|      1|		_("x1"),
  285|      1|		_("Start of draw_line"),
  286|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  287|      1|		G_STRUCT_OFFSET(VipsDrawLine, x1),
  288|      1|		-1000000000, 1000000000, 0);
  289|       |
  290|      1|	VIPS_ARG_INT(class, "y1", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  291|      1|		_("y1"),
  292|      1|		_("Start of draw_line"),
  293|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  294|      1|		G_STRUCT_OFFSET(VipsDrawLine, y1),
  295|      1|		-1000000000, 1000000000, 0);
  296|       |
  297|      1|	VIPS_ARG_INT(class, "x2", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  298|      1|		_("x2"),
  299|      1|		_("End of draw_line"),
  300|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  301|      1|		G_STRUCT_OFFSET(VipsDrawLine, x2),
  302|      1|		-1000000000, 1000000000, 0);
  303|       |
  304|      1|	VIPS_ARG_INT(class, "y2", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  305|      1|		_("y2"),
  306|      1|		_("End of draw_line"),
  307|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  308|      1|		G_STRUCT_OFFSET(VipsDrawLine, y2),
  309|      1|		-1000000000, 1000000000, 0);
  310|      1|}

draw_mask.c:vips_draw_mask_class_init:
  320|      1|{
  321|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|       |
  324|      1|	gobject_class->set_property = vips_object_set_property;
  325|      1|	gobject_class->get_property = vips_object_get_property;
  326|       |
  327|      1|	vobject_class->nickname = "draw_mask";
  328|      1|	vobject_class->description = _("draw a mask on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  329|      1|	vobject_class->build = vips_draw_mask_build;
  330|       |
  331|      1|	VIPS_ARG_IMAGE(class, "mask", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  332|      1|		_("Mask"),
  333|      1|		_("Mask of pixels to draw"),
  334|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  335|      1|		G_STRUCT_OFFSET(VipsDrawMask, mask));
  336|       |
  337|      1|	VIPS_ARG_INT(class, "x", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  338|      1|		_("x"),
  339|      1|		_("Draw mask here"),
  340|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  341|      1|		G_STRUCT_OFFSET(VipsDrawMask, x),
  342|      1|		-1000000000, 1000000000, 0);
  343|       |
  344|      1|	VIPS_ARG_INT(class, "y", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  345|      1|		_("y"),
  346|      1|		_("Draw mask here"),
  347|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  348|      1|		G_STRUCT_OFFSET(VipsDrawMask, y),
  349|      1|		-1000000000, 1000000000, 0);
  350|      1|}

draw_rect.c:vips_draw_rect_class_init:
  161|      1|{
  162|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|       |
  165|      1|	gobject_class->set_property = vips_object_set_property;
  166|      1|	gobject_class->get_property = vips_object_get_property;
  167|       |
  168|      1|	vobject_class->nickname = "draw_rect";
  169|      1|	vobject_class->description = _("paint a rectangle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  170|      1|	vobject_class->build = vips_draw_rect_build;
  171|       |
  172|      1|	VIPS_ARG_INT(class, "left", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("Left"),
  174|      1|		_("Rect to fill"),
  175|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsDrawRect, left),
  177|      1|		-1000000000, 1000000000, 0);
  178|       |
  179|      1|	VIPS_ARG_INT(class, "top", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  180|      1|		_("Top"),
  181|      1|		_("Rect to fill"),
  182|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  183|      1|		G_STRUCT_OFFSET(VipsDrawRect, top),
  184|      1|		-1000000000, 1000000000, 0);
  185|       |
  186|      1|	VIPS_ARG_INT(class, "width", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  187|      1|		_("Width"),
  188|      1|		_("Rect to fill"),
  189|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  190|      1|		G_STRUCT_OFFSET(VipsDrawRect, width),
  191|      1|		-1000000000, 1000000000, 0);
  192|       |
  193|      1|	VIPS_ARG_INT(class, "height", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  194|      1|		_("Height"),
  195|      1|		_("Rect to fill"),
  196|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  197|      1|		G_STRUCT_OFFSET(VipsDrawRect, height),
  198|      1|		-1000000000, 1000000000, 0);
  199|       |
  200|      1|	VIPS_ARG_BOOL(class, "fill", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  201|      1|		_("Fill"),
  202|      1|		_("Draw a solid object"),
  203|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsDrawRect, fill),
  205|      1|		FALSE);
  206|      1|}

draw_smudge.c:vips_draw_smudge_class_init:
  203|      1|{
  204|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|       |
  207|      1|	gobject_class->set_property = vips_object_set_property;
  208|      1|	gobject_class->get_property = vips_object_get_property;
  209|       |
  210|      1|	vobject_class->nickname = "draw_smudge";
  211|      1|	vobject_class->description = _("blur a rectangle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  212|      1|	vobject_class->build = vips_draw_smudge_build;
  213|       |
  214|      1|	VIPS_ARG_INT(class, "left", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  215|      1|		_("Left"),
  216|      1|		_("Rect to fill"),
  217|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  218|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, left),
  219|      1|		-1000000000, 1000000000, 0);
  220|       |
  221|      1|	VIPS_ARG_INT(class, "top", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  222|      1|		_("Top"),
  223|      1|		_("Rect to fill"),
  224|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  225|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, top),
  226|      1|		-1000000000, 1000000000, 0);
  227|       |
  228|      1|	VIPS_ARG_INT(class, "width", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  229|      1|		_("Width"),
  230|      1|		_("Rect to fill"),
  231|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  232|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, width),
  233|      1|		-1000000000, 1000000000, 0);
  234|       |
  235|      1|	VIPS_ARG_INT(class, "height", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  236|      1|		_("Height"),
  237|      1|		_("Rect to fill"),
  238|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, height),
  240|      1|		-1000000000, 1000000000, 0);
  241|      1|}

drawink.c:vips_drawink_class_init:
   78|      1|{
   79|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|       |
   82|      1|	gobject_class->set_property = vips_object_set_property;
   83|      1|	gobject_class->get_property = vips_object_get_property;
   84|       |
   85|      1|	vobject_class->nickname = "drawink";
   86|      1|	vobject_class->description = _("draw with ink operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   87|      1|	vobject_class->build = vips_drawink_build;
   88|       |
   89|      1|	VIPS_ARG_BOXED(class, "ink", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
   90|      1|		_("Ink"),
   91|      1|		_("Color for pixels"),
   92|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   93|      1|		G_STRUCT_OFFSET(VipsDrawink, ink),
   94|      1|		VIPS_TYPE_ARRAY_DOUBLE);
   95|      1|}

analyzeload.c:vips_foreign_load_analyze_class_init:
  109|      1|{
  110|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  112|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  113|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  114|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	object_class->nickname = "analyzeload";
  120|      1|	object_class->description = _("load an Analyze6 image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|       |
  122|       |	/* This is fuzzed, but you're unlikely to want to use it on
  123|       |	 * untrusted files.
  124|       |	 */
  125|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  126|       |
  127|      1|	foreign_class->suffs = vips_foreign_analyze_suffs;
  128|       |
  129|       |	/* is_a() is not that quick ... lower the priority.
  130|       |	 */
  131|      1|	foreign_class->priority = -50;
  132|       |
  133|      1|	load_class->is_a = vips__isanalyze;
  134|      1|	load_class->get_flags_filename =
  135|      1|		vips_foreign_load_analyze_get_flags_filename;
  136|      1|	load_class->get_flags = vips_foreign_load_analyze_get_flags;
  137|      1|	load_class->header = vips_foreign_load_analyze_header;
  138|      1|	load_class->load = vips_foreign_load_analyze_load;
  139|       |
  140|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  141|      1|		_("Filename"),
  142|      1|		_("Filename to load from"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsForeignLoadAnalyze, filename),
  145|      1|		NULL);
  146|      1|}

vips__bgra2rgba:
  111|     27|{
  112|     27|	int x;
  113|       |
  114|     54|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (114:14): [True: 27, False: 27]
  ------------------
  115|     27|		guint32 bgra = GUINT32_FROM_BE(p[x]);
  ------------------
  |  |  392|     27|#define GUINT32_FROM_BE(val)	(GUINT32_TO_BE (val))
  ------------------
  116|       |
  117|     27|		guint rgba;
  118|       |
  119|       |		/* Leave G and A, swap R and B.
  120|       |		 */
  121|     27|		rgba =
  122|     27|			(bgra & 0x00ff00ff) |
  123|     27|			(bgra & 0x0000ff00) << 16 |
  124|     27|			(bgra & 0xff000000) >> 16;
  125|       |
  126|     27|		p[x] = GUINT32_TO_BE(rgba);
  127|     27|	}
  128|     27|}

cgifsave.c:vips_foreign_save_cgif_class_init:
  874|      1|{
  875|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  876|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  877|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  878|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  879|       |
  880|      1|	gobject_class->dispose = vips_foreign_save_cgif_dispose;
  881|      1|	gobject_class->set_property = vips_object_set_property;
  882|      1|	gobject_class->get_property = vips_object_get_property;
  883|       |
  884|      1|	object_class->nickname = "gifsave_base";
  885|      1|	object_class->description = _("save as gif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  886|      1|	object_class->build = vips_foreign_save_cgif_build;
  887|       |
  888|      1|	foreign_class->suffs = vips__save_cgif_suffs;
  889|       |
  890|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  891|      1|	save_class->format_table = bandfmt_gif;
  892|       |
  893|      1|	VIPS_ARG_DOUBLE(class, "dither", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  894|      1|		_("Dithering"),
  895|      1|		_("Amount of dithering"),
  896|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  897|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, dither),
  898|      1|		0.0, 1.0, 1.0);
  899|       |
  900|      1|	VIPS_ARG_INT(class, "effort", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  901|      1|		_("Effort"),
  902|      1|		_("Quantisation effort"),
  903|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  904|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, effort),
  905|      1|		1, 10, 7);
  906|       |
  907|      1|	VIPS_ARG_INT(class, "bitdepth", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  908|      1|		_("Bit depth"),
  909|      1|		_("Number of bits per pixel"),
  910|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  911|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, bitdepth),
  912|      1|		1, 8, 8);
  913|       |
  914|      1|	VIPS_ARG_DOUBLE(class, "interframe_maxerror", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  915|      1|		_("Maximum inter-frame error"),
  916|      1|		_("Maximum inter-frame error for transparency"),
  917|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  918|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interframe_maxerror),
  919|      1|		0, 32, 0.0);
  920|       |
  921|      1|	VIPS_ARG_BOOL(class, "reuse", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  922|      1|		_("Reuse palette"),
  923|      1|		_("Reuse palette from input"),
  924|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  925|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, reuse),
  926|      1|		FALSE);
  927|       |
  928|      1|	VIPS_ARG_DOUBLE(class, "interpalette_maxerror", 15,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  929|      1|		_("Maximum inter-palette error"),
  930|      1|		_("Maximum inter-palette error for palette reusage"),
  931|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  932|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interpalette_maxerror),
  933|      1|		0, 256, 3.0);
  934|       |
  935|      1|	VIPS_ARG_BOOL(class, "interlace", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  936|      1|		_("Interlaced"),
  937|      1|		_("Generate an interlaced (progressive) GIF"),
  938|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  939|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interlace),
  940|      1|		FALSE);
  941|       |
  942|       |	/* Not a good thing to have enabled by default since it can cause very
  943|       |	 * mysterious behaviour that varies with the input image.
  944|       |	 */
  945|      1|	VIPS_ARG_BOOL(class, "reoptimise", 17,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  946|      1|		_("Reoptimise palettes"),
  947|      1|		_("Reoptimise colour palettes"),
  948|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  949|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, reoptimise),
  950|      1|		FALSE);
  951|       |
  952|      1|	VIPS_ARG_BOOL(class, "keep_duplicate_frames", 18,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  953|      1|		_("Keep duplicate frames"),
  954|      1|		_("Keep duplicate frames in the output instead of combining them"),
  955|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  956|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, keep_duplicate_frames),
  957|      1|		FALSE);
  958|      1|}
cgifsave.c:vips_foreign_save_cgif_target_class_init:
 1000|      1|{
 1001|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1003|       |
 1004|      1|	gobject_class->set_property = vips_object_set_property;
 1005|      1|	gobject_class->get_property = vips_object_get_property;
 1006|       |
 1007|      1|	object_class->nickname = "gifsave_target";
 1008|      1|	object_class->build = vips_foreign_save_cgif_target_build;
 1009|       |
 1010|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1011|      1|		_("Target"),
 1012|      1|		_("Target to save to"),
 1013|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1014|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifTarget, target),
 1015|      1|		VIPS_TYPE_TARGET);
 1016|      1|}
cgifsave.c:vips_foreign_save_cgif_file_class_init:
 1048|      1|{
 1049|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1051|       |
 1052|      1|	gobject_class->set_property = vips_object_set_property;
 1053|      1|	gobject_class->get_property = vips_object_get_property;
 1054|       |
 1055|      1|	object_class->nickname = "gifsave";
 1056|      1|	object_class->build = vips_foreign_save_cgif_file_build;
 1057|       |
 1058|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1059|      1|		_("Filename"),
 1060|      1|		_("Filename to save to"),
 1061|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1062|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifFile, filename),
 1063|      1|		NULL);
 1064|      1|}
cgifsave.c:vips_foreign_save_cgif_buffer_class_init:
 1107|      1|{
 1108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1110|       |
 1111|      1|	gobject_class->set_property = vips_object_set_property;
 1112|      1|	gobject_class->get_property = vips_object_get_property;
 1113|       |
 1114|      1|	object_class->nickname = "gifsave_buffer";
 1115|      1|	object_class->build = vips_foreign_save_cgif_buffer_build;
 1116|       |
 1117|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1118|      1|		_("Buffer"),
 1119|      1|		_("Buffer to save to"),
 1120|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1121|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifBuffer, buf),
 1122|      1|		VIPS_TYPE_BLOB);
 1123|      1|}

csvload.c:vips_foreign_load_csv_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  471|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  472|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  473|       |
  474|      1|	gobject_class->dispose = vips_foreign_load_csv_dispose;
  475|      1|	gobject_class->set_property = vips_object_set_property;
  476|      1|	gobject_class->get_property = vips_object_get_property;
  477|       |
  478|      1|	object_class->nickname = "csvload_base";
  479|      1|	object_class->description = _("load csv");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  480|      1|	object_class->build = vips_foreign_load_csv_build;
  481|       |
  482|       |	/* This is fuzzed, but you're unlikely to want to use it on
  483|       |	 * untrusted files.
  484|       |	 */
  485|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  486|       |
  487|      1|	load_class->get_flags = vips_foreign_load_csv_get_flags;
  488|      1|	load_class->header = vips_foreign_load_csv_header;
  489|      1|	load_class->load = vips_foreign_load_csv_load;
  490|       |
  491|      1|	VIPS_ARG_INT(class, "skip", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  492|      1|		_("Skip"),
  493|      1|		_("Skip this many lines at the start of the file"),
  494|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  495|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, skip),
  496|      1|		0, 10000000, 0);
  497|       |
  498|      1|	VIPS_ARG_INT(class, "lines", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  499|      1|		_("Lines"),
  500|      1|		_("Read this many lines from the file"),
  501|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  502|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, lines),
  503|      1|		-1, 10000000, -1);
  504|       |
  505|      1|	VIPS_ARG_STRING(class, "whitespace", 22,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  506|      1|		_("Whitespace"),
  507|      1|		_("Set of whitespace characters"),
  508|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  509|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, whitespace),
  510|      1|		" ");
  511|       |
  512|      1|	VIPS_ARG_STRING(class, "separator", 23,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  513|      1|		_("Separator"),
  514|      1|		_("Set of separator characters"),
  515|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  516|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, separator),
  517|      1|		";,\t");
  518|      1|}
csvload.c:vips_foreign_load_csv_file_class_init:
  572|      1|{
  573|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  575|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  576|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  577|       |
  578|      1|	gobject_class->set_property = vips_object_set_property;
  579|      1|	gobject_class->get_property = vips_object_get_property;
  580|       |
  581|      1|	object_class->nickname = "csvload";
  582|      1|	object_class->build = vips_foreign_load_csv_file_build;
  583|       |
  584|      1|	foreign_class->suffs = vips_foreign_load_csv_suffs;
  585|       |
  586|      1|	load_class->get_flags_filename =
  587|      1|		vips_foreign_load_csv_file_get_flags_filename;
  588|       |
  589|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  590|      1|		_("Filename"),
  591|      1|		_("Filename to load from"),
  592|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  593|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsvFile, filename),
  594|      1|		NULL);
  595|      1|}
csvload.c:vips_foreign_load_csv_source_class_init:
  644|      1|{
  645|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  647|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  648|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  649|       |
  650|      1|	gobject_class->set_property = vips_object_set_property;
  651|      1|	gobject_class->get_property = vips_object_get_property;
  652|       |
  653|      1|	object_class->nickname = "csvload_source";
  654|      1|	object_class->build = vips_foreign_load_csv_source_build;
  655|       |
  656|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  657|       |
  658|      1|	load_class->is_a_source = vips_foreign_load_csv_source_is_a_source;
  659|       |
  660|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  661|      1|		_("Source"),
  662|      1|		_("Source to load from"),
  663|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  664|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsvSource, source),
  665|      1|		VIPS_TYPE_SOURCE);
  666|      1|}

csvsave.c:vips_foreign_save_csv_class_init:
  204|      1|{
  205|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  208|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  209|       |
  210|      1|	gobject_class->dispose = vips_foreign_save_csv_dispose;
  211|      1|	gobject_class->set_property = vips_object_set_property;
  212|      1|	gobject_class->get_property = vips_object_get_property;
  213|       |
  214|      1|	object_class->nickname = "csvsave_base";
  215|      1|	object_class->description = _("save image to csv");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  216|      1|	object_class->build = vips_foreign_save_csv_build;
  217|       |
  218|      1|	foreign_class->suffs = vips_foreign_save_csv_suffs;
  219|       |
  220|      1|	save_class->saveable = VIPS_SAVEABLE_MONO;
  221|       |
  222|      1|	VIPS_ARG_STRING(class, "separator", 13,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  223|      1|		_("Separator"),
  224|      1|		_("Separator characters"),
  225|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  226|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsv, separator),
  227|      1|		"\t");
  228|      1|}
csvsave.c:vips_foreign_save_csv_file_class_init:
  263|      1|{
  264|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  266|       |
  267|      1|	gobject_class->set_property = vips_object_set_property;
  268|      1|	gobject_class->get_property = vips_object_get_property;
  269|       |
  270|      1|	object_class->nickname = "csvsave";
  271|      1|	object_class->build = vips_foreign_save_csv_file_build;
  272|       |
  273|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  274|      1|		_("Filename"),
  275|      1|		_("Filename to save to"),
  276|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsvFile, filename),
  278|      1|		NULL);
  279|      1|}
csvsave.c:vips_foreign_save_csv_target_class_init:
  314|      1|{
  315|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  317|       |
  318|      1|	gobject_class->set_property = vips_object_set_property;
  319|      1|	gobject_class->get_property = vips_object_get_property;
  320|       |
  321|      1|	object_class->nickname = "csvsave_target";
  322|      1|	object_class->build = vips_foreign_save_csv_target_build;
  323|       |
  324|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  325|      1|		_("Target"),
  326|      1|		_("Target to save to"),
  327|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  328|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsvTarget, target),
  329|      1|		VIPS_TYPE_TARGET);
  330|      1|}

vips__exif_parse:
  522|  18.0k|{
  523|  18.0k|	const void *data;
  524|  18.0k|	size_t size;
  525|  18.0k|	ExifData *ed;
  526|  18.0k|	VipsExifParams params;
  527|  18.0k|	const char *str;
  528|       |
  529|  18.0k|	if (!vips_image_get_typeof(image, VIPS_META_EXIF_NAME))
  ------------------
  |  |   46|  18.0k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (529:6): [True: 0, False: 18.0k]
  ------------------
  530|      0|		return 0;
  531|  18.0k|	if (vips_image_get_blob(image, VIPS_META_EXIF_NAME, &data, &size))
  ------------------
  |  |   46|  18.0k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (531:6): [True: 0, False: 18.0k]
  ------------------
  532|      0|		return -1;
  533|  18.0k|	if (!(ed = vips_exif_load_data_without_fix(data, size)))
  ------------------
  |  Branch (533:6): [True: 0, False: 18.0k]
  ------------------
  534|      0|		return -1;
  535|       |
  536|       |#ifdef DEBUG_VERBOSE
  537|       |	show_tags(ed);
  538|       |	show_values(ed);
  539|       |#endif /*DEBUG_VERBOSE*/
  540|       |
  541|       |	/* Look for resolution fields and use them to set the VIPS xres/yres
  542|       |	 * fields.
  543|       |	 *
  544|       |	 * If the fields are missing, set them from the image, which will have
  545|       |	 * previously had them set from something like JFIF.
  546|       |	 */
  547|  18.0k|	if (vips_image_resolution_from_exif(image, ed) &&
  ------------------
  |  Branch (547:6): [True: 2.46k, False: 15.6k]
  ------------------
  548|  18.0k|		vips_exif_resolution_from_image(ed, image)) {
  ------------------
  |  Branch (548:3): [True: 0, False: 2.46k]
  ------------------
  549|      0|		exif_data_free(ed);
  550|      0|		return -1;
  551|      0|	}
  552|       |
  553|       |	/* Make sure all required fields are there before we attach the vips
  554|       |	 * metadata.
  555|       |	 */
  556|  18.0k|	exif_data_fix(ed);
  557|       |
  558|       |	/* Attach informational fields for what we find.
  559|       |	 */
  560|  18.0k|	params.image = image;
  561|  18.0k|	params.ed = ed;
  562|  18.0k|	exif_data_foreach_content(ed,
  563|  18.0k|		(ExifDataForeachContentFunc) vips_exif_get_content, &params);
  564|       |
  565|  18.0k|	vips_image_set_blob_copy(image,
  566|  18.0k|		"jpeg-thumbnail-data", ed->data, ed->size);
  567|       |
  568|  18.0k|	exif_data_free(ed);
  569|       |
  570|       |	/* Orientation handling. ifd0 has the Orientation tag for the main
  571|       |	 * image.
  572|       |	 */
  573|  18.0k|	if (vips_image_get_typeof(image, "exif-ifd0-Orientation") != 0 &&
  ------------------
  |  Branch (573:6): [True: 16.5k, False: 1.53k]
  ------------------
  574|  18.0k|		!vips_image_get_string(image,
  ------------------
  |  Branch (574:3): [True: 16.5k, False: 0]
  ------------------
  575|  16.5k|			"exif-ifd0-Orientation", &str)) {
  576|  16.5k|		int orientation;
  577|       |
  578|  16.5k|		orientation = atoi(str);
  579|  16.5k|		if (orientation < 1 ||
  ------------------
  |  Branch (579:7): [True: 78, False: 16.4k]
  ------------------
  580|  16.5k|			orientation > 8)
  ------------------
  |  Branch (580:4): [True: 144, False: 16.3k]
  ------------------
  581|    222|			orientation = 1;
  582|  16.5k|		vips_image_set_int(image, VIPS_META_ORIENTATION, orientation);
  ------------------
  |  |  149|  16.5k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  583|  16.5k|	}
  584|       |
  585|  18.0k|	return 0;
  586|  18.0k|}
vips__exif_update:
 1428|  15.5k|{
 1429|  15.5k|	unsigned char *data;
 1430|  15.5k|	size_t length;
 1431|  15.5k|	unsigned int idl;
 1432|  15.5k|	ExifData *ed;
 1433|       |
 1434|       |	/* Either parse from the embedded EXIF, or if there's none, make
 1435|       |	 * some fresh EXIF we can write the resolution to.
 1436|       |	 */
 1437|  15.5k|	if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) {
  ------------------
  |  |   46|  15.5k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1437:6): [True: 1.00k, False: 14.5k]
  ------------------
 1438|  1.00k|		if (vips_image_get_blob(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  1.00k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1438:7): [True: 0, False: 1.00k]
  ------------------
 1439|  1.00k|				(void *) &data, &length))
 1440|      0|			return -1;
 1441|       |
 1442|  1.00k|		if (!(ed = vips_exif_load_data_without_fix(data, length)))
  ------------------
  |  Branch (1442:7): [True: 0, False: 1.00k]
  ------------------
 1443|      0|			return -1;
 1444|  1.00k|	}
 1445|  14.5k|	else {
 1446|  14.5k|		ed = exif_data_new();
 1447|       |
 1448|  14.5k|		exif_data_set_option(ed,
 1449|  14.5k|			EXIF_DATA_OPTION_FOLLOW_SPECIFICATION);
 1450|  14.5k|		exif_data_set_data_type(ed, EXIF_DATA_TYPE_COMPRESSED);
 1451|  14.5k|		exif_data_set_byte_order(ed, EXIF_BYTE_ORDER_INTEL);
 1452|  14.5k|	}
 1453|       |
 1454|       |	/* Make sure all required fields are there before we attach the vips
 1455|       |	 * metadata.
 1456|       |	 */
 1457|  15.5k|	exif_data_fix(ed);
 1458|       |
 1459|       |	/* Update EXIF tags from the image metadata.
 1460|       |	 */
 1461|  15.5k|	vips_exif_update(ed, image);
 1462|       |
 1463|       |	/* Update EXIF resolution from the vips image header.
 1464|       |	 */
 1465|  15.5k|	if (vips_exif_resolution_from_image(ed, image)) {
  ------------------
  |  Branch (1465:6): [True: 0, False: 15.5k]
  ------------------
 1466|      0|		exif_data_free(ed);
 1467|      0|		return -1;
 1468|      0|	}
 1469|       |
 1470|       |	/* Update EXIF image dimensions from the vips image header.
 1471|       |	 */
 1472|  15.5k|	if (vips_exif_set_dimensions(ed, image)) {
  ------------------
  |  Branch (1472:6): [True: 0, False: 15.5k]
  ------------------
 1473|      0|		exif_data_free(ed);
 1474|      0|		return -1;
 1475|      0|	}
 1476|       |
 1477|       |	/* Update EXIF orientation from the vips image header.
 1478|       |	 */
 1479|  15.5k|	if (vips_exif_set_orientation(ed, image)) {
  ------------------
  |  Branch (1479:6): [True: 0, False: 15.5k]
  ------------------
 1480|      0|		exif_data_free(ed);
 1481|      0|		return -1;
 1482|      0|	}
 1483|       |
 1484|       |	/* Update the thumbnail.
 1485|       |	 */
 1486|  15.5k|	if (vips_exif_set_thumbnail(ed, image)) {
  ------------------
  |  Branch (1486:6): [True: 0, False: 15.5k]
  ------------------
 1487|      0|		exif_data_free(ed);
 1488|      0|		return -1;
 1489|      0|	}
 1490|       |
 1491|       |	/* Reserialise and write. exif_data_save_data() returns an int for some
 1492|       |	 * reason.
 1493|       |	 */
 1494|  15.5k|	exif_data_save_data(ed, &data, &idl);
 1495|  15.5k|	if (!idl) {
  ------------------
  |  Branch (1495:6): [True: 0, False: 15.5k]
  ------------------
 1496|      0|		vips_error("exif", "%s", _("error saving EXIF"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1497|      0|		exif_data_free(ed);
 1498|      0|		return -1;
 1499|      0|	}
 1500|  15.5k|	length = idl;
 1501|       |
 1502|       |#ifdef DEBUG
 1503|       |	printf("vips__exif_update: generated %zd bytes of EXIF\n", length);
 1504|       |#endif /*DEBUG*/
 1505|       |
 1506|  15.5k|	vips_image_set_blob(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  15.5k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
 1507|  15.5k|		(VipsCallbackFn) vips_area_free_cb, data, length);
 1508|       |
 1509|  15.5k|	exif_data_free(ed);
 1510|       |
 1511|  15.5k|	return 0;
 1512|  15.5k|}
exif.c:vips_exif_load_data_without_fix:
  192|  19.0k|{
  193|  19.0k|	ExifData *ed;
  194|       |
  195|       |	/* exif_data_load_data() only allows uint for length. Limit it to less
  196|       |	 * than that: 2**23 should be enough for anyone.
  197|       |	 */
  198|  19.0k|	if (length < 4) {
  ------------------
  |  Branch (198:6): [True: 0, False: 19.0k]
  ------------------
  199|      0|		vips_error("exif", "%s", _("exif too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  200|      0|		return NULL;
  201|      0|	}
  202|  19.0k|	if (length > 1 << 23) {
  ------------------
  |  Branch (202:6): [True: 0, False: 19.0k]
  ------------------
  203|      0|		vips_error("exif", "%s", _("exif too large"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      0|		return NULL;
  205|      0|	}
  206|       |
  207|  19.0k|	if (!(ed = exif_data_new())) {
  ------------------
  |  Branch (207:6): [True: 0, False: 19.0k]
  ------------------
  208|      0|		vips_error("exif", "%s", _("unable to init exif"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  209|      0|		return NULL;
  210|      0|	}
  211|       |
  212|  19.0k|	exif_data_unset_option(ed, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION);
  213|  19.0k|	if (!vips_isprefix("Exif", (char *) data)) {
  ------------------
  |  Branch (213:6): [True: 29, False: 19.0k]
  ------------------
  214|       |		/* Ensure "Exif" prefix as loaders may not provide it.
  215|       |		 */
  216|     29|		void *data_with_prefix;
  217|     29|		data_with_prefix = g_malloc0(length + 6);
  218|     29|		memcpy(data_with_prefix, "Exif\0\0", 6);
  219|     29|		memcpy((char *) data_with_prefix + 6, data, length);
  220|     29|		exif_data_load_data(ed, data_with_prefix, length + 6);
  221|     29|		g_free(data_with_prefix);
  222|     29|	}
  223|  19.0k|	else
  224|  19.0k|		exif_data_load_data(ed, data, length);
  225|       |
  226|  19.0k|	return ed;
  227|  19.0k|}
exif.c:vips_image_resolution_from_exif:
  442|  18.0k|{
  443|  18.0k|	double xres, yres;
  444|  18.0k|	int unit;
  445|       |
  446|       |	/* The main image xres/yres are in ifd0. ifd1 has xres/yres of the
  447|       |	 * image thumbnail, if any.
  448|       |	 *
  449|       |	 * Don't warn about missing res fields, it's very common, especially for
  450|       |	 * things like webp.
  451|       |	 */
  452|  18.0k|	if (vips_exif_entry_get_double(ed, 0, EXIF_TAG_X_RESOLUTION, &xres) ||
  ------------------
  |  Branch (452:6): [True: 1.50k, False: 16.5k]
  ------------------
  453|  18.0k|		vips_exif_entry_get_double(ed,
  ------------------
  |  Branch (453:3): [True: 952, False: 15.6k]
  ------------------
  454|  16.5k|			0, EXIF_TAG_Y_RESOLUTION, &yres))
  455|  2.45k|		return -1;
  456|       |
  457|       |	/* resuint is optional and defaults to inch.
  458|       |	 */
  459|  15.6k|	unit = 2;
  460|  15.6k|	(void) vips_exif_entry_get_int(ed,
  461|  15.6k|		0, EXIF_TAG_RESOLUTION_UNIT, &unit);
  462|       |
  463|       |#ifdef DEBUG
  464|       |	printf("vips_image_resolution_from_exif: seen exif tags "
  465|       |		   "xres = %g, yres = %g, unit = %d\n",
  466|       |		xres, yres, unit);
  467|       |#endif /*DEBUG*/
  468|       |
  469|  15.6k|	switch (unit) {
  470|      5|	case 1:
  ------------------
  |  Branch (470:2): [True: 5, False: 15.6k]
  ------------------
  471|       |		/* No units, instead xres / yres gives the pixel aspect ratio.
  472|       |		 */
  473|      5|		break;
  474|       |
  475|  15.3k|	case 2:
  ------------------
  |  Branch (475:2): [True: 15.3k, False: 286]
  ------------------
  476|       |		/* In inches.
  477|       |		 */
  478|  15.3k|		xres /= 25.4;
  479|  15.3k|		yres /= 25.4;
  480|  15.3k|		vips_image_set_string(image,
  481|  15.3k|			VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|  15.3k|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  482|  15.3k|		break;
  483|       |
  484|    275|	case 3:
  ------------------
  |  Branch (484:2): [True: 275, False: 15.3k]
  ------------------
  485|       |		/* In cm.
  486|       |		 */
  487|    275|		xres /= 10.0;
  488|    275|		yres /= 10.0;
  489|    275|		vips_image_set_string(image,
  490|    275|			VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|    275|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  491|    275|		break;
  492|       |
  493|      6|	default:
  ------------------
  |  Branch (493:2): [True: 6, False: 15.6k]
  ------------------
  494|      6|		g_warning("%s", _("unknown EXIF resolution unit"));
  ------------------
  |  |  338|      6|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      6|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      6|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      6|                               __VA_ARGS__)
  ------------------
  495|      6|		return -1;
  496|  15.6k|	}
  497|       |
  498|       |#ifdef DEBUG
  499|       |	printf("vips_image_resolution_from_exif: "
  500|       |		   "seen exif resolution %g, %g p/mm\n",
  501|       |		xres, yres);
  502|       |#endif /*DEBUG*/
  503|       |
  504|       |	/* Don't allow negative resolution.
  505|       |	 */
  506|  15.6k|	image->Xres = VIPS_MAX(0, xres);
  ------------------
  |  |   54|  15.6k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 6, False: 15.5k]
  |  |  ------------------
  ------------------
  507|  15.6k|	image->Yres = VIPS_MAX(0, yres);
  ------------------
  |  |   54|  15.6k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 12, False: 15.5k]
  |  |  ------------------
  ------------------
  508|       |
  509|  15.6k|	return 0;
  510|  15.6k|}
exif.c:vips_exif_entry_get_double:
  416|  34.6k|{
  417|  34.6k|	ExifEntry *entry;
  418|       |
  419|  34.6k|	if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) ||
  ------------------
  |  Branch (419:6): [True: 1.86k, False: 32.7k]
  ------------------
  420|  34.6k|		entry->components != 1)
  ------------------
  |  Branch (420:3): [True: 303, False: 32.4k]
  ------------------
  421|  2.17k|		return -1;
  422|       |
  423|  32.4k|	return vips_exif_get_double(ed, entry, 0, out);
  424|  34.6k|}
exif.c:vips_exif_get_double:
  290|  32.4k|{
  291|  32.4k|	ExifRational rv;
  292|  32.4k|	ExifSRational srv;
  293|  32.4k|	double value;
  294|       |
  295|  32.4k|	if (!vips_exif_get_rational(ed, entry, component, &rv)) {
  ------------------
  |  Branch (295:6): [True: 32.1k, False: 334]
  ------------------
  296|  32.1k|		if (rv.denominator == 0)
  ------------------
  |  Branch (296:7): [True: 40, False: 32.0k]
  ------------------
  297|     40|			value = 0;
  298|  32.0k|		else
  299|  32.0k|			value = (double) rv.numerator / rv.denominator;
  300|  32.1k|	}
  301|    334|	else if (!vips_exif_get_srational(ed, entry, component, &srv)) {
  ------------------
  |  Branch (301:11): [True: 50, False: 284]
  ------------------
  302|     50|		if (srv.denominator == 0)
  ------------------
  |  Branch (302:7): [True: 14, False: 36]
  ------------------
  303|     14|			value = 0;
  304|     36|		else
  305|     36|			value = (double) srv.numerator / srv.denominator;
  306|     50|	}
  307|    284|	else
  308|    284|		return -1;
  309|       |
  310|  32.1k|	*out = value;
  311|       |
  312|  32.1k|	return 0;
  313|  32.4k|}
exif.c:vips_exif_get_rational:
  256|   182k|{
  257|   182k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (257:6): [True: 119k, False: 62.5k]
  ------------------
  258|   119k|		ExifByteOrder bo = exif_data_get_byte_order(ed);
  259|   119k|		size_t sizeof_component = entry->size / entry->components;
  260|   119k|		size_t offset = component * sizeof_component;
  261|       |
  262|   119k|		*out = exif_get_rational(entry->data + offset, bo);
  263|   119k|	}
  264|  62.5k|	else
  265|  62.5k|		return -1;
  266|       |
  267|   119k|	return 0;
  268|   182k|}
exif.c:vips_exif_get_srational:
  273|  66.4k|{
  274|  66.4k|	if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (274:6): [True: 7.16k, False: 59.2k]
  ------------------
  275|  7.16k|		ExifByteOrder bo = exif_data_get_byte_order(ed);
  276|  7.16k|		size_t sizeof_component = entry->size / entry->components;
  277|  7.16k|		size_t offset = component * sizeof_component;
  278|       |
  279|  7.16k|		*out = exif_get_srational(entry->data + offset, bo);
  280|  7.16k|	}
  281|  59.2k|	else
  282|  59.2k|		return -1;
  283|       |
  284|  7.16k|	return 0;
  285|  66.4k|}
exif.c:vips_exif_entry_get_int:
  428|  15.6k|{
  429|  15.6k|	ExifEntry *entry;
  430|       |
  431|  15.6k|	if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) ||
  ------------------
  |  Branch (431:6): [True: 62, False: 15.5k]
  ------------------
  432|  15.6k|		entry->components != 1)
  ------------------
  |  Branch (432:3): [True: 120, False: 15.4k]
  ------------------
  433|    182|		return -1;
  434|       |
  435|  15.4k|	return vips_exif_get_int(ed, entry, 0, out);
  436|  15.6k|}
exif.c:vips_exif_get_int:
  232|   358k|{
  233|   358k|	ExifByteOrder bo = exif_data_get_byte_order(ed);
  234|   358k|	size_t sizeof_component = entry->size / entry->components;
  235|   358k|	size_t offset = component * sizeof_component;
  236|       |
  237|   358k|	if (entry->format == EXIF_FORMAT_SHORT)
  ------------------
  |  Branch (237:6): [True: 185k, False: 172k]
  ------------------
  238|   185k|		*out = exif_get_short(entry->data + offset, bo);
  239|   172k|	else if (entry->format == EXIF_FORMAT_SSHORT)
  ------------------
  |  Branch (239:11): [True: 484, False: 172k]
  ------------------
  240|    484|		*out = exif_get_sshort(entry->data + offset, bo);
  241|   172k|	else if (entry->format == EXIF_FORMAT_LONG)
  ------------------
  |  Branch (241:11): [True: 66.0k, False: 106k]
  ------------------
  242|       |		/* This won't work for huge values, but who cares.
  243|       |		 */
  244|  66.0k|		*out = (int) exif_get_long(entry->data + offset, bo);
  245|   106k|	else if (entry->format == EXIF_FORMAT_SLONG)
  ------------------
  |  Branch (245:11): [True: 832, False: 105k]
  ------------------
  246|    832|		*out = exif_get_slong(entry->data + offset, bo);
  247|   105k|	else
  248|   105k|		return -1;
  249|       |
  250|   253k|	return 0;
  251|   358k|}
exif.c:vips_exif_get_content:
  409|  90.3k|{
  410|  90.3k|	exif_content_foreach_entry(content,
  411|  90.3k|		(ExifContentForeachEntryFunc) vips_exif_attach_entry, params);
  412|  90.3k|}
exif.c:vips_exif_attach_entry:
  385|   234k|{
  386|   234k|	const char *tag_name;
  387|   234k|	char vips_name_txt[256];
  388|   234k|	VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt);
  ------------------
  |  |   60|   234k|	{ \
  |  |   61|   234k|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|   234k|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|   234k|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|   234k|	}
  ------------------
  389|   234k|	VipsDbuf value = { 0 };
  390|       |
  391|   234k|	if (!(tag_name = vips_exif_entry_get_name(entry)))
  ------------------
  |  Branch (391:6): [True: 0, False: 234k]
  ------------------
  392|      0|		return;
  393|       |
  394|   234k|	vips_buf_appendf(&vips_name, "exif-ifd%d-%s",
  395|   234k|		exif_entry_get_ifd(entry), tag_name);
  ------------------
  |  |  182|   234k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 234k, False: 0]
  |  |  ------------------
  ------------------
  396|   234k|	vips_exif_to_s(params->ed, entry, &value);
  397|       |
  398|       |	/* Can't do anything sensible with the error return.
  399|       |	 */
  400|   234k|	(void) vips_image_set_string(params->image,
  401|   234k|		vips_buf_all(&vips_name),
  402|   234k|		(char *) vips_dbuf_string(&value, NULL));
  403|       |
  404|   234k|	vips_dbuf_destroy(&value);
  405|   234k|}
exif.c:vips_exif_entry_get_name:
  375|   255k|{
  376|   255k|	if (!entry->parent)
  ------------------
  |  Branch (376:6): [True: 0, False: 255k]
  ------------------
  377|      0|		return NULL;
  378|       |
  379|   255k|	return exif_tag_get_name_in_ifd(entry->tag,
  380|   255k|		exif_entry_get_ifd(entry));
  ------------------
  |  |  182|   255k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 255k, False: 0]
  |  |  ------------------
  ------------------
  381|   255k|}
exif.c:vips_exif_to_s:
  322|   237k|{
  323|   237k|	char *text = entry_to_s(entry);
  324|       |
  325|   237k|	unsigned long i;
  326|   237k|	int iv;
  327|   237k|	ExifRational rv;
  328|   237k|	ExifSRational srv;
  329|       |
  330|   237k|	if (entry->components < 10 &&
  ------------------
  |  Branch (330:6): [True: 223k, False: 14.0k]
  ------------------
  331|   237k|		!vips_exif_get_int(ed, entry, 0, &iv)) {
  ------------------
  |  Branch (331:3): [True: 118k, False: 105k]
  ------------------
  332|   237k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (332:15): [True: 119k, False: 118k]
  ------------------
  333|   119k|			vips_exif_get_int(ed, entry, i, &iv);
  334|   119k|			vips_dbuf_writef(buf, "%d ", iv);
  335|   119k|		}
  336|   118k|	}
  337|   119k|	else if (entry->components < 10 &&
  ------------------
  |  Branch (337:11): [True: 105k, False: 14.0k]
  ------------------
  338|   119k|		!vips_exif_get_rational(ed, entry, 0, &rv)) {
  ------------------
  |  Branch (338:3): [True: 43.2k, False: 62.2k]
  ------------------
  339|  87.3k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (339:15): [True: 44.1k, False: 43.2k]
  ------------------
  340|  44.1k|			vips_exif_get_rational(ed, entry, i, &rv);
  341|  44.1k|			vips_dbuf_writef(buf, "%u/%u ", rv.numerator, rv.denominator);
  342|  44.1k|		}
  343|  43.2k|	}
  344|  76.2k|	else if (entry->components < 10 &&
  ------------------
  |  Branch (344:11): [True: 62.2k, False: 14.0k]
  ------------------
  345|  76.2k|		!vips_exif_get_srational(ed, entry, 0, &srv)) {
  ------------------
  |  Branch (345:3): [True: 3.25k, False: 58.9k]
  ------------------
  346|  7.11k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (346:15): [True: 3.86k, False: 3.25k]
  ------------------
  347|  3.86k|			vips_exif_get_srational(ed, entry, i, &srv);
  348|  3.86k|			vips_dbuf_writef(buf, "%d/%d ", srv.numerator, srv.denominator);
  349|  3.86k|		}
  350|  3.25k|	}
  351|  73.0k|	else
  352|  73.0k|		vips_dbuf_writef(buf, "%s ", text);
  353|       |
  354|   237k|	vips_dbuf_writef(buf, "(%s, %s, %lu components, %d bytes)",
  355|   237k|		text,
  356|   237k|		exif_format_get_name(entry->format),
  357|   237k|		entry->components,
  358|   237k|		entry->size);
  359|       |
  360|   237k|	g_free(text);
  361|   237k|}
exif.c:entry_to_s:
   84|   237k|{
   85|       |	/* Some extra space for conversion to string ... this can be quite a bit
   86|       |	 * for formats like float. Ban crazy size values.
   87|       |	 */
   88|   237k|	int size = VIPS_MIN(entry->size, 10000);
  ------------------
  |  |   55|   237k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 237k, False: 38]
  |  |  ------------------
  ------------------
   89|   237k|	int max_size = size * 3 + 32;
   90|   237k|	char *text = VIPS_MALLOC(NULL, max_size + 1);
  ------------------
  |  |   68|   237k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|   237k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   237k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   237k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|       |
   92|       |	// this renders floats as eg. "12.2345", enums as "Inch", etc.
   93|   237k|	exif_entry_get_value(entry, text, max_size);
   94|       |
   95|       |	// libexif does not null-terminate ASCII strings, we must add the \0
   96|       |	// ourselves
   97|   237k|	if (entry->format == EXIF_FORMAT_ASCII)
  ------------------
  |  Branch (97:6): [True: 13.9k, False: 223k]
  ------------------
   98|  13.9k|		text[size] = '\0';
   99|       |
  100|   237k|	char *utf8 = g_utf8_make_valid(text, -1);
  101|       |
  102|   237k|	g_free(text);
  103|       |
  104|   237k|	return utf8;
  105|   237k|}
exif.c:vips_exif_resolution_from_image:
 1032|  18.0k|{
 1033|  18.0k|	double xres, yres;
 1034|  18.0k|	const char *p;
 1035|  18.0k|	int unit;
 1036|       |
 1037|  18.0k|	VIPS_DEBUG_MSG("vips_exif_resolution_from_image: vips res of %g, %g\n",
  ------------------
  |  |   47|  18.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  18.0k|	{ \
  |  |   49|  18.0k|		; \
  |  |   50|  18.0k|	} \
  |  |   51|  18.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|  18.0k|		image->Xres, image->Yres);
 1039|       |
 1040|       |	/* Default to inches, more progs support it.
 1041|       |	 */
 1042|  18.0k|	unit = 2;
 1043|  18.0k|	if (vips_image_get_typeof(image, VIPS_META_RESOLUTION_UNIT) &&
  ------------------
  |  |   93|  18.0k|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  |  Branch (1043:6): [True: 647, False: 17.3k]
  ------------------
 1044|  18.0k|		!vips_image_get_string(image,
  ------------------
  |  Branch (1044:3): [True: 647, False: 0]
  ------------------
 1045|    647|			VIPS_META_RESOLUTION_UNIT, &p)) {
  ------------------
  |  |   93|    647|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
 1046|    647|		if (vips_isprefix("cm", p))
  ------------------
  |  Branch (1046:7): [True: 285, False: 362]
  ------------------
 1047|    285|			unit = 3;
 1048|    362|		else if (vips_isprefix("none", p))
  ------------------
  |  Branch (1048:12): [True: 0, False: 362]
  ------------------
 1049|      0|			unit = 1;
 1050|    647|	}
 1051|       |
 1052|  18.0k|	switch (unit) {
 1053|      0|	case 1:
  ------------------
  |  Branch (1053:2): [True: 0, False: 18.0k]
  ------------------
 1054|      0|		xres = image->Xres;
 1055|      0|		yres = image->Yres;
 1056|      0|		break;
 1057|       |
 1058|  17.7k|	case 2:
  ------------------
  |  Branch (1058:2): [True: 17.7k, False: 285]
  ------------------
 1059|  17.7k|		xres = image->Xres * 25.4;
 1060|  17.7k|		yres = image->Yres * 25.4;
 1061|  17.7k|		break;
 1062|       |
 1063|    285|	case 3:
  ------------------
  |  Branch (1063:2): [True: 285, False: 17.7k]
  ------------------
 1064|    285|		xres = image->Xres * 10.0;
 1065|    285|		yres = image->Yres * 10.0;
 1066|    285|		break;
 1067|       |
 1068|      0|	default:
  ------------------
  |  Branch (1068:2): [True: 0, False: 18.0k]
  ------------------
 1069|      0|		g_warning("%s", _("unknown EXIF resolution unit"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1070|      0|		return 0;
 1071|  18.0k|	}
 1072|       |
 1073|       |	/* Main image xres/yres/unit are in ifd0. ifd1 has the thumbnail
 1074|       |	 * xres/yres/unit.
 1075|       |	 */
 1076|  18.0k|	vips_exif_set_tag(ed, 0, EXIF_TAG_X_RESOLUTION,
 1077|  18.0k|		vips_exif_set_double, (void *) &xres);
 1078|  18.0k|	vips_exif_set_tag(ed, 0, EXIF_TAG_Y_RESOLUTION,
 1079|  18.0k|		vips_exif_set_double, (void *) &yres);
 1080|  18.0k|	vips_exif_set_tag(ed, 0, EXIF_TAG_RESOLUTION_UNIT,
 1081|  18.0k|		vips_exif_set_int, (void *) &unit);
 1082|       |
 1083|  18.0k|	return 0;
 1084|  18.0k|}
exif.c:vips_exif_set_tag:
  997|   122k|{
  998|   122k|	ExifEntry *entry;
  999|       |
 1000|   122k|	if ((entry = exif_content_get_entry(ed->ifd[ifd], tag))) {
  ------------------
  |  Branch (1000:6): [True: 100k, False: 21.8k]
  ------------------
 1001|   100k|		fn(ed, entry, 0, data);
 1002|   100k|	}
 1003|  21.8k|	else {
 1004|  21.8k|		entry = exif_entry_new();
 1005|       |
 1006|       |		/* tag must be set before calling exif_content_add_entry.
 1007|       |		 */
 1008|  21.8k|		entry->tag = tag;
 1009|  21.8k|		exif_content_add_entry(ed->ifd[ifd], entry);
 1010|  21.8k|		exif_entry_unref(entry);
 1011|       |
 1012|       |		/* libexif makes us have a special path for string-valued
 1013|       |		 * fields :(
 1014|       |		 */
 1015|  21.8k|		if (tag_is_encoding(tag))
  ------------------
  |  Branch (1015:7): [True: 0, False: 21.8k]
  ------------------
 1016|      0|			vips_exif_set_string_encoding(ed, entry, 0, data);
 1017|  21.8k|		else if (tag_is_ascii(tag))
  ------------------
  |  Branch (1017:12): [True: 0, False: 21.8k]
  ------------------
 1018|      0|			vips_exif_set_string_ascii(ed, entry, 0, data);
 1019|  21.8k|		else if (tag_is_utf16(tag))
  ------------------
  |  Branch (1019:12): [True: 0, False: 21.8k]
  ------------------
 1020|      0|			vips_exif_set_string_utf16(ed, entry, 0, data);
 1021|  21.8k|		else {
 1022|  21.8k|			exif_entry_initialize(entry, tag);
 1023|  21.8k|			fn(ed, entry, 0, data);
 1024|  21.8k|		}
 1025|  21.8k|	}
 1026|   122k|}
exif.c:tag_is_encoding:
  796|  43.2k|{
  797|  43.2k|	return tag == EXIF_TAG_USER_COMMENT;
  798|  43.2k|}
exif.c:tag_is_ascii:
  802|  43.2k|{
  803|  43.2k|	return tag == EXIF_TAG_MAKE ||
  ------------------
  |  Branch (803:9): [True: 422, False: 42.7k]
  ------------------
  804|  43.2k|		tag == EXIF_TAG_MODEL ||
  ------------------
  |  Branch (804:3): [True: 452, False: 42.3k]
  ------------------
  805|  43.2k|		tag == EXIF_TAG_IMAGE_DESCRIPTION ||
  ------------------
  |  Branch (805:3): [True: 141, False: 42.1k]
  ------------------
  806|  43.2k|		tag == EXIF_TAG_ARTIST ||
  ------------------
  |  Branch (806:3): [True: 126, False: 42.0k]
  ------------------
  807|  43.2k|		tag == EXIF_TAG_SOFTWARE ||
  ------------------
  |  Branch (807:3): [True: 332, False: 41.7k]
  ------------------
  808|  43.2k|		tag == EXIF_TAG_COPYRIGHT ||
  ------------------
  |  Branch (808:3): [True: 536, False: 41.1k]
  ------------------
  809|  43.2k|		tag == EXIF_TAG_DATE_TIME ||
  ------------------
  |  Branch (809:3): [True: 320, False: 40.8k]
  ------------------
  810|  43.2k|		tag == EXIF_TAG_DATE_TIME_ORIGINAL ||
  ------------------
  |  Branch (810:3): [True: 329, False: 40.5k]
  ------------------
  811|  43.2k|		tag == EXIF_TAG_DATE_TIME_DIGITIZED ||
  ------------------
  |  Branch (811:3): [True: 331, False: 40.2k]
  ------------------
  812|  43.2k|		tag == EXIF_TAG_SUB_SEC_TIME ||
  ------------------
  |  Branch (812:3): [True: 1, False: 40.2k]
  ------------------
  813|  43.2k|		tag == EXIF_TAG_SUB_SEC_TIME_ORIGINAL ||
  ------------------
  |  Branch (813:3): [True: 48, False: 40.1k]
  ------------------
  814|  43.2k|		tag == EXIF_TAG_SUB_SEC_TIME_DIGITIZED
  ------------------
  |  Branch (814:3): [True: 40, False: 40.1k]
  ------------------
  815|  43.2k|#ifdef HAVE_EXIF_0_6_22
  816|  43.2k|		|| tag == EXIF_TAG_CAMERA_OWNER_NAME ||
  ------------------
  |  Branch (816:6): [True: 7, False: 40.1k]
  ------------------
  817|  43.2k|		tag == EXIF_TAG_BODY_SERIAL_NUMBER ||
  ------------------
  |  Branch (817:3): [True: 26, False: 40.0k]
  ------------------
  818|  43.2k|		tag == EXIF_TAG_LENS_MAKE ||
  ------------------
  |  Branch (818:3): [True: 1, False: 40.0k]
  ------------------
  819|  43.2k|		tag == EXIF_TAG_LENS_MODEL ||
  ------------------
  |  Branch (819:3): [True: 24, False: 40.0k]
  ------------------
  820|  43.2k|		tag == EXIF_TAG_LENS_SERIAL_NUMBER
  ------------------
  |  Branch (820:3): [True: 1, False: 40.0k]
  ------------------
  821|  43.2k|#endif
  822|  43.2k|#ifdef HAVE_EXIF_0_6_23
  823|  43.2k|		|| tag == EXIF_TAG_OFFSET_TIME ||
  ------------------
  |  Branch (823:6): [True: 6, False: 40.0k]
  ------------------
  824|  43.2k|		tag == EXIF_TAG_OFFSET_TIME_ORIGINAL ||
  ------------------
  |  Branch (824:3): [True: 1, False: 40.0k]
  ------------------
  825|  43.2k|		tag == EXIF_TAG_OFFSET_TIME_DIGITIZED ||
  ------------------
  |  Branch (825:3): [True: 1, False: 40.0k]
  ------------------
  826|  43.2k|		tag == EXIF_TAG_GPS_LATITUDE_REF ||
  ------------------
  |  |  177|  83.2k|#define EXIF_TAG_GPS_LATITUDE_REF      0x0001 /* INTEROPERABILITY_INDEX   */
  ------------------
  |  Branch (826:3): [True: 69, False: 39.9k]
  ------------------
  827|  43.2k|		tag == EXIF_TAG_GPS_LONGITUDE_REF ||
  ------------------
  |  |  179|  83.1k|#define EXIF_TAG_GPS_LONGITUDE_REF     0x0003
  ------------------
  |  Branch (827:3): [True: 5, False: 39.9k]
  ------------------
  828|  43.2k|		tag == EXIF_TAG_GPS_SATELLITES ||
  ------------------
  |  |  184|  83.1k|#define EXIF_TAG_GPS_SATELLITES        0x0008
  ------------------
  |  Branch (828:3): [True: 1, False: 39.9k]
  ------------------
  829|  43.2k|		tag == EXIF_TAG_GPS_STATUS ||
  ------------------
  |  |  185|  83.1k|#define EXIF_TAG_GPS_STATUS            0x0009
  ------------------
  |  Branch (829:3): [True: 1, False: 39.9k]
  ------------------
  830|  43.2k|		tag == EXIF_TAG_GPS_MEASURE_MODE ||
  ------------------
  |  |  186|  83.1k|#define EXIF_TAG_GPS_MEASURE_MODE      0x000a
  ------------------
  |  Branch (830:3): [True: 1, False: 39.9k]
  ------------------
  831|  43.2k|		tag == EXIF_TAG_GPS_SPEED_REF ||
  ------------------
  |  |  188|  83.1k|#define EXIF_TAG_GPS_SPEED_REF         0x000c
  ------------------
  |  Branch (831:3): [True: 1, False: 39.9k]
  ------------------
  832|  43.2k|		tag == EXIF_TAG_GPS_TRACK_REF ||
  ------------------
  |  |  190|  83.1k|#define EXIF_TAG_GPS_TRACK_REF         0x000e
  ------------------
  |  Branch (832:3): [True: 1, False: 39.9k]
  ------------------
  833|  43.2k|		tag == EXIF_TAG_GPS_IMG_DIRECTION_REF ||
  ------------------
  |  |  192|  83.1k|#define EXIF_TAG_GPS_IMG_DIRECTION_REF 0x0010
  ------------------
  |  Branch (833:3): [True: 3, False: 39.9k]
  ------------------
  834|  43.2k|		tag == EXIF_TAG_GPS_MAP_DATUM ||
  ------------------
  |  |  194|  83.1k|#define EXIF_TAG_GPS_MAP_DATUM         0x0012
  ------------------
  |  Branch (834:3): [True: 1, False: 39.9k]
  ------------------
  835|  43.2k|		tag == EXIF_TAG_GPS_DEST_LATITUDE_REF ||
  ------------------
  |  |  195|  83.1k|#define EXIF_TAG_GPS_DEST_LATITUDE_REF 0x0013
  ------------------
  |  Branch (835:3): [True: 1, False: 39.9k]
  ------------------
  836|  43.2k|		tag == EXIF_TAG_GPS_DEST_LONGITUDE_REF ||
  ------------------
  |  |  197|  83.1k|#define EXIF_TAG_GPS_DEST_LONGITUDE_REF 0x0015
  ------------------
  |  Branch (836:3): [True: 1, False: 39.9k]
  ------------------
  837|  43.2k|		tag == EXIF_TAG_GPS_DEST_BEARING_REF ||
  ------------------
  |  |  199|  83.1k|#define EXIF_TAG_GPS_DEST_BEARING_REF   0x0017
  ------------------
  |  Branch (837:3): [True: 1, False: 39.9k]
  ------------------
  838|  43.2k|		tag == EXIF_TAG_GPS_DEST_DISTANCE_REF ||
  ------------------
  |  |  201|  83.1k|#define EXIF_TAG_GPS_DEST_DISTANCE_REF  0x0019
  ------------------
  |  Branch (838:3): [True: 1, False: 39.9k]
  ------------------
  839|  43.2k|		tag == EXIF_TAG_GPS_DATE_STAMP
  ------------------
  |  |  205|  39.9k|#define EXIF_TAG_GPS_DATE_STAMP         0x001d
  ------------------
  |  Branch (839:3): [True: 0, False: 39.9k]
  ------------------
  840|  43.2k|#endif
  841|  43.2k|		;
  842|  43.2k|}
exif.c:tag_is_utf16:
  846|  39.9k|{
  847|  39.9k|	return tag == EXIF_TAG_XP_TITLE ||
  ------------------
  |  Branch (847:9): [True: 1, False: 39.9k]
  ------------------
  848|  39.9k|		tag == EXIF_TAG_XP_COMMENT ||
  ------------------
  |  Branch (848:3): [True: 37, False: 39.9k]
  ------------------
  849|  39.9k|		tag == EXIF_TAG_XP_AUTHOR ||
  ------------------
  |  Branch (849:3): [True: 2, False: 39.9k]
  ------------------
  850|  39.9k|		tag == EXIF_TAG_XP_KEYWORDS ||
  ------------------
  |  Branch (850:3): [True: 7, False: 39.9k]
  ------------------
  851|  39.9k|		tag == EXIF_TAG_XP_SUBJECT;
  ------------------
  |  Branch (851:3): [True: 2, False: 39.9k]
  ------------------
  852|  39.9k|}
exif.c:vips_exif_set_double:
  720|  36.0k|{
  721|  36.0k|	double value = *((double *) data);
  722|       |
  723|  36.0k|	ExifByteOrder bo;
  724|  36.0k|	size_t sizeof_component;
  725|  36.0k|	size_t offset;
  726|  36.0k|	double old_value;
  727|       |
  728|  36.0k|	if (entry->components <= component) {
  ------------------
  |  Branch (728:6): [True: 0, False: 36.0k]
  ------------------
  729|      0|		VIPS_DEBUG_MSG("vips_exif_set_double: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|      0|		return;
  731|      0|	}
  732|       |
  733|       |	/* Wait until after the component check to make sure we can't get /0.
  734|       |	 */
  735|  36.0k|	bo = exif_data_get_byte_order(ed);
  736|  36.0k|	sizeof_component = entry->size / entry->components;
  737|  36.0k|	offset = component * sizeof_component;
  738|       |
  739|  36.0k|	VIPS_DEBUG_MSG("vips_exif_set_double: %s = %g\n",
  ------------------
  |  |   47|  36.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  36.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  36.0k|	{ \
  |  |   49|  36.0k|		; \
  |  |   50|  36.0k|	} \
  |  |   51|  36.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  36.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  740|  36.0k|		vips_exif_entry_get_name(entry), value);
  741|       |
  742|  36.0k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (742:6): [True: 35.4k, False: 621]
  ------------------
  743|  35.4k|		ExifRational rv;
  744|       |
  745|  35.4k|		rv = exif_get_rational(entry->data + offset, bo);
  746|  35.4k|		if (rv.denominator == 0)
  ------------------
  |  Branch (746:7): [True: 44, False: 35.3k]
  ------------------
  747|     44|			old_value = 0;
  748|  35.3k|		else
  749|  35.3k|			old_value = (double) rv.numerator / rv.denominator;
  750|       |
  751|  35.4k|		if (VIPS_FABS(old_value - value) > 0.0001) {
  ------------------
  |  |   76|  35.4k|#define VIPS_FABS(V) __builtin_fabs(V)
  ------------------
  |  Branch (751:7): [True: 20.8k, False: 14.6k]
  ------------------
  752|  20.8k|			vips_exif_double_to_rational(value, &rv);
  753|       |
  754|  20.8k|			VIPS_DEBUG_MSG("vips_exif_set_double: %u / %u\n",
  ------------------
  |  |   47|  20.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  20.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  20.8k|	{ \
  |  |   49|  20.8k|		; \
  |  |   50|  20.8k|	} \
  |  |   51|  20.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  20.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|  20.8k|				rv.numerator,
  756|  20.8k|				rv.denominator);
  757|       |
  758|  20.8k|			exif_set_rational(entry->data + offset, bo, rv);
  759|  20.8k|		}
  760|  35.4k|	}
  761|    621|	else if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (761:11): [True: 162, False: 459]
  ------------------
  762|    162|		ExifSRational srv;
  763|       |
  764|    162|		srv = exif_get_srational(entry->data + offset, bo);
  765|    162|		if (srv.denominator == 0)
  ------------------
  |  Branch (765:7): [True: 25, False: 137]
  ------------------
  766|     25|			old_value = 0;
  767|    137|		else
  768|    137|			old_value = (double) srv.numerator / srv.denominator;
  769|       |
  770|    162|		if (VIPS_FABS(old_value - value) > 0.0001) {
  ------------------
  |  |   76|    162|#define VIPS_FABS(V) __builtin_fabs(V)
  ------------------
  |  Branch (770:7): [True: 108, False: 54]
  ------------------
  771|    108|			vips_exif_double_to_srational(value, &srv);
  772|       |
  773|    108|			VIPS_DEBUG_MSG("vips_exif_set_double: %d / %d\n",
  ------------------
  |  |   47|    108|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    108|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    108|	{ \
  |  |   49|    108|		; \
  |  |   50|    108|	} \
  |  |   51|    108|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    108|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|    108|				srv.numerator, srv.denominator);
  775|       |
  776|    108|			exif_set_srational(entry->data + offset, bo, srv);
  777|    108|		}
  778|    162|	}
  779|  36.0k|}
exif.c:vips_exif_double_to_rational:
  624|  20.8k|{
  625|       |	/* We will usually set factors of 10, so use 1000 as the denominator
  626|       |	 * and it'll probably be OK.
  627|       |	 */
  628|  20.8k|	rv->numerator = value * 1000;
  629|  20.8k|	rv->denominator = 1000;
  630|  20.8k|}
exif.c:vips_exif_double_to_srational:
  634|    108|{
  635|       |	/* We will usually set factors of 10, so use 1000 as the denominator
  636|       |	 * and it'll probably be OK.
  637|       |	 */
  638|    108|	srv->numerator = value * 1000;
  639|    108|	srv->denominator = 1000;
  640|    108|}
exif.c:vips_exif_set_int:
  591|  73.6k|{
  592|  73.6k|	int value = *((int *) data);
  593|       |
  594|  73.6k|	ExifByteOrder bo;
  595|  73.6k|	size_t sizeof_component;
  596|  73.6k|	size_t offset = component;
  597|       |
  598|  73.6k|	if (entry->components <= component) {
  ------------------
  |  Branch (598:6): [True: 0, False: 73.6k]
  ------------------
  599|      0|		VIPS_DEBUG_MSG("vips_exif_set_int: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|      0|		return;
  601|      0|	}
  602|       |
  603|       |	/* Wait until after the component check to make sure we can't get /0.
  604|       |	 */
  605|  73.6k|	bo = exif_data_get_byte_order(ed);
  606|  73.6k|	sizeof_component = entry->size / entry->components;
  607|  73.6k|	offset = component * sizeof_component;
  608|       |
  609|  73.6k|	VIPS_DEBUG_MSG("vips_exif_set_int: %s = %d\n",
  ------------------
  |  |   47|  73.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  73.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  73.6k|	{ \
  |  |   49|  73.6k|		; \
  |  |   50|  73.6k|	} \
  |  |   51|  73.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  73.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|  73.6k|		vips_exif_entry_get_name(entry), value);
  611|       |
  612|  73.6k|	if (entry->format == EXIF_FORMAT_SHORT)
  ------------------
  |  Branch (612:6): [True: 41.4k, False: 32.2k]
  ------------------
  613|  41.4k|		exif_set_short(entry->data + offset, bo, value);
  614|  32.2k|	else if (entry->format == EXIF_FORMAT_SSHORT)
  ------------------
  |  Branch (614:11): [True: 102, False: 32.1k]
  ------------------
  615|    102|		exif_set_sshort(entry->data + offset, bo, value);
  616|  32.1k|	else if (entry->format == EXIF_FORMAT_LONG)
  ------------------
  |  Branch (616:11): [True: 31.8k, False: 229]
  ------------------
  617|  31.8k|		exif_set_long(entry->data + offset, bo, value);
  618|    229|	else if (entry->format == EXIF_FORMAT_SLONG)
  ------------------
  |  Branch (618:11): [True: 196, False: 33]
  ------------------
  619|    196|		exif_set_slong(entry->data + offset, bo, value);
  620|  73.6k|}
exif.c:vips_exif_update:
 1394|  15.5k|{
 1395|  15.5k|	VipsExifRemove ve;
 1396|       |
 1397|  15.5k|	VIPS_DEBUG_MSG("vips_exif_update: \n");
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|       |
 1399|       |	/* If this exif came from the image (rather than being an exif block we
 1400|       |	 * have made afresh), then any fields which are in the block but not on
 1401|       |	 * the image must have been deliberately removed. Remove them from the
 1402|       |	 * block as well.
 1403|       |	 *
 1404|       |	 * Any string-valued fields (eg. comment etc.) which exist as libvips
 1405|       |	 * metadata tags with changed  whose values have changed must also be
 1406|       |	 * removed.
 1407|       |	 *
 1408|       |	 * libexif does not allow you to change string lengths (you must make
 1409|       |	 * new tags) so we have to remove ready to re-add.
 1410|       |	 */
 1411|  15.5k|	if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) {
  ------------------
  |  |   46|  15.5k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1411:6): [True: 1.00k, False: 14.5k]
  ------------------
 1412|  1.00k|		ve.image = image;
 1413|  1.00k|		ve.ed = ed;
 1414|  1.00k|		exif_data_foreach_content(ed,
 1415|  1.00k|			(ExifDataForeachContentFunc) vips_exif_exif_content,
 1416|  1.00k|			&ve);
 1417|  1.00k|	}
 1418|       |
 1419|       |	/* Walk the image and add any exif- that's set in image metadata.
 1420|       |	 */
 1421|  15.5k|	vips_image_map(image, vips_exif_image_field, ed);
 1422|  15.5k|}
exif.c:vips_exif_exif_content:
 1382|  5.03k|{
 1383|  5.03k|	ve->content = content;
 1384|  5.03k|	ve->to_remove = NULL;
 1385|  5.03k|	exif_content_foreach_entry(content,
 1386|  5.03k|		(ExifContentForeachEntryFunc) vips_exif_exif_entry, ve);
 1387|  5.03k|	vips_slist_map2(ve->to_remove,
 1388|  5.03k|		(VipsSListMap2Fn) vips_exif_exif_remove, ve, NULL);
 1389|  5.03k|	VIPS_FREEF(g_slist_free, ve->to_remove);
  ------------------
  |  |   41|  5.03k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.03k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  5.03k|	{ \
  |  |   43|  5.03k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 482, False: 4.54k]
  |  |  ------------------
  |  |   44|    482|			(void) F((S)); \
  |  |   45|    482|			(S) = 0; \
  |  |   46|    482|		} \
  |  |   47|  5.03k|	} \
  |  |   48|  5.03k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.03k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1390|  5.03k|}
exif.c:vips_exif_exif_entry:
 1297|  21.3k|{
 1298|  21.3k|	const char *tag_name;
 1299|  21.3k|	char vips_name_txt[256];
 1300|  21.3k|	VipsBuf vips_name_buf = VIPS_BUF_STATIC(vips_name_txt);
  ------------------
  |  |   60|  21.3k|	{ \
  |  |   61|  21.3k|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|  21.3k|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|  21.3k|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|  21.3k|	}
  ------------------
 1301|       |
 1302|  21.3k|	const char *vips_name;
 1303|  21.3k|	const char *vips_value;
 1304|       |
 1305|  21.3k|	if (!(tag_name = vips_exif_entry_get_name(entry)))
  ------------------
  |  Branch (1305:6): [True: 0, False: 21.3k]
  ------------------
 1306|      0|		return;
 1307|       |
 1308|  21.3k|	vips_buf_appendf(&vips_name_buf, "exif-ifd%d-%s",
 1309|  21.3k|		exif_entry_get_ifd(entry), tag_name);
  ------------------
  |  |  182|  21.3k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 21.3k, False: 0]
  |  |  ------------------
  ------------------
 1310|  21.3k|	vips_name = vips_buf_all(&vips_name_buf);
 1311|       |
 1312|       |	/* Is there a image metadata item for this tag?
 1313|       |	 */
 1314|  21.3k|	vips_value = NULL;
 1315|  21.3k|	if (vips_image_get_typeof(ve->image, vips_name)) {
  ------------------
  |  Branch (1315:6): [True: 21.3k, False: 0]
  ------------------
 1316|       |		/* No easy way to return an error code from here, sadly.
 1317|       |		 */
 1318|  21.3k|		if (vips_image_get_string(ve->image, vips_name, &vips_value))
  ------------------
  |  Branch (1318:7): [True: 0, False: 21.3k]
  ------------------
 1319|      0|			g_warning(_("bad exif meta \"%s\""), vips_name);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1320|  21.3k|	}
 1321|       |
 1322|       |	/* Does this field exist on the image? If not, schedule it for
 1323|       |	 * removal.
 1324|       |	 */
 1325|  21.3k|	if (!vips_value)
  ------------------
  |  Branch (1325:6): [True: 0, False: 21.3k]
  ------------------
 1326|      0|		ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1327|       |
 1328|       |	/* Orientation is really set from the vips
 1329|       |	 * VIPS_META_ORIENTATION tag. If that's been deleted, we must delete
 1330|       |	 * any matching EXIF tags too.
 1331|       |	 */
 1332|  21.3k|	if (strcmp(tag_name, "Orientation") == 0 &&
  ------------------
  |  Branch (1332:6): [True: 482, False: 20.9k]
  ------------------
 1333|  21.3k|		vips_value)
  ------------------
  |  Branch (1333:3): [True: 482, False: 0]
  ------------------
 1334|    482|		ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1335|       |
 1336|       |	/* If this is a string tag with a new value, we must also remove it
 1337|       |	 * ready for recreation, see the comment below.
 1338|       |	 */
 1339|  21.3k|	if (vips_value &&
  ------------------
  |  Branch (1339:6): [True: 21.3k, False: 0]
  ------------------
 1340|  21.3k|		(tag_is_encoding(entry->tag) ||
  ------------------
  |  Branch (1340:4): [True: 17, False: 21.3k]
  ------------------
 1341|  21.3k|			tag_is_ascii(entry->tag) ||
  ------------------
  |  Branch (1341:4): [True: 3.23k, False: 18.1k]
  ------------------
 1342|  21.3k|			tag_is_utf16(entry->tag))) {
  ------------------
  |  Branch (1342:4): [True: 49, False: 18.0k]
  ------------------
 1343|  3.29k|		VipsDbuf value = { 0 };
 1344|       |
 1345|       |		/* Render the original exif-data value to a string and see
 1346|       |		 * if the user has changed it. If they have, remove it ready
 1347|       |		 * for re-adding.
 1348|       |		 *
 1349|       |		 * Leaving it there prevents it being recreated.
 1350|       |		 */
 1351|  3.29k|		vips_exif_to_s(ve->ed, entry, &value);
 1352|  3.29k|		if (strcmp((char *) vips_dbuf_string(&value, NULL), vips_value) != 0)
  ------------------
  |  Branch (1352:7): [True: 0, False: 3.29k]
  ------------------
 1353|      0|			ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1354|  3.29k|		vips_dbuf_destroy(&value);
 1355|  3.29k|	}
 1356|  21.3k|}
exif.c:vips_exif_exif_remove:
 1360|    482|{
 1361|       |#ifdef DEBUG
 1362|       |	{
 1363|       |		const char *tag_name;
 1364|       |		char vips_name_txt[256];
 1365|       |		VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt);
 1366|       |
 1367|       |		tag_name = vips_exif_entry_get_name(entry);
 1368|       |		vips_buf_appendf(&vips_name, "exif-ifd%d-%s",
 1369|       |			exif_entry_get_ifd(entry), tag_name);
 1370|       |
 1371|       |		printf("vips_exif_exif_remove: %s\n", vips_buf_all(&vips_name));
 1372|       |	}
 1373|       |#endif /*DEBUG*/
 1374|       |
 1375|    482|	exif_content_remove_entry(ve->content, entry);
 1376|       |
 1377|    482|	return NULL;
 1378|    482|}
exif.c:vips_exif_image_field:
 1246|   257k|{
 1247|   257k|	ExifData *ed = (ExifData *) data;
 1248|       |
 1249|   257k|	const char *string;
 1250|   257k|	int ifd;
 1251|   257k|	const char *p;
 1252|   257k|	ExifTag tag;
 1253|       |
 1254|   257k|	if (!vips_isprefix("exif-ifd", field))
  ------------------
  |  Branch (1254:6): [True: 236k, False: 21.3k]
  ------------------
 1255|   236k|		return NULL;
 1256|       |
 1257|       |	/* value must be a string.
 1258|       |	 */
 1259|  21.3k|	if (vips_image_get_string(image, field, &string)) {
  ------------------
  |  Branch (1259:6): [True: 0, False: 21.3k]
  ------------------
 1260|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1261|      0|		return NULL;
 1262|      0|	}
 1263|       |
 1264|  21.3k|	p = field + strlen("exif-ifd");
 1265|  21.3k|	ifd = atoi(p);
 1266|       |
 1267|  42.7k|	for (; g_ascii_isdigit(*p); p++)
  ------------------
  |  |   66|  42.7k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
  |  |  ------------------
  |  |  |  Branch (66:3): [True: 21.3k, False: 21.3k]
  |  |  ------------------
  ------------------
 1268|  21.3k|		;
 1269|  21.3k|	if (*p != '-') {
  ------------------
  |  Branch (1269:6): [True: 0, False: 21.3k]
  ------------------
 1270|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1271|      0|		return NULL;
 1272|      0|	}
 1273|       |
 1274|       |	/* GPSVersionID is tag 0 (the error return) so we have to
 1275|       |	 * test the name too.
 1276|       |	 */
 1277|  21.3k|	if (!(tag = exif_tag_from_name(p + 1)) &&
  ------------------
  |  Branch (1277:6): [True: 25, False: 21.3k]
  ------------------
 1278|  21.3k|		strcmp(p + 1, "GPSVersionID") != 0) {
  ------------------
  |  Branch (1278:3): [True: 0, False: 25]
  ------------------
 1279|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1280|      0|		return NULL;
 1281|      0|	}
 1282|       |
 1283|  21.3k|	vips_exif_set_tag(ed, ifd, tag, vips_exif_set_entry, (void *) string);
 1284|       |
 1285|  21.3k|	return NULL;
 1286|  21.3k|}
exif.c:vips_exif_set_entry:
 1237|  21.3k|{
 1238|  21.3k|	const char *string = (const char *) data;
 1239|       |
 1240|  21.3k|	vips_exif_from_s(ed, entry, string);
 1241|  21.3k|}
exif.c:vips_exif_from_s:
 1194|  21.3k|{
 1195|  21.3k|	unsigned long i;
 1196|  21.3k|	const char *p;
 1197|  21.3k|	int v;
 1198|       |
 1199|  21.3k|	if (entry->format == EXIF_FORMAT_SHORT ||
  ------------------
  |  Branch (1199:6): [True: 8.00k, False: 13.3k]
  ------------------
 1200|  21.3k|		entry->format == EXIF_FORMAT_SSHORT ||
  ------------------
  |  Branch (1200:3): [True: 37, False: 13.3k]
  ------------------
 1201|  21.3k|		entry->format == EXIF_FORMAT_LONG ||
  ------------------
  |  Branch (1201:3): [True: 721, False: 12.6k]
  ------------------
 1202|  21.3k|		entry->format == EXIF_FORMAT_SLONG) {
  ------------------
  |  Branch (1202:3): [True: 63, False: 12.5k]
  ------------------
 1203|  8.82k|		if (entry->components >= 10)
  ------------------
  |  Branch (1203:7): [True: 284, False: 8.54k]
  ------------------
 1204|    284|			return;
 1205|       |
 1206|  8.54k|		p = value;
 1207|  17.5k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (1207:15): [True: 8.98k, False: 8.54k]
  ------------------
 1208|  8.98k|			if (!(p = skip_space(p)))
  ------------------
  |  Branch (1208:8): [True: 0, False: 8.98k]
  ------------------
 1209|      0|				break;
 1210|       |
 1211|  8.98k|			v = atof(p);
 1212|  8.98k|			vips_exif_set_int(ed, entry, i, &v);
 1213|       |
 1214|  8.98k|			p = skip_nonspace(p);
 1215|  8.98k|		}
 1216|  8.54k|	}
 1217|  12.5k|	else if (entry->format == EXIF_FORMAT_RATIONAL ||
  ------------------
  |  Branch (1217:11): [True: 4.26k, False: 8.30k]
  ------------------
 1218|  12.5k|		entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (1218:3): [True: 1.05k, False: 7.25k]
  ------------------
 1219|  5.31k|		if (entry->components >= 10)
  ------------------
  |  Branch (1219:7): [True: 198, False: 5.11k]
  ------------------
 1220|    198|			return;
 1221|       |
 1222|  5.11k|		p = value;
 1223|  10.6k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (1223:15): [True: 5.49k, False: 5.11k]
  ------------------
 1224|  5.49k|			if (!(p = skip_space(p)))
  ------------------
  |  Branch (1224:8): [True: 0, False: 5.49k]
  ------------------
 1225|      0|				break;
 1226|       |
 1227|  5.49k|			vips_exif_set_rational(ed, entry, i, (void *) p);
 1228|       |
 1229|  5.49k|			p = skip_nonspace(p);
 1230|  5.49k|		}
 1231|  5.11k|	}
 1232|  21.3k|}
exif.c:skip_space:
 1170|  14.4k|{
 1171|  15.3k|	while (p && *p == ' ')
  ------------------
  |  Branch (1171:9): [True: 15.3k, False: 0]
  |  Branch (1171:14): [True: 833, False: 14.4k]
  ------------------
 1172|    833|		p += 1;
 1173|       |
 1174|  14.4k|	return p;
 1175|  14.4k|}
exif.c:skip_nonspace:
 1181|  14.4k|{
 1182|  89.7k|	while (p && *p && *p != ' ')
  ------------------
  |  Branch (1182:9): [True: 89.7k, False: 0]
  |  Branch (1182:14): [True: 89.7k, False: 0]
  |  Branch (1182:20): [True: 75.3k, False: 14.4k]
  ------------------
 1183|  75.3k|		p += 1;
 1184|       |
 1185|  14.4k|	return p;
 1186|  14.4k|}
exif.c:vips_exif_set_rational:
  668|  5.49k|{
  669|  5.49k|	char *value = (char *) data;
  670|       |
  671|  5.49k|	ExifByteOrder bo;
  672|  5.49k|	size_t sizeof_component;
  673|  5.49k|	size_t offset;
  674|       |
  675|  5.49k|	if (entry->components <= component) {
  ------------------
  |  Branch (675:6): [True: 0, False: 5.49k]
  ------------------
  676|      0|		VIPS_DEBUG_MSG("vips_exif_set_rational: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      0|		return;
  678|      0|	}
  679|       |
  680|       |	/* Wait until after the component check to make sure we can't get /0.
  681|       |	 */
  682|  5.49k|	bo = exif_data_get_byte_order(ed);
  683|  5.49k|	sizeof_component = entry->size / entry->components;
  684|  5.49k|	offset = component * sizeof_component;
  685|       |
  686|  5.49k|	VIPS_DEBUG_MSG("vips_exif_set_rational: %s = \"%s\"\n",
  ------------------
  |  |   47|  5.49k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.49k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  5.49k|	{ \
  |  |   49|  5.49k|		; \
  |  |   50|  5.49k|	} \
  |  |   51|  5.49k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.49k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|  5.49k|		vips_exif_entry_get_name(entry), value);
  688|       |
  689|  5.49k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (689:6): [True: 4.40k, False: 1.08k]
  ------------------
  690|  4.40k|		ExifRational rv;
  691|       |
  692|  4.40k|		vips_exif_parse_rational(value, &rv);
  693|       |
  694|  4.40k|		VIPS_DEBUG_MSG("vips_exif_set_rational: %u / %u\n",
  ------------------
  |  |   47|  4.40k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.40k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  4.40k|	{ \
  |  |   49|  4.40k|		; \
  |  |   50|  4.40k|	} \
  |  |   51|  4.40k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.40k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  695|  4.40k|			rv.numerator,
  696|  4.40k|			rv.denominator);
  697|       |
  698|  4.40k|		exif_set_rational(entry->data + offset, bo, rv);
  699|  4.40k|	}
  700|  1.08k|	else if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (700:11): [True: 1.08k, False: 0]
  ------------------
  701|  1.08k|		ExifSRational srv;
  702|       |
  703|  1.08k|		vips_exif_parse_srational(value, &srv);
  704|       |
  705|  1.08k|		VIPS_DEBUG_MSG("vips_exif_set_rational: %d / %d\n",
  ------------------
  |  |   47|  1.08k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.08k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.08k|	{ \
  |  |   49|  1.08k|		; \
  |  |   50|  1.08k|	} \
  |  |   51|  1.08k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.08k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  706|  1.08k|			srv.numerator, srv.denominator);
  707|       |
  708|  1.08k|		exif_set_srational(entry->data + offset, bo, srv);
  709|  1.08k|	}
  710|  5.49k|}
exif.c:vips_exif_parse_rational:
  646|  4.40k|{
  647|  4.40k|	if (sscanf(str, " %u / %u ", &rv->numerator, &rv->denominator) == 2)
  ------------------
  |  Branch (647:6): [True: 4.40k, False: 0]
  ------------------
  648|  4.40k|		return;
  649|      0|	vips_exif_double_to_rational(g_ascii_strtod(str, NULL), rv);
  650|      0|}
exif.c:vips_exif_parse_srational:
  656|  1.08k|{
  657|  1.08k|	if (sscanf(str, " %d / %d ",
  ------------------
  |  Branch (657:6): [True: 1.08k, False: 0]
  ------------------
  658|  1.08k|			&srv->numerator, &srv->denominator) == 2)
  659|  1.08k|		return;
  660|      0|	vips_exif_double_to_srational(g_ascii_strtod(str, NULL), srv);
  661|      0|}
exif.c:vips_exif_set_dimensions:
 1090|  15.5k|{
 1091|  15.5k|	VIPS_DEBUG_MSG("vips_exif_set_dimensions: vips size of %d, %d\n",
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1092|  15.5k|		im->Xsize, im->Ysize);
 1093|       |
 1094|  15.5k|	vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_X_DIMENSION,
 1095|  15.5k|		vips_exif_set_int, (void *) &im->Xsize);
 1096|  15.5k|	vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_Y_DIMENSION,
 1097|  15.5k|		vips_exif_set_int, (void *) &im->Ysize);
 1098|       |
 1099|  15.5k|	return 0;
 1100|  15.5k|}
exif.c:vips_exif_set_orientation:
 1106|  15.5k|{
 1107|  15.5k|	int orientation;
 1108|       |
 1109|       |	/* We set the tag, even if it's been deleted, since it's a required
 1110|       |	 * field.
 1111|       |	 */
 1112|  15.5k|	if (!vips_image_get_typeof(im, VIPS_META_ORIENTATION) ||
  ------------------
  |  |  149|  15.5k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  |  Branch (1112:6): [True: 9.68k, False: 5.87k]
  ------------------
 1113|  15.5k|		vips_image_get_int(im, VIPS_META_ORIENTATION, &orientation))
  ------------------
  |  |  149|  5.87k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  |  Branch (1113:3): [True: 0, False: 5.87k]
  ------------------
 1114|  9.68k|		orientation = 1;
 1115|       |
 1116|  15.5k|	VIPS_DEBUG_MSG("set_exif_orientation: %d\n", orientation);
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1117|       |
 1118|  15.5k|	vips_exif_set_tag(ed, 0, EXIF_TAG_ORIENTATION,
 1119|  15.5k|		vips_exif_set_int, (void *) &orientation);
 1120|       |
 1121|  15.5k|	return 0;
 1122|  15.5k|}
exif.c:vips_exif_set_thumbnail:
 1128|  15.5k|{
 1129|       |	/* Delete any old thumbnail data. We should use the exif free func,
 1130|       |	 * but the memory allocator is not exposed by libexif! Hopefully they
 1131|       |	 * are just using free().
 1132|       |	 *
 1133|       |	 * exif.c makes this assumption too when it tries to update a
 1134|       |	 * thumbnail.
 1135|       |	 */
 1136|  15.5k|	if (ed->data) {
  ------------------
  |  Branch (1136:6): [True: 162, False: 15.4k]
  ------------------
 1137|    162|		free(ed->data);
 1138|    162|		ed->data = NULL;
 1139|    162|	}
 1140|  15.5k|	ed->size = 0;
 1141|       |
 1142|       |	/* Update EXIF thumbnail from metadata, if any.
 1143|       |	 */
 1144|  15.5k|	if (vips_image_get_typeof(im, "jpeg-thumbnail-data")) {
  ------------------
  |  Branch (1144:6): [True: 162, False: 15.4k]
  ------------------
 1145|    162|		const void *data;
 1146|    162|		size_t size;
 1147|       |
 1148|    162|		if (vips_image_get_blob(im, "jpeg-thumbnail-data",
  ------------------
  |  Branch (1148:7): [True: 0, False: 162]
  ------------------
 1149|    162|				&data, &size))
 1150|      0|			return -1;
 1151|       |
 1152|       |		/* Again, we should use the exif allocator attached to this
 1153|       |		 * entry, but it is not exposed!
 1154|       |		 */
 1155|    162|		if (size > 0 &&
  ------------------
  |  Branch (1155:7): [True: 162, False: 0]
  ------------------
 1156|    162|			data) {
  ------------------
  |  Branch (1156:4): [True: 162, False: 0]
  ------------------
 1157|    162|			ed->data = malloc(size);
 1158|    162|			memcpy(ed->data, data, size);
 1159|    162|			ed->size = size;
 1160|    162|		}
 1161|    162|	}
 1162|       |
 1163|  15.5k|	return 0;
 1164|  15.5k|}

vips_foreign_map:
  468|  48.6k|{
  469|  48.6k|	GSList *files;
  470|  48.6k|	void *result;
  471|       |
  472|  48.6k|	files = NULL;
  473|  48.6k|	(void) vips_class_map_all(g_type_from_name(base),
  474|  48.6k|		(VipsClassMapFn) file_add_class, (void *) &files);
  475|       |
  476|  48.6k|	files = g_slist_sort(files, (GCompareFunc) file_compare);
  477|       |#ifdef DEBUG
  478|       |	{
  479|       |		GSList *p;
  480|       |
  481|       |		printf("vips_foreign_map: search order\n");
  482|       |		for (p = files; p; p = p->next) {
  483|       |			VipsForeignClass *class = (VipsForeignClass *) p->data;
  484|       |
  485|       |			printf("\t%s\n", VIPS_OBJECT_CLASS(class)->nickname);
  486|       |		}
  487|       |	}
  488|       |#endif /*DEBUG*/
  489|  48.6k|	result = vips_slist_map2(files, fn, a, b);
  490|       |
  491|  48.6k|	g_slist_free(files);
  492|       |
  493|  48.6k|	return result;
  494|  48.6k|}
vips_foreign_find_load_buffer:
  700|  33.1k|{
  701|  33.1k|	VipsForeignLoadClass *load_class;
  702|       |
  703|  33.1k|	if (!(load_class = (VipsForeignLoadClass *) vips_foreign_map(
  ------------------
  |  Branch (703:6): [True: 7.16k, False: 25.9k]
  ------------------
  704|  33.1k|			  "VipsForeignLoad",
  705|  33.1k|			  (VipsSListMap2Fn) vips_foreign_find_load_buffer_sub,
  706|  33.1k|			  &data, &size))) {
  707|  7.16k|		vips_error("VipsForeignLoad",
  708|  7.16k|			"%s", _("buffer is not in a known format"));
  ------------------
  |  |   30|  7.16k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  7.16k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  709|  7.16k|		return NULL;
  710|  7.16k|	}
  711|       |
  712|  25.9k|	return G_OBJECT_CLASS_NAME(load_class);
  ------------------
  |  |  124|  25.9k|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  25.9k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  25.9k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|  33.1k|}
vips_foreign_load_invalidate:
 1306|     65|{
 1307|     65|	VipsOperation *operation;
 1308|       |
 1309|       |#ifdef DEBUG
 1310|       |	printf("vips_foreign_load_invalidate: %p\n", image);
 1311|       |#endif /*DEBUG*/
 1312|       |
 1313|     65|	if ((operation = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|     65|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|     65|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     65|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1313:6): [True: 65, False: 0]
  ------------------
 1314|     65|			 vips__foreign_load_operation))) {
 1315|     65|		vips_operation_invalidate(operation);
 1316|     65|	}
 1317|     65|}
vips__foreign_convert_saveable:
 1372|  15.5k|{
 1373|       |	/* in holds a reference to the output of our chain as we build it.
 1374|       |	 */
 1375|  15.5k|	g_object_ref(in);
 1376|       |
 1377|       |	/* For coded images, can this class save the coding we are in now?
 1378|       |	 * Nothing to do.
 1379|       |	 */
 1380|  15.5k|	if (in->Coding != VIPS_CODING_NONE &&
  ------------------
  |  Branch (1380:6): [True: 319, False: 15.2k]
  ------------------
 1381|  15.5k|		coding[in->Coding]) {
  ------------------
  |  Branch (1381:3): [True: 0, False: 319]
  ------------------
 1382|      0|		*ready = in;
 1383|      0|		return 0;
 1384|      0|	}
 1385|       |
 1386|       |	/* For uncoded images, if this saver supports ANY bands and this
 1387|       |	 * format we have nothing to do.
 1388|       |	 */
 1389|  15.5k|	if (in->Coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (1389:6): [True: 15.2k, False: 319]
  ------------------
 1390|  15.5k|		saveable == VIPS_SAVEABLE_ANY &&
  ------------------
  |  Branch (1390:3): [True: 0, False: 15.2k]
  ------------------
 1391|  15.5k|		format[in->BandFmt] == in->BandFmt) {
  ------------------
  |  Branch (1391:3): [True: 0, False: 0]
  ------------------
 1392|      0|		*ready = in;
 1393|      0|		return 0;
 1394|      0|	}
 1395|       |
 1396|       |	/* Otherwise ... we need to decode and then (possibly) recode at the
 1397|       |	 * end.
 1398|       |	 */
 1399|       |
 1400|       |	/* If this is an VIPS_CODING_LABQ, we can go straight to RGB.
 1401|       |	 */
 1402|  15.5k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (1402:6): [True: 71, False: 15.4k]
  ------------------
 1403|     71|		VipsImage *out;
 1404|       |
 1405|     71|		if (vips_LabQ2sRGB(in, &out, NULL)) {
  ------------------
  |  Branch (1405:7): [True: 0, False: 71]
  ------------------
 1406|      0|			g_object_unref(in);
 1407|      0|			return -1;
 1408|      0|		}
 1409|     71|		g_object_unref(in);
 1410|       |
 1411|     71|		in = out;
 1412|     71|	}
 1413|       |
 1414|       |	/* If this is an VIPS_CODING_RAD, we unpack to float. This could be
 1415|       |	 * scRGB or XYZ.
 1416|       |	 */
 1417|  15.5k|	if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (1417:6): [True: 248, False: 15.3k]
  ------------------
 1418|    248|		VipsImage *out;
 1419|       |
 1420|    248|		if (vips_rad2float(in, &out, NULL)) {
  ------------------
  |  Branch (1420:7): [True: 0, False: 248]
  ------------------
 1421|      0|			g_object_unref(in);
 1422|      0|			return -1;
 1423|      0|		}
 1424|    248|		g_object_unref(in);
 1425|       |
 1426|    248|		in = out;
 1427|    248|	}
 1428|       |
 1429|       |	/* If the saver supports RAD, we need to go to scRGB or XYZ.
 1430|       |	 */
 1431|  15.5k|	if (coding[VIPS_CODING_RAD]) {
  ------------------
  |  Branch (1431:6): [True: 0, False: 15.5k]
  ------------------
 1432|      0|		if (in->Type != VIPS_INTERPRETATION_scRGB &&
  ------------------
  |  Branch (1432:7): [True: 0, False: 0]
  ------------------
 1433|      0|			in->Type != VIPS_INTERPRETATION_XYZ) {
  ------------------
  |  Branch (1433:4): [True: 0, False: 0]
  ------------------
 1434|      0|			VipsImage *out;
 1435|       |
 1436|      0|			if (vips_colourspace(in, &out, VIPS_INTERPRETATION_scRGB, NULL)) {
  ------------------
  |  Branch (1436:8): [True: 0, False: 0]
  ------------------
 1437|      0|				g_object_unref(in);
 1438|      0|				return -1;
 1439|      0|			}
 1440|      0|			g_object_unref(in);
 1441|       |
 1442|      0|			in = out;
 1443|      0|		}
 1444|      0|	}
 1445|       |
 1446|       |	/* If this image is CMYK and the saver is RGB-only, use lcms to try to
 1447|       |	 * import to XYZ.
 1448|       |	 */
 1449|  15.5k|	if (in->Type == VIPS_INTERPRETATION_CMYK &&
  ------------------
  |  Branch (1449:6): [True: 437, False: 15.1k]
  ------------------
 1450|  15.5k|		in->Bands >= 4 &&
  ------------------
  |  Branch (1450:3): [True: 437, False: 0]
  ------------------
 1451|  15.5k|		(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1451:4): [True: 0, False: 437]
  ------------------
 1452|    437|			saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1452:4): [True: 0, False: 437]
  ------------------
 1453|    437|			saveable == VIPS_SAVEABLE_RGBA_ONLY)) {
  ------------------
  |  Branch (1453:4): [True: 0, False: 437]
  ------------------
 1454|      0|		VipsImage *out;
 1455|       |
 1456|      0|		if (vips_icc_import(in, &out,
  ------------------
  |  Branch (1456:7): [True: 0, False: 0]
  ------------------
 1457|      0|				"pcs", VIPS_PCS_XYZ,
 1458|      0|				"embedded", TRUE,
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1459|      0|				"input_profile", "cmyk",
 1460|      0|				NULL)) {
 1461|      0|			g_object_unref(in);
 1462|      0|			return -1;
 1463|      0|		}
 1464|      0|		g_object_unref(in);
 1465|       |
 1466|      0|		in = out;
 1467|      0|	}
 1468|       |
 1469|       |	/* If this is something other than CMYK or RAD, and it's not already
 1470|       |	 * an RGB image, eg. maybe a LAB image, we need to transform
 1471|       |	 * to RGB.
 1472|       |	 */
 1473|  15.5k|	if (!coding[VIPS_CODING_RAD] &&
  ------------------
  |  Branch (1473:6): [True: 15.5k, False: 0]
  ------------------
 1474|  15.5k|		in->Bands >= 3 &&
  ------------------
  |  Branch (1474:3): [True: 11.2k, False: 4.30k]
  ------------------
 1475|  15.5k|		in->Type != VIPS_INTERPRETATION_CMYK &&
  ------------------
  |  Branch (1475:3): [True: 10.8k, False: 437]
  ------------------
 1476|  15.5k|		in->Type != VIPS_INTERPRETATION_sRGB &&
  ------------------
  |  Branch (1476:3): [True: 3.77k, False: 7.05k]
  ------------------
 1477|  15.5k|		in->Type != VIPS_INTERPRETATION_RGB16 &&
  ------------------
  |  Branch (1477:3): [True: 998, False: 2.77k]
  ------------------
 1478|  15.5k|		vips_colourspace_issupported(in) &&
  ------------------
  |  Branch (1478:3): [True: 972, False: 26]
  ------------------
 1479|  15.5k|		(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1479:4): [True: 0, False: 972]
  ------------------
 1480|    972|			saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1480:4): [True: 0, False: 972]
  ------------------
 1481|    972|			saveable == VIPS_SAVEABLE_RGBA_ONLY ||
  ------------------
  |  Branch (1481:4): [True: 0, False: 972]
  ------------------
 1482|    972|			saveable == VIPS_SAVEABLE_RGB_CMYK)) {
  ------------------
  |  Branch (1482:4): [True: 0, False: 972]
  ------------------
 1483|      0|		VipsImage *out;
 1484|      0|		VipsInterpretation interpretation;
 1485|       |
 1486|       |		/* Do we make RGB or RGB16? We don't want to squash a 16-bit
 1487|       |		 * RGB down to 8 bits if the saver supports 16.
 1488|       |		 */
 1489|      0|		if (vips_band_format_is8bit(format[in->BandFmt]))
  ------------------
  |  Branch (1489:7): [True: 0, False: 0]
  ------------------
 1490|      0|			interpretation = VIPS_INTERPRETATION_sRGB;
 1491|      0|		else
 1492|      0|			interpretation = VIPS_INTERPRETATION_RGB16;
 1493|       |
 1494|      0|		if (vips_colourspace(in, &out, interpretation, NULL)) {
  ------------------
  |  Branch (1494:7): [True: 0, False: 0]
  ------------------
 1495|      0|			g_object_unref(in);
 1496|      0|			return -1;
 1497|      0|		}
 1498|      0|		g_object_unref(in);
 1499|       |
 1500|      0|		in = out;
 1501|      0|	}
 1502|       |
 1503|       |	/* VIPS_SAVEABLE_RGBA_ONLY does not support mono types ... convert
 1504|       |	 * to sRGB.
 1505|       |	 */
 1506|  15.5k|	if (!coding[VIPS_CODING_RAD] &&
  ------------------
  |  Branch (1506:6): [True: 15.5k, False: 0]
  ------------------
 1507|  15.5k|		in->Bands < 3 &&
  ------------------
  |  Branch (1507:3): [True: 4.30k, False: 11.2k]
  ------------------
 1508|  15.5k|		saveable == VIPS_SAVEABLE_RGBA_ONLY) {
  ------------------
  |  Branch (1508:3): [True: 0, False: 4.30k]
  ------------------
 1509|      0|		VipsImage *out;
 1510|      0|		VipsInterpretation interpretation;
 1511|       |
 1512|       |		/* Do we make RGB or RGB16? We don't want to squash a 16-bit
 1513|       |		 * RGB down to 8 bits if the saver supports 16.
 1514|       |		 */
 1515|      0|		if (vips_band_format_is8bit(format[in->BandFmt]))
  ------------------
  |  Branch (1515:7): [True: 0, False: 0]
  ------------------
 1516|      0|			interpretation = VIPS_INTERPRETATION_sRGB;
 1517|      0|		else
 1518|      0|			interpretation = VIPS_INTERPRETATION_RGB16;
 1519|       |
 1520|      0|		if (vips_colourspace(in, &out, interpretation, NULL)) {
  ------------------
  |  Branch (1520:7): [True: 0, False: 0]
  ------------------
 1521|      0|			g_object_unref(in);
 1522|      0|			return -1;
 1523|      0|		}
 1524|      0|		g_object_unref(in);
 1525|       |
 1526|      0|		in = out;
 1527|      0|	}
 1528|       |
 1529|       |	/* Get the bands right. We must do this after all colourspace
 1530|       |	 * transforms, since they can change the number of bands.
 1531|       |	 */
 1532|  15.5k|	if (in->Coding == VIPS_CODING_NONE) {
  ------------------
  |  Branch (1532:6): [True: 15.5k, False: 0]
  ------------------
 1533|       |		/* Do we need to flatten out an alpha channel? There needs to
 1534|       |		 * be an alpha there now, and this writer needs to not support
 1535|       |		 * alpha.
 1536|       |		 */
 1537|  15.5k|		if ((in->Bands == 2 ||
  ------------------
  |  Branch (1537:8): [True: 373, False: 15.1k]
  ------------------
 1538|  15.5k|				(in->Bands == 4 &&
  ------------------
  |  Branch (1538:6): [True: 1.14k, False: 14.0k]
  ------------------
 1539|  15.1k|					in->Type != VIPS_INTERPRETATION_CMYK)) &&
  ------------------
  |  Branch (1539:6): [True: 712, False: 437]
  ------------------
 1540|  15.5k|			(saveable == VIPS_SAVEABLE_MONO ||
  ------------------
  |  Branch (1540:5): [True: 1.08k, False: 0]
  ------------------
 1541|  1.08k|				saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1541:5): [True: 0, False: 0]
  ------------------
 1542|  1.08k|				saveable == VIPS_SAVEABLE_RGB_CMYK)) {
  ------------------
  |  Branch (1542:5): [True: 0, False: 0]
  ------------------
 1543|  1.08k|			VipsImage *out;
 1544|       |
 1545|  1.08k|			if (vips_flatten(in, &out,
  ------------------
  |  Branch (1545:8): [True: 0, False: 1.08k]
  ------------------
 1546|  1.08k|					"background", background,
 1547|  1.08k|					NULL)) {
 1548|      0|				g_object_unref(in);
 1549|      0|				return -1;
 1550|      0|			}
 1551|  1.08k|			g_object_unref(in);
 1552|       |
 1553|  1.08k|			in = out;
 1554|  1.08k|		}
 1555|       |
 1556|       |		/* Other alpha removal strategies ... just drop the extra
 1557|       |		 * bands.
 1558|       |		 */
 1559|       |
 1560|  14.4k|		else if (in->Bands > 3 &&
  ------------------
  |  Branch (1560:12): [True: 437, False: 14.0k]
  ------------------
 1561|  14.4k|			(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1561:5): [True: 0, False: 437]
  ------------------
 1562|    437|				(saveable == VIPS_SAVEABLE_RGB_CMYK &&
  ------------------
  |  Branch (1562:6): [True: 0, False: 437]
  ------------------
 1563|    437|					in->Type != VIPS_INTERPRETATION_CMYK))) {
  ------------------
  |  Branch (1563:6): [True: 0, False: 0]
  ------------------
 1564|      0|			VipsImage *out;
 1565|       |
 1566|       |			/* Don't let 4 bands though unless the image really is
 1567|       |			 * a CMYK.
 1568|       |			 *
 1569|       |			 * Consider a RGBA png being saved as JPG. We can
 1570|       |			 * write CMYK jpg, but we mustn't do that for RGBA
 1571|       |			 * images.
 1572|       |			 */
 1573|      0|			if (vips_extract_band(in, &out, 0,
  ------------------
  |  Branch (1573:8): [True: 0, False: 0]
  ------------------
 1574|      0|					"n", 3,
 1575|      0|					NULL)) {
 1576|      0|				g_object_unref(in);
 1577|      0|				return -1;
 1578|      0|			}
 1579|      0|			g_object_unref(in);
 1580|       |
 1581|      0|			in = out;
 1582|      0|		}
 1583|  14.4k|		else if (in->Bands > 4 &&
  ------------------
  |  Branch (1583:12): [True: 0, False: 14.4k]
  ------------------
 1584|  14.4k|			((saveable == VIPS_SAVEABLE_RGB_CMYK &&
  ------------------
  |  Branch (1584:6): [True: 0, False: 0]
  ------------------
 1585|      0|				 in->Type == VIPS_INTERPRETATION_CMYK) ||
  ------------------
  |  Branch (1585:6): [True: 0, False: 0]
  ------------------
 1586|      0|				saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1586:5): [True: 0, False: 0]
  ------------------
 1587|      0|				saveable == VIPS_SAVEABLE_RGBA_ONLY)) {
  ------------------
  |  Branch (1587:5): [True: 0, False: 0]
  ------------------
 1588|      0|			VipsImage *out;
 1589|       |
 1590|      0|			if (vips_extract_band(in, &out, 0,
  ------------------
  |  Branch (1590:8): [True: 0, False: 0]
  ------------------
 1591|      0|					"n", 4,
 1592|      0|					NULL)) {
 1593|      0|				g_object_unref(in);
 1594|      0|				return -1;
 1595|      0|			}
 1596|      0|			g_object_unref(in);
 1597|       |
 1598|      0|			in = out;
 1599|      0|		}
 1600|  14.4k|		else if (in->Bands > 1 &&
  ------------------
  |  Branch (1600:12): [True: 10.5k, False: 3.92k]
  ------------------
 1601|  14.4k|			saveable == VIPS_SAVEABLE_MONO) {
  ------------------
  |  Branch (1601:4): [True: 10.5k, False: 0]
  ------------------
 1602|  10.5k|			VipsImage *out;
 1603|       |
 1604|  10.5k|			if (vips_extract_band(in, &out, 0, NULL)) {
  ------------------
  |  Branch (1604:8): [True: 0, False: 10.5k]
  ------------------
 1605|      0|				g_object_unref(in);
 1606|      0|				return -1;
 1607|      0|			}
 1608|  10.5k|			g_object_unref(in);
 1609|       |
 1610|  10.5k|			in = out;
 1611|  10.5k|		}
 1612|       |
 1613|       |		/* Else we have VIPS_SAVEABLE_ANY and we don't chop bands down.
 1614|       |		 */
 1615|  15.5k|	}
 1616|       |
 1617|       |	/* Handle the ushort interpretations.
 1618|       |	 *
 1619|       |	 * RGB16 and GREY16 use 0-65535 for black-white. If we have an image
 1620|       |	 * tagged like this, and it has more than 8 bits (we leave crazy uchar
 1621|       |	 * images tagged as RGB16 alone), we'll need to get it ready for the
 1622|       |	 * saver.
 1623|       |	 */
 1624|  15.5k|	if ((in->Type == VIPS_INTERPRETATION_RGB16 ||
  ------------------
  |  Branch (1624:7): [True: 2.77k, False: 12.7k]
  ------------------
 1625|  15.5k|			in->Type == VIPS_INTERPRETATION_GREY16) &&
  ------------------
  |  Branch (1625:4): [True: 622, False: 12.1k]
  ------------------
 1626|  15.5k|		!vips_band_format_is8bit(in->BandFmt)) {
  ------------------
  |  Branch (1626:3): [True: 3.39k, False: 0]
  ------------------
 1627|       |		/* If the saver supports ushort, cast to ushort. It may be
 1628|       |		 * float at the moment, for example.
 1629|       |		 *
 1630|       |		 * If the saver does not support ushort, automatically shift
 1631|       |		 * it down. This is the behaviour we want for saving an RGB16
 1632|       |		 * image as JPG, for example.
 1633|       |		 */
 1634|  3.39k|		if (format[VIPS_FORMAT_USHORT] == VIPS_FORMAT_USHORT) {
  ------------------
  |  Branch (1634:7): [True: 0, False: 3.39k]
  ------------------
 1635|      0|			VipsImage *out;
 1636|       |
 1637|      0|			if (vips_cast(in, &out, VIPS_FORMAT_USHORT, NULL)) {
  ------------------
  |  Branch (1637:8): [True: 0, False: 0]
  ------------------
 1638|      0|				g_object_unref(in);
 1639|      0|				return -1;
 1640|      0|			}
 1641|      0|			g_object_unref(in);
 1642|       |
 1643|      0|			in = out;
 1644|      0|		}
 1645|  3.39k|		else {
 1646|  3.39k|			VipsImage *out;
 1647|       |
 1648|  3.39k|			if (vips_rshift_const1(in, &out, 8, NULL)) {
  ------------------
  |  Branch (1648:8): [True: 0, False: 3.39k]
  ------------------
 1649|      0|				g_object_unref(in);
 1650|      0|				return -1;
 1651|      0|			}
 1652|  3.39k|			g_object_unref(in);
 1653|       |
 1654|  3.39k|			in = out;
 1655|       |
 1656|       |			/* That could have produced an int image ... make sure
 1657|       |			 * we are now uchar.
 1658|       |			 */
 1659|  3.39k|			if (vips_cast(in, &out, VIPS_FORMAT_UCHAR, NULL)) {
  ------------------
  |  Branch (1659:8): [True: 0, False: 3.39k]
  ------------------
 1660|      0|				g_object_unref(in);
 1661|      0|				return -1;
 1662|      0|			}
 1663|  3.39k|			g_object_unref(in);
 1664|       |
 1665|  3.39k|			in = out;
 1666|  3.39k|		}
 1667|  3.39k|	}
 1668|       |
 1669|       |	/* Cast to the output format.
 1670|       |	 */
 1671|  15.5k|	{
 1672|  15.5k|		VipsImage *out;
 1673|       |
 1674|  15.5k|		if (vips_cast(in, &out, format[in->BandFmt], NULL)) {
  ------------------
  |  Branch (1674:7): [True: 0, False: 15.5k]
  ------------------
 1675|      0|			g_object_unref(in);
 1676|      0|			return -1;
 1677|      0|		}
 1678|  15.5k|		g_object_unref(in);
 1679|       |
 1680|  15.5k|		in = out;
 1681|  15.5k|	}
 1682|       |
 1683|       |	/* Does this class want a coded image? Search the coding table for the
 1684|       |	 * first one.
 1685|       |	 */
 1686|  15.5k|	if (coding[VIPS_CODING_NONE]) {
  ------------------
  |  Branch (1686:6): [True: 15.5k, False: 0]
  ------------------
 1687|       |		/* Already NONE, nothing to do.
 1688|       |		 */
 1689|  15.5k|	}
 1690|      0|	else if (coding[VIPS_CODING_LABQ]) {
  ------------------
  |  Branch (1690:11): [True: 0, False: 0]
  ------------------
 1691|      0|		VipsImage *out;
 1692|       |
 1693|      0|		if (vips_Lab2LabQ(in, &out, NULL)) {
  ------------------
  |  Branch (1693:7): [True: 0, False: 0]
  ------------------
 1694|      0|			g_object_unref(in);
 1695|      0|			return -1;
 1696|      0|		}
 1697|      0|		g_object_unref(in);
 1698|       |
 1699|      0|		in = out;
 1700|      0|	}
 1701|      0|	else if (coding[VIPS_CODING_RAD]) {
  ------------------
  |  Branch (1701:11): [True: 0, False: 0]
  ------------------
 1702|      0|		VipsImage *out;
 1703|       |
 1704|      0|		if (vips_float2rad(in, &out, NULL)) {
  ------------------
  |  Branch (1704:7): [True: 0, False: 0]
  ------------------
 1705|      0|			g_object_unref(in);
 1706|      0|			return -1;
 1707|      0|		}
 1708|      0|		g_object_unref(in);
 1709|       |
 1710|      0|		in = out;
 1711|      0|	}
 1712|       |
 1713|  15.5k|	*ready = in;
 1714|       |
 1715|  15.5k|	return 0;
 1716|  15.5k|}
vips__foreign_update_metadata:
 1751|  15.5k|{
 1752|       |	/* Rebuild exif from tags, if we'll be saving it.
 1753|       |	 */
 1754|  15.5k|	if ((keep & VIPS_FOREIGN_KEEP_EXIF) &&
  ------------------
  |  Branch (1754:6): [True: 15.5k, False: 0]
  ------------------
 1755|  15.5k|		vips__exif_update(in))
  ------------------
  |  Branch (1755:3): [True: 0, False: 15.5k]
  ------------------
 1756|      0|		return -1;
 1757|       |
 1758|       |	/* Remove metadata, if any.
 1759|       |	 */
 1760|  15.5k|	if (keep != VIPS_FOREIGN_KEEP_ALL &&
  ------------------
  |  Branch (1760:6): [True: 0, False: 15.5k]
  ------------------
 1761|  15.5k|		vips_image_map(in, vips_foreign_save_remove_metadata, &keep))
  ------------------
  |  Branch (1761:3): [True: 0, False: 0]
  ------------------
 1762|      0|		return -1;
 1763|       |
 1764|       |	/* Some format libraries, like libpng, will throw a hard error if the
 1765|       |	 * profile is inappropriate for this image type. With profiles inherited
 1766|       |	 * from a source image, this can happen all the time, so we
 1767|       |	 * want to silently drop the profile in this case.
 1768|       |	 */
 1769|  15.5k|	if ((keep & VIPS_FOREIGN_KEEP_ICC) &&
  ------------------
  |  Branch (1769:6): [True: 15.5k, False: 0]
  ------------------
 1770|  15.5k|		vips_image_get_typeof(in, VIPS_META_ICC_NAME)) {
  ------------------
  |  |   78|  15.5k|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1770:3): [True: 154, False: 15.4k]
  ------------------
 1771|    154|		const void *data;
 1772|    154|		size_t length;
 1773|       |
 1774|    154|		if (!vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length) &&
  ------------------
  |  |   78|    154|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1774:7): [True: 154, False: 0]
  ------------------
 1775|    154|			!vips_icc_is_compatible_profile(in, data, length) &&
  ------------------
  |  Branch (1775:4): [True: 149, False: 5]
  ------------------
 1776|    154|			!vips_image_remove(in, VIPS_META_ICC_NAME))
  ------------------
  |  |   78|    149|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1776:4): [True: 0, False: 149]
  ------------------
 1777|      0|			return -1;
 1778|    154|	}
 1779|       |
 1780|  15.5k|	return 0;
 1781|  15.5k|}
vips_foreign_find_save_target:
 2148|  15.5k|{
 2149|  15.5k|	char suffix[VIPS_PATH_MAX];
 2150|  15.5k|	char option_string[VIPS_PATH_MAX];
 2151|  15.5k|	VipsForeignSaveClass *save_class;
 2152|       |
 2153|  15.5k|	vips__filename_split8(name, suffix, option_string);
 2154|       |
 2155|  15.5k|	if (!(save_class = (VipsForeignSaveClass *) vips_foreign_map(
  ------------------
  |  Branch (2155:6): [True: 0, False: 15.5k]
  ------------------
 2156|  15.5k|			  "VipsForeignSave",
 2157|  15.5k|			  (VipsSListMap2Fn) vips_foreign_find_save_target_sub,
 2158|  15.5k|			  (void *) suffix, NULL))) {
 2159|      0|		vips_error("VipsForeignSave",
 2160|      0|			_("\"%s\" is not a known target format"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2161|       |
 2162|      0|		return NULL;
 2163|      0|	}
 2164|       |
 2165|  15.5k|	return G_OBJECT_CLASS_NAME(save_class);
  ------------------
  |  |  124|  15.5k|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  15.5k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  15.5k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2166|  15.5k|}
vips_foreign_operation_init:
 2939|      2|{
 2940|      2|	extern GType vips_foreign_load_rad_file_get_type(void);
 2941|      2|	extern GType vips_foreign_load_rad_buffer_get_type(void);
 2942|      2|	extern GType vips_foreign_load_rad_source_get_type(void);
 2943|      2|	extern GType vips_foreign_save_rad_file_get_type(void);
 2944|      2|	extern GType vips_foreign_save_rad_buffer_get_type(void);
 2945|      2|	extern GType vips_foreign_save_rad_target_get_type(void);
 2946|       |
 2947|      2|	extern GType vips_foreign_load_mat_get_type(void);
 2948|       |
 2949|      2|	extern GType vips_foreign_load_ppm_file_get_type(void);
 2950|      2|	extern GType vips_foreign_load_ppm_source_get_type(void);
 2951|      2|	extern GType vips_foreign_save_ppm_file_get_type(void);
 2952|      2|	extern GType vips_foreign_save_pbm_target_get_type(void);
 2953|      2|	extern GType vips_foreign_save_pgm_target_get_type(void);
 2954|      2|	extern GType vips_foreign_save_ppm_target_get_type(void);
 2955|      2|	extern GType vips_foreign_save_pfm_target_get_type(void);
 2956|      2|	extern GType vips_foreign_save_pnm_target_get_type(void);
 2957|       |
 2958|      2|	extern GType vips_foreign_load_png_file_get_type(void);
 2959|      2|	extern GType vips_foreign_load_png_buffer_get_type(void);
 2960|      2|	extern GType vips_foreign_load_png_source_get_type(void);
 2961|      2|	extern GType vips_foreign_save_png_file_get_type(void);
 2962|      2|	extern GType vips_foreign_save_png_buffer_get_type(void);
 2963|      2|	extern GType vips_foreign_save_png_target_get_type(void);
 2964|       |
 2965|      2|	extern GType vips_foreign_save_spng_file_get_type(void);
 2966|      2|	extern GType vips_foreign_save_spng_buffer_get_type(void);
 2967|      2|	extern GType vips_foreign_save_spng_target_get_type(void);
 2968|       |
 2969|      2|	extern GType vips_foreign_load_csv_file_get_type(void);
 2970|      2|	extern GType vips_foreign_load_csv_source_get_type(void);
 2971|      2|	extern GType vips_foreign_save_csv_file_get_type(void);
 2972|      2|	extern GType vips_foreign_save_csv_target_get_type(void);
 2973|       |
 2974|      2|	extern GType vips_foreign_load_matrix_file_get_type(void);
 2975|      2|	extern GType vips_foreign_load_matrix_source_get_type(void);
 2976|      2|	extern GType vips_foreign_save_matrix_file_get_type(void);
 2977|      2|	extern GType vips_foreign_save_matrix_target_get_type(void);
 2978|      2|	extern GType vips_foreign_print_matrix_get_type(void);
 2979|       |
 2980|      2|	extern GType vips_foreign_load_fits_file_get_type(void);
 2981|      2|	extern GType vips_foreign_load_fits_source_get_type(void);
 2982|      2|	extern GType vips_foreign_save_fits_get_type(void);
 2983|       |
 2984|      2|	extern GType vips_foreign_load_analyze_get_type(void);
 2985|       |
 2986|      2|	extern GType vips_foreign_load_openexr_get_type(void);
 2987|       |
 2988|      2|	extern GType vips_foreign_load_openslide_file_get_type(void);
 2989|      2|	extern GType vips_foreign_load_openslide_source_get_type(void);
 2990|       |
 2991|      2|	extern GType vips_foreign_load_vips_file_get_type(void);
 2992|      2|	extern GType vips_foreign_load_vips_source_get_type(void);
 2993|      2|	extern GType vips_foreign_save_vips_file_get_type(void);
 2994|      2|	extern GType vips_foreign_save_vips_target_get_type(void);
 2995|       |
 2996|      2|	extern GType vips_foreign_load_jpeg_file_get_type(void);
 2997|      2|	extern GType vips_foreign_load_jpeg_buffer_get_type(void);
 2998|      2|	extern GType vips_foreign_load_jpeg_source_get_type(void);
 2999|      2|	extern GType vips_foreign_save_jpeg_file_get_type(void);
 3000|      2|	extern GType vips_foreign_save_jpeg_buffer_get_type(void);
 3001|      2|	extern GType vips_foreign_save_jpeg_target_get_type(void);
 3002|      2|	extern GType vips_foreign_save_jpeg_mime_get_type(void);
 3003|       |
 3004|      2|	extern GType vips_foreign_load_tiff_file_get_type(void);
 3005|      2|	extern GType vips_foreign_load_tiff_buffer_get_type(void);
 3006|      2|	extern GType vips_foreign_load_tiff_source_get_type(void);
 3007|      2|	extern GType vips_foreign_save_tiff_file_get_type(void);
 3008|      2|	extern GType vips_foreign_save_tiff_buffer_get_type(void);
 3009|      2|	extern GType vips_foreign_save_tiff_target_get_type(void);
 3010|       |
 3011|      2|	extern GType vips_foreign_load_raw_get_type(void);
 3012|      2|	extern GType vips_foreign_save_raw_file_get_type(void);
 3013|      2|	extern GType vips_foreign_save_raw_buffer_get_type(void);
 3014|      2|	extern GType vips_foreign_save_raw_target_get_type(void);
 3015|       |
 3016|      2|	extern GType vips_foreign_load_magick_file_get_type(void);
 3017|      2|	extern GType vips_foreign_load_magick_buffer_get_type(void);
 3018|      2|	extern GType vips_foreign_load_magick7_file_get_type(void);
 3019|      2|	extern GType vips_foreign_load_magick7_buffer_get_type(void);
 3020|       |
 3021|      2|	extern GType vips_foreign_save_magick_file_get_type(void);
 3022|      2|	extern GType vips_foreign_save_magick_buffer_get_type(void);
 3023|      2|	extern GType vips_foreign_save_magick_bmp_file_get_type(void);
 3024|      2|	extern GType vips_foreign_save_magick_bmp_buffer_get_type(void);
 3025|      2|	extern GType vips_foreign_save_magick_gif_file_get_type(void);
 3026|      2|	extern GType vips_foreign_save_magick_gif_buffer_get_type(void);
 3027|       |
 3028|      2|	extern GType vips_foreign_save_dz_file_get_type(void);
 3029|      2|	extern GType vips_foreign_save_dz_buffer_get_type(void);
 3030|      2|	extern GType vips_foreign_save_dz_target_get_type(void);
 3031|       |
 3032|      2|	extern GType vips_foreign_load_webp_file_get_type(void);
 3033|      2|	extern GType vips_foreign_load_webp_buffer_get_type(void);
 3034|      2|	extern GType vips_foreign_load_webp_source_get_type(void);
 3035|      2|	extern GType vips_foreign_save_webp_file_get_type(void);
 3036|      2|	extern GType vips_foreign_save_webp_buffer_get_type(void);
 3037|      2|	extern GType vips_foreign_save_webp_target_get_type(void);
 3038|      2|	extern GType vips_foreign_save_webp_mime_get_type(void);
 3039|       |
 3040|      2|	extern GType vips_foreign_load_pdf_file_get_type(void);
 3041|      2|	extern GType vips_foreign_load_pdf_buffer_get_type(void);
 3042|      2|	extern GType vips_foreign_load_pdf_source_get_type(void);
 3043|       |
 3044|      2|	extern GType vips_foreign_load_svg_file_get_type(void);
 3045|      2|	extern GType vips_foreign_load_svg_buffer_get_type(void);
 3046|      2|	extern GType vips_foreign_load_svg_source_get_type(void);
 3047|       |
 3048|      2|	extern GType vips_foreign_load_jp2k_file_get_type(void);
 3049|      2|	extern GType vips_foreign_load_jp2k_buffer_get_type(void);
 3050|      2|	extern GType vips_foreign_load_jp2k_source_get_type(void);
 3051|      2|	extern GType vips_foreign_save_jp2k_file_get_type(void);
 3052|      2|	extern GType vips_foreign_save_jp2k_buffer_get_type(void);
 3053|      2|	extern GType vips_foreign_save_jp2k_target_get_type(void);
 3054|       |
 3055|      2|	extern GType vips_foreign_load_jxl_file_get_type(void);
 3056|      2|	extern GType vips_foreign_load_jxl_buffer_get_type(void);
 3057|      2|	extern GType vips_foreign_load_jxl_source_get_type(void);
 3058|      2|	extern GType vips_foreign_save_jxl_file_get_type(void);
 3059|      2|	extern GType vips_foreign_save_jxl_buffer_get_type(void);
 3060|      2|	extern GType vips_foreign_save_jxl_target_get_type(void);
 3061|       |
 3062|      2|	extern GType vips_foreign_load_heif_file_get_type(void);
 3063|      2|	extern GType vips_foreign_load_heif_buffer_get_type(void);
 3064|      2|	extern GType vips_foreign_load_heif_source_get_type(void);
 3065|      2|	extern GType vips_foreign_save_heif_file_get_type(void);
 3066|      2|	extern GType vips_foreign_save_heif_buffer_get_type(void);
 3067|      2|	extern GType vips_foreign_save_heif_target_get_type(void);
 3068|      2|	extern GType vips_foreign_save_avif_target_get_type(void);
 3069|       |
 3070|      2|	extern GType vips_foreign_load_nifti_file_get_type(void);
 3071|      2|	extern GType vips_foreign_load_nifti_source_get_type(void);
 3072|      2|	extern GType vips_foreign_save_nifti_get_type(void);
 3073|       |
 3074|      2|	extern GType vips_foreign_load_nsgif_file_get_type(void);
 3075|      2|	extern GType vips_foreign_load_nsgif_buffer_get_type(void);
 3076|      2|	extern GType vips_foreign_load_nsgif_source_get_type(void);
 3077|       |
 3078|      2|	extern GType vips_foreign_save_cgif_file_get_type(void);
 3079|      2|	extern GType vips_foreign_save_cgif_buffer_get_type(void);
 3080|      2|	extern GType vips_foreign_save_cgif_target_get_type(void);
 3081|       |
 3082|      2|	vips_foreign_load_csv_file_get_type();
 3083|      2|	vips_foreign_load_csv_source_get_type();
 3084|      2|	vips_foreign_save_csv_file_get_type();
 3085|      2|	vips_foreign_save_csv_target_get_type();
 3086|       |
 3087|      2|	vips_foreign_load_matrix_file_get_type();
 3088|      2|	vips_foreign_load_matrix_source_get_type();
 3089|      2|	vips_foreign_save_matrix_file_get_type();
 3090|      2|	vips_foreign_save_matrix_target_get_type();
 3091|      2|	vips_foreign_print_matrix_get_type();
 3092|       |
 3093|      2|	vips_foreign_load_raw_get_type();
 3094|      2|	vips_foreign_save_raw_file_get_type();
 3095|      2|	vips_foreign_save_raw_buffer_get_type();
 3096|      2|	vips_foreign_save_raw_target_get_type();
 3097|       |
 3098|      2|	vips_foreign_load_vips_file_get_type();
 3099|      2|	vips_foreign_load_vips_source_get_type();
 3100|      2|	vips_foreign_save_vips_file_get_type();
 3101|      2|	vips_foreign_save_vips_target_get_type();
 3102|       |
 3103|      2|#ifdef HAVE_ANALYZE
 3104|      2|	vips_foreign_load_analyze_get_type();
 3105|      2|#endif /*HAVE_ANALYZE*/
 3106|       |
 3107|      2|#ifdef HAVE_PPM
 3108|      2|	vips_foreign_load_ppm_file_get_type();
 3109|      2|	vips_foreign_load_ppm_source_get_type();
 3110|      2|	vips_foreign_save_ppm_file_get_type();
 3111|      2|	vips_foreign_save_pbm_target_get_type();
 3112|      2|	vips_foreign_save_pgm_target_get_type();
 3113|      2|	vips_foreign_save_ppm_target_get_type();
 3114|      2|	vips_foreign_save_pfm_target_get_type();
 3115|      2|	vips_foreign_save_pnm_target_get_type();
 3116|      2|#endif /*HAVE_PPM*/
 3117|       |
 3118|      2|#ifdef HAVE_RADIANCE
 3119|      2|	vips_foreign_load_rad_file_get_type();
 3120|      2|	vips_foreign_load_rad_buffer_get_type();
 3121|      2|	vips_foreign_load_rad_source_get_type();
 3122|      2|	vips_foreign_save_rad_file_get_type();
 3123|      2|	vips_foreign_save_rad_buffer_get_type();
 3124|      2|	vips_foreign_save_rad_target_get_type();
 3125|      2|#endif /*HAVE_RADIANCE*/
 3126|       |
 3127|       |#if defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)
 3128|       |	vips_foreign_load_pdf_file_get_type();
 3129|       |	vips_foreign_load_pdf_buffer_get_type();
 3130|       |	vips_foreign_load_pdf_source_get_type();
 3131|       |#endif /*defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)*/
 3132|       |
 3133|      2|#ifdef HAVE_PDFIUM
 3134|      2|	vips_foreign_load_pdf_file_get_type();
 3135|      2|	vips_foreign_load_pdf_buffer_get_type();
 3136|      2|	vips_foreign_load_pdf_source_get_type();
 3137|      2|#endif /*HAVE_PDFIUM*/
 3138|       |
 3139|       |#ifdef HAVE_RSVG
 3140|       |	vips_foreign_load_svg_file_get_type();
 3141|       |	vips_foreign_load_svg_buffer_get_type();
 3142|       |	vips_foreign_load_svg_source_get_type();
 3143|       |#endif /*HAVE_RSVG*/
 3144|       |
 3145|       |#if defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)
 3146|       |	vips_foreign_load_jxl_file_get_type();
 3147|       |	vips_foreign_load_jxl_buffer_get_type();
 3148|       |	vips_foreign_load_jxl_source_get_type();
 3149|       |	vips_foreign_save_jxl_file_get_type();
 3150|       |	vips_foreign_save_jxl_buffer_get_type();
 3151|       |	vips_foreign_save_jxl_target_get_type();
 3152|       |#endif /*defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)*/
 3153|       |
 3154|       |#ifdef HAVE_LIBOPENJP2
 3155|       |	vips_foreign_load_jp2k_file_get_type();
 3156|       |	vips_foreign_load_jp2k_buffer_get_type();
 3157|       |	vips_foreign_load_jp2k_source_get_type();
 3158|       |	vips_foreign_save_jp2k_file_get_type();
 3159|       |	vips_foreign_save_jp2k_buffer_get_type();
 3160|       |	vips_foreign_save_jp2k_target_get_type();
 3161|       |#endif /*HAVE_LIBOPENJP2*/
 3162|       |
 3163|      2|#ifdef HAVE_NSGIF
 3164|      2|	vips_foreign_load_nsgif_file_get_type();
 3165|      2|	vips_foreign_load_nsgif_buffer_get_type();
 3166|      2|	vips_foreign_load_nsgif_source_get_type();
 3167|      2|#endif /*HAVE_NSGIF*/
 3168|       |
 3169|      2|#ifdef HAVE_CGIF
 3170|      2|	vips_foreign_save_cgif_file_get_type();
 3171|      2|	vips_foreign_save_cgif_buffer_get_type();
 3172|      2|	vips_foreign_save_cgif_target_get_type();
 3173|      2|#endif /*HAVE_CGIF*/
 3174|       |
 3175|       |#ifdef HAVE_LIBARCHIVE
 3176|       |	vips_foreign_save_dz_file_get_type();
 3177|       |	vips_foreign_save_dz_buffer_get_type();
 3178|       |	vips_foreign_save_dz_target_get_type();
 3179|       |#endif /*HAVE_LIBARCHIVE*/
 3180|       |
 3181|       |#ifdef HAVE_PNG
 3182|       |	vips_foreign_load_png_file_get_type();
 3183|       |	vips_foreign_load_png_buffer_get_type();
 3184|       |	vips_foreign_load_png_source_get_type();
 3185|       |	vips_foreign_save_png_file_get_type();
 3186|       |	vips_foreign_save_png_buffer_get_type();
 3187|       |	vips_foreign_save_png_target_get_type();
 3188|       |#endif /*HAVE_PNG*/
 3189|       |
 3190|      2|#ifdef HAVE_SPNG
 3191|      2|	vips_foreign_load_png_file_get_type();
 3192|      2|	vips_foreign_load_png_buffer_get_type();
 3193|      2|	vips_foreign_load_png_source_get_type();
 3194|      2|	vips_foreign_save_spng_file_get_type();
 3195|      2|	vips_foreign_save_spng_buffer_get_type();
 3196|      2|	vips_foreign_save_spng_target_get_type();
 3197|      2|#endif /*HAVE_SPNG*/
 3198|       |
 3199|       |#ifdef HAVE_MATIO
 3200|       |	vips_foreign_load_mat_get_type();
 3201|       |#endif /*HAVE_MATIO*/
 3202|       |
 3203|      2|#ifdef HAVE_JPEG
 3204|      2|	vips_foreign_load_jpeg_file_get_type();
 3205|      2|	vips_foreign_load_jpeg_buffer_get_type();
 3206|      2|	vips_foreign_load_jpeg_source_get_type();
 3207|      2|	vips_foreign_save_jpeg_file_get_type();
 3208|      2|	vips_foreign_save_jpeg_buffer_get_type();
 3209|      2|	vips_foreign_save_jpeg_target_get_type();
 3210|      2|	vips_foreign_save_jpeg_mime_get_type();
 3211|      2|#endif /*HAVE_JPEG*/
 3212|       |
 3213|      2|#ifdef HAVE_LIBWEBP
 3214|      2|	vips_foreign_load_webp_file_get_type();
 3215|      2|	vips_foreign_load_webp_buffer_get_type();
 3216|      2|	vips_foreign_load_webp_source_get_type();
 3217|      2|	vips_foreign_save_webp_file_get_type();
 3218|      2|	vips_foreign_save_webp_buffer_get_type();
 3219|      2|	vips_foreign_save_webp_target_get_type();
 3220|      2|	vips_foreign_save_webp_mime_get_type();
 3221|      2|#endif /*HAVE_LIBWEBP*/
 3222|       |
 3223|      2|#ifdef HAVE_TIFF
 3224|      2|	vips_foreign_load_tiff_file_get_type();
 3225|      2|	vips_foreign_load_tiff_buffer_get_type();
 3226|      2|	vips_foreign_load_tiff_source_get_type();
 3227|      2|	vips_foreign_save_tiff_file_get_type();
 3228|      2|	vips_foreign_save_tiff_buffer_get_type();
 3229|      2|	vips_foreign_save_tiff_target_get_type();
 3230|      2|#endif /*HAVE_TIFF*/
 3231|       |
 3232|       |#if defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)
 3233|       |	vips_foreign_load_openslide_file_get_type();
 3234|       |	vips_foreign_load_openslide_source_get_type();
 3235|       |#endif /*defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)*/
 3236|       |
 3237|       |#if defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)
 3238|       |#ifdef HAVE_MAGICK6
 3239|       |	vips_foreign_load_magick_file_get_type();
 3240|       |	vips_foreign_load_magick_buffer_get_type();
 3241|       |#endif /*HAVE_MAGICK6*/
 3242|       |
 3243|       |#ifdef HAVE_MAGICK7
 3244|       |	vips_foreign_load_magick7_file_get_type();
 3245|       |	vips_foreign_load_magick7_buffer_get_type();
 3246|       |#endif /*HAVE_MAGICK7*/
 3247|       |#endif /*defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)*/
 3248|       |
 3249|       |#if defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)
 3250|       |	vips_foreign_save_magick_file_get_type();
 3251|       |	vips_foreign_save_magick_buffer_get_type();
 3252|       |	vips_foreign_save_magick_bmp_file_get_type();
 3253|       |	vips_foreign_save_magick_bmp_buffer_get_type();
 3254|       |	vips_foreign_save_magick_gif_file_get_type();
 3255|       |	vips_foreign_save_magick_gif_buffer_get_type();
 3256|       |#endif /*defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)*/
 3257|       |
 3258|       |#ifdef HAVE_CFITSIO
 3259|       |	vips_foreign_load_fits_file_get_type();
 3260|       |	vips_foreign_load_fits_source_get_type();
 3261|       |	vips_foreign_save_fits_get_type();
 3262|       |#endif /*HAVE_CFITSIO*/
 3263|       |
 3264|       |#ifdef HAVE_OPENEXR
 3265|       |	vips_foreign_load_openexr_get_type();
 3266|       |#endif /*HAVE_OPENEXR*/
 3267|       |
 3268|       |#ifdef HAVE_NIFTI
 3269|       |	vips_foreign_load_nifti_file_get_type();
 3270|       |	vips_foreign_load_nifti_source_get_type();
 3271|       |	vips_foreign_save_nifti_get_type();
 3272|       |#endif /*HAVE_NIFTI*/
 3273|       |
 3274|      2|#if defined(HAVE_HEIF) && !defined(HEIF_MODULE)
 3275|      2|	vips_foreign_load_heif_file_get_type();
 3276|      2|	vips_foreign_load_heif_buffer_get_type();
 3277|      2|	vips_foreign_load_heif_source_get_type();
 3278|      2|	vips_foreign_save_heif_file_get_type();
 3279|      2|	vips_foreign_save_heif_buffer_get_type();
 3280|      2|	vips_foreign_save_heif_target_get_type();
 3281|      2|	vips_foreign_save_avif_target_get_type();
 3282|      2|#endif /*defined(HAVE_HEIF) && !defined(HEIF_MODULE)*/
 3283|       |
 3284|      2|	vips__foreign_load_operation =
 3285|      2|		g_quark_from_static_string("vips-foreign-load-operation");
 3286|      2|}
foreign.c:vips_foreign_class_init:
  400|      1|{
  401|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  403|       |
  404|      1|	gobject_class->set_property = vips_object_set_property;
  405|      1|	gobject_class->get_property = vips_object_get_property;
  406|       |
  407|      1|	object_class->nickname = "foreign";
  408|      1|	object_class->description = _("load and save image files");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  409|      1|	object_class->summary_class = vips_foreign_summary_class;
  410|      1|}
foreign.c:vips_foreign_init:
  414|  41.5k|{
  415|  41.5k|}
foreign.c:file_add_class:
  423|  1.74M|{
  424|  1.74M|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|  1.74M|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|  1.74M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.74M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  1.74M|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  425|       |
  426|       |	// don't consider blocked classes ... we don't want eg. sniffers to run
  427|  1.74M|	if (operation_class->flags & VIPS_OPERATION_BLOCKED)
  ------------------
  |  Branch (427:6): [True: 0, False: 1.74M]
  ------------------
  428|      0|		return NULL;
  429|       |
  430|       |	// exclude "rawload" as it has a different API.
  431|  1.74M|	if (vips_isprefix("rawload", VIPS_OBJECT_CLASS(class)->nickname))
  ------------------
  |  |  435|  1.74M|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.74M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.74M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (431:6): [True: 33.1k, False: 1.71M]
  ------------------
  432|  33.1k|		return NULL;
  433|       |
  434|       |	/* Append so we don't reverse the list of files. Sort will
  435|       |	 * not reorder items of equal priority.
  436|       |	 */
  437|  1.71M|	*files = g_slist_append(*files, class);
  438|       |
  439|  1.71M|	return NULL;
  440|  1.74M|}
foreign.c:file_compare:
  444|  5.13M|{
  445|  5.13M|	return b->priority - a->priority;
  446|  5.13M|}
foreign.c:vips_foreign_load_class_init:
 1199|      1|{
 1200|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1201|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1202|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1203|       |
 1204|      1|	gobject_class->dispose = vips_foreign_load_dispose;
 1205|      1|	gobject_class->set_property = vips_object_set_property;
 1206|      1|	gobject_class->get_property = vips_object_get_property;
 1207|       |
 1208|      1|	object_class->build = vips_foreign_load_build;
 1209|      1|	object_class->summary_class = vips_foreign_load_summary_class;
 1210|      1|	object_class->new_from_string = vips_foreign_load_new_from_string;
 1211|      1|	object_class->nickname = "load";
 1212|      1|	object_class->description = _("loaders");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1213|       |
 1214|      1|	operation_class->get_flags = vips_foreign_load_operation_get_flags;
 1215|       |
 1216|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1217|      1|		_("Output"),
 1218|      1|		_("Output image"),
 1219|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1220|      1|		G_STRUCT_OFFSET(VipsForeignLoad, out));
 1221|       |
 1222|      1|	VIPS_ARG_FLAGS(class, "flags", 106,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
 1223|      1|		_("Flags"),
 1224|      1|		_("Flags for this file"),
 1225|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
 1226|      1|		G_STRUCT_OFFSET(VipsForeignLoad, flags),
 1227|      1|		VIPS_TYPE_FOREIGN_FLAGS, VIPS_FOREIGN_NONE);
 1228|       |
 1229|      1|	VIPS_ARG_BOOL(class, "memory", 107,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1230|      1|		_("Memory"),
 1231|      1|		_("Force open via memory"),
 1232|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1233|      1|		G_STRUCT_OFFSET(VipsForeignLoad, memory),
 1234|      1|		FALSE);
 1235|       |
 1236|      1|	VIPS_ARG_ENUM(class, "access", 108,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1237|      1|		_("Access"),
 1238|      1|		_("Required access pattern for this file"),
 1239|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1240|      1|		G_STRUCT_OFFSET(VipsForeignLoad, access),
 1241|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM);
 1242|       |
 1243|      1|	VIPS_ARG_ENUM(class, "fail_on", 109,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1244|      1|		_("Fail on"),
 1245|      1|		_("Error level to fail on"),
 1246|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1247|      1|		G_STRUCT_OFFSET(VipsForeignLoad, fail_on),
 1248|      1|		VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE);
 1249|       |
 1250|      1|	VIPS_ARG_BOOL(class, "revalidate", 110,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1251|      1|		_("Revalidate"),
 1252|      1|		_("Don't use a cached result for this operation"),
 1253|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_NON_HASHABLE,
 1254|      1|		G_STRUCT_OFFSET(VipsForeignLoad, revalidate),
 1255|      1|		FALSE);
 1256|       |
 1257|      1|	VIPS_ARG_BOOL(class, "sequential", 111,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1258|      1|		_("Sequential"),
 1259|      1|		_("Sequential read only"),
 1260|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1261|      1|		G_STRUCT_OFFSET(VipsForeignLoad, sequential),
 1262|      1|		FALSE);
 1263|       |
 1264|      1|	VIPS_ARG_BOOL(class, "fail", 112,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1265|      1|		_("Fail"),
 1266|      1|		_("Fail on first warning"),
 1267|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1268|      1|		G_STRUCT_OFFSET(VipsForeignLoad, fail),
 1269|      1|		FALSE);
 1270|       |
 1271|      1|	VIPS_ARG_BOOL(class, "disc", 113,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1272|      1|		_("Disc"),
 1273|      1|		_("Open to disc"),
 1274|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1275|      1|		G_STRUCT_OFFSET(VipsForeignLoad, disc),
 1276|      1|		TRUE);
 1277|      1|}
foreign.c:vips_foreign_load_dispose:
  503|  25.9k|{
  504|  25.9k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(gobject);
  ------------------
  |  |  133|  25.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  25.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  25.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  25.9k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  505|       |
  506|  25.9k|	VIPS_UNREF(load->real);
  ------------------
  |  |   57|  25.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  25.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  25.9k|	{ \
  |  |  |  |   43|  25.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 14.8k, False: 11.1k]
  |  |  |  |  ------------------
  |  |  |  |   44|  14.8k|			(void) F((S)); \
  |  |  |  |   45|  14.8k|			(S) = 0; \
  |  |  |  |   46|  14.8k|		} \
  |  |  |  |   47|  25.9k|	} \
  |  |  |  |   48|  25.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|       |
  508|  25.9k|	G_OBJECT_CLASS(vips_foreign_load_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  25.9k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  25.9k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  25.9k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|  25.9k|}
foreign.c:vips_foreign_load_build:
 1079|  23.5k|{
 1080|  23.5k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  23.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  23.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  23.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1081|  23.5k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(object);
  ------------------
  |  |  133|  23.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  23.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  23.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  23.5k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
 1082|  23.5k|	VipsForeignLoadClass *fclass = VIPS_FOREIGN_LOAD_GET_CLASS(object);
  ------------------
  |  |  143|  23.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  23.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  23.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|  23.5k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass))
  ------------------
 1083|       |
 1084|  23.5k|	VipsForeignFlags flags;
 1085|       |
 1086|       |#ifdef DEBUG
 1087|       |	printf("vips_foreign_load_build:\n");
 1088|       |#endif /*DEBUG*/
 1089|       |
 1090|  23.5k|	flags = 0;
 1091|  23.5k|	if (fclass->get_flags)
  ------------------
  |  Branch (1091:6): [True: 23.5k, False: 0]
  ------------------
 1092|  23.5k|		flags |= fclass->get_flags(load);
 1093|       |
 1094|  23.5k|	if ((flags & VIPS_FOREIGN_PARTIAL) &&
  ------------------
  |  Branch (1094:6): [True: 2.53k, False: 21.0k]
  ------------------
 1095|  23.5k|		(flags & VIPS_FOREIGN_SEQUENTIAL)) {
  ------------------
  |  Branch (1095:3): [True: 0, False: 2.53k]
  ------------------
 1096|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1097|      0|			_("VIPS_FOREIGN_PARTIAL and VIPS_FOREIGN_SEQUENTIAL "
 1098|      0|			  "both set -- using SEQUENTIAL"));
 1099|      0|		flags ^= VIPS_FOREIGN_PARTIAL;
 1100|      0|	}
 1101|       |
 1102|  23.5k|	g_object_set(load, "flags", flags, NULL);
 1103|       |
 1104|       |	/* We must block caching of seq loaders running in seq mode. A seq
 1105|       |	 * loader in random mode is fine, since we'll read to ram or a temp
 1106|       |	 * file.
 1107|       |	 */
 1108|  23.5k|	if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) &&
  ------------------
  |  Branch (1108:6): [True: 18.7k, False: 4.74k]
  ------------------
 1109|  23.5k|		load->access != VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (1109:3): [True: 0, False: 18.7k]
  ------------------
 1110|      0|		load->nocache = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1111|       |
 1112|       |	/* The deprecated "fail" field sets fail_on warning.
 1113|       |	 */
 1114|  23.5k|	if (vips_object_argument_isset(object, "fail") &&
  ------------------
  |  Branch (1114:6): [True: 0, False: 23.5k]
  ------------------
 1115|  23.5k|		!vips_object_argument_isset(object, "fail_on"))
  ------------------
  |  Branch (1115:3): [True: 0, False: 0]
  ------------------
 1116|      0|		load->fail_on = load->fail
  ------------------
  |  Branch (1116:19): [True: 0, False: 0]
  ------------------
 1117|      0|			? VIPS_FAIL_ON_WARNING
 1118|      0|			: VIPS_FAIL_ON_NONE;
 1119|       |
 1120|  23.5k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_parent_class)->build(object))
  ------------------
  |  |  435|  23.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  23.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  23.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1120:6): [True: 0, False: 23.5k]
  ------------------
 1121|      0|		return -1;
 1122|       |
 1123|  23.5k|	if (load->sequential)
  ------------------
  |  Branch (1123:6): [True: 0, False: 23.5k]
  ------------------
 1124|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1125|  23.5k|			_("ignoring deprecated \"sequential\" mode -- "
 1126|  23.5k|			  "please use \"access\" instead"));
 1127|       |
 1128|  23.5k|	g_object_set(object, "out", vips_image_new(), NULL);
 1129|       |
 1130|  23.5k|	vips_image_set_string(load->out,
 1131|  23.5k|		VIPS_META_LOADER, class->nickname);
  ------------------
  |  |  115|  23.5k|#define VIPS_META_LOADER "vips-loader"
  ------------------
 1132|       |
 1133|       |#ifdef DEBUG
 1134|       |	printf("vips_foreign_load_build: triggering ->header()\n");
 1135|       |#endif /*DEBUG*/
 1136|       |
 1137|       |	/* Read the header into @out.
 1138|       |	 */
 1139|  23.5k|	if (fclass->header &&
  ------------------
  |  Branch (1139:6): [True: 23.5k, False: 0]
  ------------------
 1140|  23.5k|		fclass->header(load))
  ------------------
  |  Branch (1140:3): [True: 6.73k, False: 16.8k]
  ------------------
 1141|  6.73k|		return -1;
 1142|       |
 1143|       |	/* If there's no ->load() method then the header read has done
 1144|       |	 * everything. Otherwise, it's just set fields and we must also
 1145|       |	 * load pixels.
 1146|       |	 *
 1147|       |	 * Delay the load until the first pixel is requested by doing the work
 1148|       |	 * in the start function of the copy.
 1149|       |	 */
 1150|  16.8k|	if (fclass->load) {
  ------------------
  |  Branch (1150:6): [True: 16.8k, False: 0]
  ------------------
 1151|       |#ifdef DEBUG
 1152|       |		printf("vips_foreign_load_build: delaying read ...\n");
 1153|       |#endif /*DEBUG*/
 1154|       |
 1155|       |		/* ->header() should set the dhint. It'll default to the safe
 1156|       |		 * SMALLTILE if header() did not set it.
 1157|       |		 */
 1158|  16.8k|		if (vips_image_pipelinev(load->out, load->out->dhint, NULL))
  ------------------
  |  Branch (1158:7): [True: 0, False: 16.8k]
  ------------------
 1159|      0|			return -1;
 1160|       |
 1161|       |		/* Then 'start' creates the real image and 'gen' fetches
 1162|       |		 * pixels for @out from @real on demand.
 1163|       |		 */
 1164|  16.8k|		if (vips_image_generate(load->out,
  ------------------
  |  Branch (1164:7): [True: 0, False: 16.8k]
  ------------------
 1165|  16.8k|				vips_foreign_load_start,
 1166|  16.8k|				vips_foreign_load_generate,
 1167|  16.8k|				vips_stop_one,
 1168|  16.8k|				NULL, load))
 1169|      0|			return -1;
 1170|  16.8k|	}
 1171|       |
 1172|       |	/* Tell downstream if seq mode was requested.
 1173|       |	 */
 1174|  16.8k|	if (load->access != VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (1174:6): [True: 0, False: 16.8k]
  ------------------
 1175|      0|		vips_image_set_int(load->out, VIPS_META_SEQUENTIAL, 1);
  ------------------
  |  |  124|      0|#define VIPS_META_SEQUENTIAL "vips-sequential"
  ------------------
 1176|       |
 1177|  16.8k|	return 0;
 1178|  16.8k|}
foreign.c:vips_foreign_load_start:
  991|  14.8k|{
  992|  14.8k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(b);
  ------------------
  |  |  133|  14.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  14.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  14.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  14.8k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  993|  14.8k|	VipsForeignLoadClass *class = VIPS_FOREIGN_LOAD_GET_CLASS(load);
  ------------------
  |  |  143|  14.8k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  14.8k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  14.8k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|  14.8k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass))
  ------------------
  994|       |
  995|       |	/* If this start has failed before in another thread, we can fail now.
  996|       |	 */
  997|  14.8k|	if (load->error)
  ------------------
  |  Branch (997:6): [True: 0, False: 14.8k]
  ------------------
  998|      0|		return NULL;
  999|       |
 1000|  14.8k|	if (!load->real) {
  ------------------
  |  Branch (1000:6): [True: 14.8k, False: 0]
  ------------------
 1001|  14.8k|		if (!(load->real = vips_foreign_load_temp(load)))
  ------------------
  |  Branch (1001:7): [True: 0, False: 14.8k]
  ------------------
 1002|      0|			return NULL;
 1003|       |
 1004|       |#ifdef DEBUG
 1005|       |		printf("vips_foreign_load_start: triggering ->load()\n");
 1006|       |#endif /*DEBUG*/
 1007|       |
 1008|       |		/* Read the image in. This may involve a long computation and
 1009|       |		 * will finish with load->real holding the decompressed image.
 1010|       |		 *
 1011|       |		 * We want our caller to be able to see this computation on
 1012|       |		 * @out, so eval signals on ->real need to appear on ->out.
 1013|       |		 */
 1014|  14.8k|		load->real->progress_signal = load->out;
 1015|       |
 1016|       |		/* Note the load object on the image. Loaders can use
 1017|       |		 * this to signal invalidate if they hit a load error. See
 1018|       |		 * vips_foreign_load_invalidate() below.
 1019|       |		 */
 1020|  14.8k|		g_object_set_qdata(G_OBJECT(load->real),
  ------------------
  |  |   51|  14.8k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  14.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  14.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1021|  14.8k|			vips__foreign_load_operation, load);
 1022|       |
 1023|       |		/* Load the image and check the result.
 1024|       |		 *
 1025|       |		 * ->header() read the header into @out, load will read the
 1026|       |		 * image into @real. They must match exactly in size, bands,
 1027|       |		 * format and coding for the copy to work.
 1028|       |		 *
 1029|       |		 * Some versions of ImageMagick give different results between
 1030|       |		 * Ping and Load for some formats, for example.
 1031|       |		 *
 1032|       |		 * If the load fails, we need to stop.
 1033|       |		 */
 1034|  14.8k|		if (class->load(load) ||
  ------------------
  |  Branch (1034:7): [True: 7.36k, False: 7.48k]
  ------------------
 1035|  14.8k|			vips_image_pio_input(load->real) ||
  ------------------
  |  Branch (1035:4): [True: 0, False: 7.48k]
  ------------------
 1036|  14.8k|			!vips_foreign_load_iscompat(load->real, out)) {
  ------------------
  |  Branch (1036:4): [True: 28, False: 7.45k]
  ------------------
 1037|  7.39k|			vips_operation_invalidate(VIPS_OPERATION(load));
  ------------------
  |  |   57|  7.39k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  7.39k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.39k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  7.39k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
 1038|  7.39k|			load->error = TRUE;
  ------------------
  |  |  798|  7.39k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.39k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1039|       |
 1040|  7.39k|			return NULL;
 1041|  7.39k|		}
 1042|       |
 1043|       |		/* We have to tell vips that out depends on real. We've set
 1044|       |		 * the demand hint below, but not given an input there.
 1045|       |		 */
 1046|  7.45k|		if (vips_image_pipelinev(load->out, load->out->dhint,
  ------------------
  |  Branch (1046:7): [True: 0, False: 7.45k]
  ------------------
 1047|  7.45k|				load->real, NULL))
 1048|      0|			return NULL;
 1049|  7.45k|	}
 1050|       |
 1051|  7.45k|	return vips_region_new(load->real);
 1052|  14.8k|}
foreign.c:vips_foreign_load_temp:
  908|  14.8k|{
  909|  14.8k|	const guint64 disc_threshold = vips_get_disc_threshold();
  910|  14.8k|	const guint64 image_size = VIPS_IMAGE_SIZEOF_IMAGE(load->out);
  ------------------
  |  |  388|  14.8k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  14.8k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  14.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  14.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|       |
  912|       |	/* ->memory used to be called ->disc and default TRUE. If it's been
  913|       |	 * forced FALSE, set memory TRUE.
  914|       |	 */
  915|  14.8k|	if (!load->disc)
  ------------------
  |  Branch (915:6): [True: 0, False: 14.8k]
  ------------------
  916|      0|		load->memory = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  917|       |
  918|  14.8k|	if (load->memory) {
  ------------------
  |  Branch (918:6): [True: 0, False: 14.8k]
  ------------------
  919|       |#ifdef DEBUG
  920|       |		printf("vips_foreign_load_temp: forced memory temp\n");
  921|       |#endif /*DEBUG*/
  922|       |
  923|      0|		return vips_image_new_memory();
  924|      0|	}
  925|       |
  926|       |	/* If this is a partial operation, we can open directly.
  927|       |	 */
  928|  14.8k|	if (load->flags & VIPS_FOREIGN_PARTIAL) {
  ------------------
  |  Branch (928:6): [True: 1.41k, False: 13.4k]
  ------------------
  929|       |#ifdef DEBUG
  930|       |		printf("vips_foreign_load_temp: partial temp\n");
  931|       |#endif /*DEBUG*/
  932|       |
  933|  1.41k|		return vips_image_new();
  934|  1.41k|	}
  935|       |
  936|       |	/* If it can do sequential access and it's been requested, we can open
  937|       |	 * directly.
  938|       |	 */
  939|  13.4k|	if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) &&
  ------------------
  |  Branch (939:6): [True: 12.0k, False: 1.41k]
  ------------------
  940|  13.4k|		load->access != VIPS_ACCESS_RANDOM) {
  ------------------
  |  Branch (940:3): [True: 0, False: 12.0k]
  ------------------
  941|       |#ifdef DEBUG
  942|       |		printf("vips_foreign_load_temp: partial sequential temp\n");
  943|       |#endif /*DEBUG*/
  944|       |
  945|      0|		return vips_image_new();
  946|      0|	}
  947|       |
  948|       |	/* We open via disc if the uncompressed image will be larger than
  949|       |	 * vips_get_disc_threshold()
  950|       |	 */
  951|  13.4k|	if (image_size > disc_threshold) {
  ------------------
  |  Branch (951:6): [True: 0, False: 13.4k]
  ------------------
  952|       |#ifdef DEBUG
  953|       |		printf("vips_foreign_load_temp: disc temp\n");
  954|       |#endif /*DEBUG*/
  955|       |
  956|      0|		return vips_image_new_temp_file("%s.v");
  957|      0|	}
  958|       |
  959|       |#ifdef DEBUG
  960|       |	printf("vips_foreign_load_temp: fallback memory temp\n");
  961|       |#endif /*DEBUG*/
  962|       |
  963|       |	/* Otherwise, fall back to a memory buffer.
  964|       |	 */
  965|  13.4k|	return vips_image_new_memory();
  966|  13.4k|}
foreign.c:vips_foreign_load_iscompat:
  972|  7.48k|{
  973|  7.48k|	if (a->Xsize != b->Xsize ||
  ------------------
  |  Branch (973:6): [True: 0, False: 7.48k]
  ------------------
  974|  7.48k|		a->Ysize != b->Ysize ||
  ------------------
  |  Branch (974:3): [True: 0, False: 7.48k]
  ------------------
  975|  7.48k|		a->Bands != b->Bands ||
  ------------------
  |  Branch (975:3): [True: 28, False: 7.45k]
  ------------------
  976|  7.48k|		a->Coding != b->Coding ||
  ------------------
  |  Branch (976:3): [True: 0, False: 7.45k]
  ------------------
  977|  7.48k|		a->BandFmt != b->BandFmt) {
  ------------------
  |  Branch (977:3): [True: 0, False: 7.45k]
  ------------------
  978|     28|		vips_error("VipsForeignLoad", "%s",
  979|     28|			_("images do not match between header and load"));
  ------------------
  |  |   30|     28|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     28|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  980|     28|		return FALSE;
  ------------------
  |  |  794|     28|#define	FALSE	(0)
  ------------------
  981|     28|	}
  982|       |
  983|  7.45k|	return TRUE;
  ------------------
  |  |  798|  7.45k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.45k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  984|  7.48k|}
foreign.c:vips_foreign_load_generate:
 1059|  20.2k|{
 1060|  20.2k|	VipsRegion *ir = (VipsRegion *) seq;
 1061|       |
 1062|  20.2k|	VipsRect *r = &out_region->valid;
 1063|       |
 1064|       |	/* Ask for input we need.
 1065|       |	 */
 1066|  20.2k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (1066:6): [True: 148, False: 20.1k]
  ------------------
 1067|    148|		return -1;
 1068|       |
 1069|       |	/* Attach output region to that.
 1070|       |	 */
 1071|  20.1k|	if (vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (1071:6): [True: 0, False: 20.1k]
  ------------------
 1072|      0|		return -1;
 1073|       |
 1074|  20.1k|	return 0;
 1075|  20.1k|}
foreign.c:vips_foreign_load_operation_get_flags:
 1182|  42.7k|{
 1183|  42.7k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(operation);
  ------------------
  |  |  133|  42.7k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  42.7k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  42.7k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  42.7k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
 1184|       |
 1185|  42.7k|	VipsOperationFlags flags;
 1186|       |
 1187|  42.7k|	flags = VIPS_OPERATION_CLASS(vips_foreign_load_parent_class)
  ------------------
  |  |   60|  42.7k|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|  42.7k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  42.7k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  42.7k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1188|  42.7k|				->get_flags(operation);
 1189|  42.7k|	if (load->nocache)
  ------------------
  |  Branch (1189:6): [True: 0, False: 42.7k]
  ------------------
 1190|      0|		flags |= VIPS_OPERATION_NOCACHE;
 1191|  42.7k|	if (load->revalidate)
  ------------------
  |  Branch (1191:6): [True: 0, False: 42.7k]
  ------------------
 1192|      0|		flags |= VIPS_OPERATION_REVALIDATE;
 1193|       |
 1194|  42.7k|	return flags;
 1195|  42.7k|}
foreign.c:vips_foreign_load_init:
 1281|  25.9k|{
 1282|  25.9k|	load->disc = TRUE;
  ------------------
  |  |  798|  25.9k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  25.9k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1283|  25.9k|	load->access = VIPS_ACCESS_RANDOM;
 1284|  25.9k|	load->fail_on = VIPS_FAIL_ON_NONE;
 1285|  25.9k|}
foreign.c:vips_foreign_find_load_buffer_sub:
  663|   687k|{
  664|   687k|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(load_class);
  ------------------
  |  |  435|   687k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   687k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   687k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  665|       |
  666|       |	/* Skip non-buffer loaders.
  667|       |	 */
  668|   687k|	if (!g_str_has_suffix(object_class->nickname, "_buffer"))
  ------------------
  |  Branch (668:6): [True: 513k, False: 173k]
  ------------------
  669|   513k|		return NULL;
  670|       |
  671|   173k|	if (load_class->is_a_buffer) {
  ------------------
  |  Branch (671:6): [True: 173k, False: 0]
  ------------------
  672|   173k|		if (load_class->is_a_buffer(*buf, *len))
  ------------------
  |  Branch (672:7): [True: 25.9k, False: 147k]
  ------------------
  673|  25.9k|			return load_class;
  674|   173k|	}
  675|      0|	else
  676|      0|		g_warning("loader %s has no is_a_buffer method",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  677|   173k|			object_class->nickname);
  678|       |
  679|   147k|	return NULL;
  680|   173k|}
foreign.c:vips_foreign_save_class_init:
 1858|      1|{
 1859|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1860|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1861|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1862|       |
 1863|      1|	int i;
 1864|       |
 1865|      1|	gobject_class->dispose = vips_foreign_save_dispose;
 1866|      1|	gobject_class->set_property = vips_object_set_property;
 1867|      1|	gobject_class->get_property = vips_object_get_property;
 1868|       |
 1869|      1|	object_class->build = vips_foreign_save_build;
 1870|      1|	object_class->summary_class = vips_foreign_save_summary_class;
 1871|      1|	object_class->new_from_string = vips_foreign_save_new_from_string;
 1872|      1|	object_class->nickname = "save";
 1873|      1|	object_class->description = _("savers");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1874|       |
 1875|       |	/* All savers are sequential by definition. Things like tiled tiff
 1876|       |	 * write and interlaced png write, which are not, add extra caches
 1877|       |	 * on their input.
 1878|       |	 */
 1879|      1|	operation_class->flags |= VIPS_OPERATION_SEQUENTIAL;
 1880|       |
 1881|       |	/* Must not cache savers.
 1882|       |	 */
 1883|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
 1884|       |
 1885|       |	/* Default to no coding allowed.
 1886|       |	 */
 1887|      8|	for (i = 0; i < VIPS_CODING_LAST; i++)
  ------------------
  |  Branch (1887:14): [True: 7, False: 1]
  ------------------
 1888|      7|		class->coding[i] = FALSE;
  ------------------
  |  |  794|      7|#define	FALSE	(0)
  ------------------
 1889|      1|	class->coding[VIPS_CODING_NONE] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1890|       |
 1891|       |	/* Default to no cast on save.
 1892|       |	 */
 1893|      1|	class->format_table = vips_foreign_save_format_table;
 1894|       |
 1895|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1896|      1|		_("Input"),
 1897|      1|		_("Image to save"),
 1898|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1899|      1|		G_STRUCT_OFFSET(VipsForeignSave, in));
 1900|       |
 1901|      1|	VIPS_ARG_FLAGS(class, "keep", 100,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
 1902|      1|		_("Keep"),
 1903|      1|		_("Which metadata to retain"),
 1904|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1905|      1|		G_STRUCT_OFFSET(VipsForeignSave, keep),
 1906|      1|		VIPS_TYPE_FOREIGN_KEEP,
 1907|      1|		VIPS_FOREIGN_KEEP_ALL);
 1908|       |
 1909|      1|	VIPS_ARG_BOXED(class, "background", 101,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1910|      1|		_("Background"),
 1911|      1|		_("Background value"),
 1912|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1913|      1|		G_STRUCT_OFFSET(VipsForeignSave, background),
 1914|      1|		VIPS_TYPE_ARRAY_DOUBLE);
 1915|       |
 1916|      1|	VIPS_ARG_INT(class, "page_height", 102,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1917|      1|		_("Page height"),
 1918|      1|		_("Set page height for multipage save"),
 1919|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1920|      1|		G_STRUCT_OFFSET(VipsForeignSave, page_height),
 1921|      1|		0, VIPS_MAX_COORD, 0);
 1922|       |
 1923|      1|	VIPS_ARG_STRING(class, "profile", 103,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1924|      1|		_("Profile"),
 1925|      1|		_("Filename of ICC profile to embed"),
 1926|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1927|      1|		G_STRUCT_OFFSET(VipsForeignSave, profile),
 1928|      1|		NULL);
 1929|       |
 1930|      1|	VIPS_ARG_BOOL(class, "strip", 104,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1931|      1|		_("Strip"),
 1932|      1|		_("Strip all metadata from image"),
 1933|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1934|      1|		G_STRUCT_OFFSET(VipsForeignSave, strip),
 1935|      1|		FALSE);
 1936|      1|}
foreign.c:vips_foreign_save_dispose:
 1326|  15.5k|{
 1327|  15.5k|	VipsForeignSave *save = VIPS_FOREIGN_SAVE(gobject);
  ------------------
  |  |  299|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  300|  15.5k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSave))
  ------------------
 1328|       |
 1329|  15.5k|	VIPS_UNREF(save->ready);
  ------------------
  |  |   57|  15.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  15.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.5k|	{ \
  |  |  |  |   43|  15.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 15.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  15.5k|			(void) F((S)); \
  |  |  |  |   45|  15.5k|			(S) = 0; \
  |  |  |  |   46|  15.5k|		} \
  |  |  |  |   47|  15.5k|	} \
  |  |  |  |   48|  15.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1330|       |
 1331|  15.5k|	G_OBJECT_CLASS(vips_foreign_save_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  15.5k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1332|  15.5k|}
foreign.c:vips_foreign_save_build:
 1785|  15.5k|{
 1786|  15.5k|	VipsForeignSave *save = VIPS_FOREIGN_SAVE(object);
  ------------------
  |  |  299|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  300|  15.5k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSave))
  ------------------
 1787|       |
 1788|       |	/* The deprecated "strip" field sets "keep" to none.
 1789|       |	 */
 1790|  15.5k|	if (vips_object_argument_isset(object, "strip") &&
  ------------------
  |  Branch (1790:6): [True: 0, False: 15.5k]
  ------------------
 1791|  15.5k|		!vips_object_argument_isset(object, "keep"))
  ------------------
  |  Branch (1791:3): [True: 0, False: 0]
  ------------------
 1792|      0|		save->keep = save->strip
  ------------------
  |  Branch (1792:16): [True: 0, False: 0]
  ------------------
 1793|      0|			? VIPS_FOREIGN_KEEP_NONE
 1794|      0|			: VIPS_FOREIGN_KEEP_ALL;
 1795|       |
 1796|       |	/* Keep ICC profile by default when a user profile has been set.
 1797|       |	 */
 1798|  15.5k|	if ((save->keep & VIPS_FOREIGN_KEEP_ICC) == 0 &&
  ------------------
  |  Branch (1798:6): [True: 0, False: 15.5k]
  ------------------
 1799|  15.5k|		vips_object_argument_isset(object, "profile"))
  ------------------
  |  Branch (1799:3): [True: 0, False: 0]
  ------------------
 1800|      0|		save->keep |= VIPS_FOREIGN_KEEP_ICC;
 1801|       |
 1802|  15.5k|	if (save->in) {
  ------------------
  |  Branch (1802:6): [True: 15.5k, False: 0]
  ------------------
 1803|  15.5k|		VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_GET_CLASS(save);
  ------------------
  |  |  309|  15.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  15.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  15.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  310|  15.5k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSaveClass))
  ------------------
 1804|  15.5k|		VipsImage *ready;
 1805|  15.5k|		VipsImage *x;
 1806|       |
 1807|  15.5k|		if (vips__foreign_convert_saveable(save->in, &ready,
  ------------------
  |  Branch (1807:7): [True: 0, False: 15.5k]
  ------------------
 1808|  15.5k|				class->saveable, class->format_table, class->coding,
 1809|  15.5k|				save->background))
 1810|      0|			return -1;
 1811|       |
 1812|       |		/* Updating metadata, need to copy the image.
 1813|       |		 */
 1814|  15.5k|		if (vips_copy(ready, &x, NULL)) {
  ------------------
  |  Branch (1814:7): [True: 0, False: 15.5k]
  ------------------
 1815|      0|			VIPS_UNREF(ready);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1816|      0|			return -1;
 1817|      0|		}
 1818|  15.5k|		VIPS_UNREF(ready);
  ------------------
  |  |   57|  15.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  15.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.5k|	{ \
  |  |  |  |   43|  15.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 15.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  15.5k|			(void) F((S)); \
  |  |  |  |   45|  15.5k|			(S) = 0; \
  |  |  |  |   46|  15.5k|		} \
  |  |  |  |   47|  15.5k|	} \
  |  |  |  |   48|  15.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1819|  15.5k|		ready = x;
 1820|       |
 1821|  15.5k|		if (vips__foreign_update_metadata(ready, save->keep)) {
  ------------------
  |  Branch (1821:7): [True: 0, False: 15.5k]
  ------------------
 1822|      0|			VIPS_UNREF(ready);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1823|      0|			return -1;
 1824|      0|		}
 1825|       |
 1826|  15.5k|		if (save->page_height)
  ------------------
  |  Branch (1826:7): [True: 0, False: 15.5k]
  ------------------
 1827|      0|			vips_image_set_int(ready, VIPS_META_PAGE_HEIGHT,
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
 1828|      0|				save->page_height);
 1829|       |
 1830|  15.5k|		VIPS_UNREF(save->ready);
  ------------------
  |  |   57|  15.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  15.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.5k|	{ \
  |  |  |  |   43|  15.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 15.5k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  15.5k|	} \
  |  |  |  |   48|  15.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1831|  15.5k|		save->ready = ready;
 1832|  15.5k|	}
 1833|       |
 1834|  15.5k|	if (VIPS_OBJECT_CLASS(vips_foreign_save_parent_class)->build(object))
  ------------------
  |  |  435|  15.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1834:6): [True: 0, False: 15.5k]
  ------------------
 1835|      0|		return -1;
 1836|       |
 1837|  15.5k|	return 0;
 1838|  15.5k|}
foreign.c:vips_foreign_save_init:
 1940|  15.5k|{
 1941|  15.5k|	save->keep = VIPS_FOREIGN_KEEP_ALL;
 1942|  15.5k|	save->background = vips_array_double_newv(1, 0.0);
 1943|  15.5k|}
foreign.c:vips_foreign_find_save_target_sub:
 2115|  62.2k|{
 2116|  62.2k|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(save_class);
  ------------------
  |  |  435|  62.2k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  62.2k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  62.2k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2117|  62.2k|	VipsForeignClass *class = VIPS_FOREIGN_CLASS(save_class);
  ------------------
  |  |   49|  62.2k|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|  62.2k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  62.2k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|  62.2k|		VIPS_TYPE_FOREIGN, VipsForeignClass))
  ------------------
 2118|       |
 2119|       |	/* All concrete savers needs suffs, since we use the suff to pick the
 2120|       |	 * saver.
 2121|       |	 */
 2122|  62.2k|	if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) &&
  ------------------
  |  |  343|   124k|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2122:6): [True: 62.2k, False: 0]
  ------------------
 2123|  62.2k|		!class->suffs)
  ------------------
  |  Branch (2123:3): [True: 0, False: 62.2k]
  ------------------
 2124|      0|		g_warning("no suffix defined for %s", object_class->nickname);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 2125|       |
 2126|  62.2k|	if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) &&
  ------------------
  |  |  343|   124k|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2126:6): [True: 62.2k, False: 0]
  ------------------
 2127|  62.2k|		class->suffs &&
  ------------------
  |  Branch (2127:3): [True: 62.2k, False: 0]
  ------------------
 2128|  62.2k|		g_str_has_suffix(object_class->nickname, "_target") &&
  ------------------
  |  Branch (2128:3): [True: 31.1k, False: 31.1k]
  ------------------
 2129|  62.2k|		vips_filename_suffix_match(suffix, class->suffs))
  ------------------
  |  Branch (2129:3): [True: 15.5k, False: 15.5k]
  ------------------
 2130|  15.5k|		return save_class;
 2131|       |
 2132|  46.6k|	return NULL;
 2133|  62.2k|}

vips__heif_init:
  232|      2|{
  233|      2|#ifdef HAVE_HEIF_INIT
  234|      2|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      2|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  235|       |
  236|      2|	VIPS_ONCE(&once, vips__heif_init_once, NULL);
  ------------------
  |  |   93|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      2|	{ \
  |  |   95|      2|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      2|   else                                         \
  |  |  |  |  |  |  931|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      2|	} \
  |  |   98|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|      2|#endif /*HAVE_HEIF_INIT*/
  238|      2|}
vips__heif_error:
  242|  4.72k|{
  243|  4.72k|	if (error->code)
  ------------------
  |  Branch (243:6): [True: 4.72k, False: 0]
  ------------------
  244|  4.72k|		vips_error("heif", "%s (%d.%d)",
  245|  4.72k|			error->message ? error->message : "(null)",
  ------------------
  |  Branch (245:4): [True: 4.72k, False: 0]
  ------------------
  246|  4.72k|			error->code, error->subcode);
  247|  4.72k|}
vips__heif_chroma:
  297|  2.37k|{
  298|  2.37k|	if (bits_per_pixel == 8) {
  ------------------
  |  Branch (298:6): [True: 65, False: 2.30k]
  ------------------
  299|     65|		if (has_alpha)
  ------------------
  |  Branch (299:7): [True: 0, False: 65]
  ------------------
  300|      0|			return heif_chroma_interleaved_RGBA;
  301|     65|		else
  302|     65|			return heif_chroma_interleaved_RGB;
  303|     65|	}
  304|  2.30k|	else {
  305|  2.30k|		if (has_alpha)
  ------------------
  |  Branch (305:7): [True: 0, False: 2.30k]
  ------------------
  306|      0|			return heif_chroma_interleaved_RRGGBBAA_BE;
  307|  2.30k|		else
  308|  2.30k|			return heif_chroma_interleaved_RRGGBB_BE;
  309|  2.30k|	}
  310|  2.37k|}
heifload.c:vips__heif_init_once:
  217|      1|{
  218|      1|	struct heif_error error;
  219|       |
  220|      1|	error = heif_init(NULL);
  221|      1|	if (error.code)
  ------------------
  |  Branch (221:6): [True: 0, False: 1]
  ------------------
  222|      0|		g_warning("heif_init: %s (%d.%d)\n",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (340:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  223|      1|			error.message ? error.message : "(null)",
  224|      1|			error.code, error.subcode);
  225|       |
  226|      1|	return NULL;
  227|      1|}
heifload.c:vips_foreign_load_heif_class_init:
 1063|      1|{
 1064|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1066|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1067|       |
 1068|      1|	vips__heif_init();
 1069|       |
 1070|      1|	gobject_class->dispose = vips_foreign_load_heif_dispose;
 1071|      1|	gobject_class->set_property = vips_object_set_property;
 1072|      1|	gobject_class->get_property = vips_object_get_property;
 1073|       |
 1074|      1|	object_class->nickname = "heifload_base";
 1075|      1|	object_class->description = _("load a HEIF image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1076|      1|	object_class->build = vips_foreign_load_heif_build;
 1077|       |
 1078|      1|	load_class->get_flags = vips_foreign_load_heif_get_flags;
 1079|      1|	load_class->header = vips_foreign_load_heif_header;
 1080|      1|	load_class->load = vips_foreign_load_heif_load;
 1081|       |
 1082|      1|	VIPS_ARG_INT(class, "page", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1083|      1|		_("Page"),
 1084|      1|		_("First page to load"),
 1085|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1086|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, page),
 1087|      1|		0, 100000, 0);
 1088|       |
 1089|      1|	VIPS_ARG_INT(class, "n", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1090|      1|		_("n"),
 1091|      1|		_("Number of pages to load, -1 for all"),
 1092|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1093|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, n),
 1094|      1|		-1, 100000, 1);
 1095|       |
 1096|      1|	VIPS_ARG_BOOL(class, "thumbnail", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1097|      1|		_("Thumbnail"),
 1098|      1|		_("Fetch thumbnail image"),
 1099|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1100|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, thumbnail),
 1101|      1|		FALSE);
 1102|       |
 1103|      1|	VIPS_ARG_BOOL(class, "autorotate", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1104|      1|		_("Autorotate"),
 1105|      1|		_("Rotate image using exif orientation"),
 1106|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1107|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, autorotate),
 1108|      1|		FALSE);
 1109|       |
 1110|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
 1111|       |	VIPS_ARG_BOOL(class, "unlimited", 22,
 1112|       |		_("Unlimited"),
 1113|       |		_("Remove all denial of service limits"),
 1114|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1115|       |		G_STRUCT_OFFSET(VipsForeignLoadHeif, unlimited),
 1116|       |		FALSE);
 1117|       |#endif
 1118|      1|}
heifload.c:vips_foreign_load_heif_dispose:
  322|  4.88k|{
  323|  4.88k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) gobject;
  324|       |
  325|  4.88k|	heif->data = NULL;
  326|  4.88k|	VIPS_FREEF(heif_image_release, heif->img);
  ------------------
  |  |   41|  4.88k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  4.88k|	{ \
  |  |   43|  4.88k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 3, False: 4.88k]
  |  |  ------------------
  |  |   44|      3|			(void) F((S)); \
  |  |   45|      3|			(S) = 0; \
  |  |   46|      3|		} \
  |  |   47|  4.88k|	} \
  |  |   48|  4.88k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|  4.88k|	VIPS_FREEF(heif_image_handle_release, heif->handle);
  ------------------
  |  |   41|  4.88k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  4.88k|	{ \
  |  |   43|  4.88k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 2.52k, False: 2.36k]
  |  |  ------------------
  |  |   44|  2.52k|			(void) F((S)); \
  |  |   45|  2.52k|			(S) = 0; \
  |  |   46|  2.52k|		} \
  |  |   47|  4.88k|	} \
  |  |   48|  4.88k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|  4.88k|	VIPS_FREEF(heif_context_free, heif->ctx);
  ------------------
  |  |   41|  4.88k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  4.88k|	{ \
  |  |   43|  4.88k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 4.88k, False: 0]
  |  |  ------------------
  |  |   44|  4.88k|			(void) F((S)); \
  |  |   45|  4.88k|			(S) = 0; \
  |  |   46|  4.88k|		} \
  |  |   47|  4.88k|	} \
  |  |   48|  4.88k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  4.88k|	VIPS_FREE(heif->id);
  ------------------
  |  |   50|  4.88k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  4.88k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  4.88k|	{ \
  |  |  |  |   43|  4.88k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.52k, False: 2.36k]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.52k|			(void) F((S)); \
  |  |  |  |   45|  2.52k|			(S) = 0; \
  |  |  |  |   46|  2.52k|		} \
  |  |  |  |   47|  4.88k|	} \
  |  |  |  |   48|  4.88k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  4.88k|	VIPS_FREE(heif->reader);
  ------------------
  |  |   50|  4.88k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  4.88k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  4.88k|	{ \
  |  |  |  |   43|  4.88k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 4.88k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  4.88k|			(void) F((S)); \
  |  |  |  |   45|  4.88k|			(S) = 0; \
  |  |  |  |   46|  4.88k|		} \
  |  |  |  |   47|  4.88k|	} \
  |  |  |  |   48|  4.88k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|  4.88k|	VIPS_UNREF(heif->source);
  ------------------
  |  |   57|  4.88k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  4.88k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  4.88k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  4.88k|	{ \
  |  |  |  |   43|  4.88k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 4.88k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  4.88k|			(void) F((S)); \
  |  |  |  |   45|  4.88k|			(S) = 0; \
  |  |  |  |   46|  4.88k|		} \
  |  |  |  |   47|  4.88k|	} \
  |  |  |  |   48|  4.88k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  4.88k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |
  333|  4.88k|	G_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  4.88k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  4.88k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  4.88k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  4.88k|}
heifload.c:vips_foreign_load_heif_build:
  338|  4.88k|{
  339|  4.88k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object;
  340|       |
  341|       |#ifdef DEBUG
  342|       |	printf("vips_foreign_load_heif_build:\n");
  343|       |#endif /*DEBUG*/
  344|       |
  345|  4.88k|	if (heif->source &&
  ------------------
  |  Branch (345:6): [True: 4.88k, False: 0]
  ------------------
  346|  4.88k|		vips_source_rewind(heif->source))
  ------------------
  |  Branch (346:3): [True: 0, False: 4.88k]
  ------------------
  347|      0|		return -1;
  348|       |
  349|  4.88k|	if (!heif->ctx) {
  ------------------
  |  Branch (349:6): [True: 4.88k, False: 0]
  ------------------
  350|  4.88k|		struct heif_error error;
  351|       |
  352|  4.88k|		heif->ctx = heif_context_alloc();
  353|  4.88k|#ifdef HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT
  354|  4.88k|		heif_context_set_maximum_image_size_limit(heif->ctx,
  355|  4.88k|			heif->unlimited ? USHRT_MAX : 0x4000);
  ------------------
  |  Branch (355:4): [True: 0, False: 4.88k]
  ------------------
  356|  4.88k|#endif /* HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT */
  357|  4.88k|		error = heif_context_read_from_reader(heif->ctx,
  358|  4.88k|			heif->reader, heif, NULL);
  359|  4.88k|		if (error.code) {
  ------------------
  |  Branch (359:7): [True: 2.36k, False: 2.52k]
  ------------------
  360|  2.36k|			vips__heif_error(&error);
  361|  2.36k|			return -1;
  362|  2.36k|		}
  363|  4.88k|	}
  364|       |
  365|  2.52k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->build(object))
  ------------------
  |  |  435|  2.52k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.52k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.52k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (365:6): [True: 110, False: 2.41k]
  ------------------
  366|    110|		return -1;
  367|       |
  368|  2.41k|	return 0;
  369|  2.52k|}
heifload.c:vips_foreign_load_heif_get_flags:
  420|  2.52k|{
  421|       |	/* FIXME .. could support random access for grid images.
  422|       |	 */
  423|  2.52k|	return VIPS_FOREIGN_SEQUENTIAL;
  424|  2.52k|}
heifload.c:vips_foreign_load_heif_header:
  780|  2.52k|{
  781|  2.52k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|  2.52k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.52k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.52k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  782|  2.52k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load;
  783|       |
  784|  2.52k|	struct heif_error error;
  785|  2.52k|	heif_item_id primary_id;
  786|  2.52k|	int i;
  787|       |
  788|       |#ifdef DEBUG
  789|       |	printf("vips_foreign_load_heif_header:\n");
  790|       |#endif /*DEBUG*/
  791|       |
  792|  2.52k|	heif->n_top = heif_context_get_number_of_top_level_images(heif->ctx);
  793|  2.52k|	heif->id = VIPS_ARRAY(NULL, heif->n_top, heif_item_id);
  ------------------
  |  |   72|  2.52k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  2.52k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  2.52k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  2.52k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  2.52k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  794|  2.52k|	heif_context_get_list_of_top_level_image_IDs(heif->ctx,
  795|  2.52k|		heif->id, heif->n_top);
  796|       |
  797|       |	/* Note page number of primary image.
  798|       |	 */
  799|  2.52k|	error = heif_context_get_primary_image_ID(heif->ctx, &primary_id);
  800|  2.52k|	if (error.code) {
  ------------------
  |  Branch (800:6): [True: 0, False: 2.52k]
  ------------------
  801|      0|		vips__heif_error(&error);
  802|      0|		return -1;
  803|      0|	}
  804|  5.09k|	for (i = 0; i < heif->n_top; i++)
  ------------------
  |  Branch (804:14): [True: 2.57k, False: 2.52k]
  ------------------
  805|  2.57k|		if (heif->id[i] == primary_id)
  ------------------
  |  Branch (805:7): [True: 2.52k, False: 49]
  ------------------
  806|  2.52k|			heif->primary_page = i;
  807|       |
  808|       |	/* If @n and @page have not been set, @page defaults to the primary
  809|       |	 * page.
  810|       |	 */
  811|  2.52k|	if (!vips_object_argument_isset(VIPS_OBJECT(load), "page") &&
  ------------------
  |  |  433|  2.52k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.52k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.52k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:6): [True: 2.52k, False: 0]
  ------------------
  812|  2.52k|		!vips_object_argument_isset(VIPS_OBJECT(load), "n"))
  ------------------
  |  |  433|  2.52k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.52k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.52k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (812:3): [True: 2.52k, False: 0]
  ------------------
  813|  2.52k|		heif->page = heif->primary_page; // FIXME: Invalidates operation cache
  814|       |
  815|  2.52k|	if (heif->n == -1)
  ------------------
  |  Branch (815:6): [True: 0, False: 2.52k]
  ------------------
  816|      0|		heif->n = heif->n_top - heif->page; // FIXME: Invalidates operation cache
  817|  2.52k|	if (heif->page < 0 ||
  ------------------
  |  Branch (817:6): [True: 0, False: 2.52k]
  ------------------
  818|  2.52k|		heif->n <= 0 ||
  ------------------
  |  Branch (818:3): [True: 0, False: 2.52k]
  ------------------
  819|  2.52k|		heif->page + heif->n > heif->n_top) {
  ------------------
  |  Branch (819:3): [True: 0, False: 2.52k]
  ------------------
  820|      0|		vips_error(class->nickname, "%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  821|      0|		return -1;
  822|      0|	}
  823|       |
  824|       |#ifdef DEBUG
  825|       |	for (i = heif->page; i < heif->page + heif->n; i++) {
  826|       |		heif_item_id thumb_ids[1];
  827|       |		int n_items;
  828|       |		int n_thumbs;
  829|       |		int j;
  830|       |
  831|       |		if (vips_foreign_load_heif_set_page(heif, i, FALSE))
  832|       |			return -1;
  833|       |
  834|       |		n_thumbs = heif_image_handle_get_number_of_thumbnails(heif->handle);
  835|       |		n_items = heif_image_handle_get_list_of_thumbnail_IDs(heif->handle,
  836|       |			thumb_ids, 1);
  837|       |
  838|       |		printf("page = %d\n", i);
  839|       |		printf("n_thumbs = %d\n", n_thumbs);
  840|       |		printf("n_items = %d\n", n_items);
  841|       |
  842|       |		for (j = 0; j < n_items; j++) {
  843|       |			struct heif_image_handle *thumb_handle;
  844|       |
  845|       |			error = heif_image_handle_get_thumbnail(heif->handle,
  846|       |				thumb_ids[j], &thumb_handle);
  847|       |			if (error.code) {
  848|       |				vips__heif_error(&error);
  849|       |				return -1;
  850|       |			}
  851|       |
  852|       |			printf("  thumb %d\n", j);
  853|       |			printf("    width = %d\n",
  854|       |				heif_image_handle_get_width(thumb_handle));
  855|       |			printf("    height = %d\n",
  856|       |				heif_image_handle_get_height(thumb_handle));
  857|       |			printf("    bits_per_pixel = %d\n",
  858|       |				heif_image_handle_get_luma_bits_per_pixel(thumb_handle));
  859|       |		}
  860|       |	}
  861|       |#endif /*DEBUG*/
  862|       |
  863|       |	/* All pages must be the same size for libvips toilet roll images.
  864|       |	 */
  865|  2.52k|	if (vips_foreign_load_heif_set_page(heif, heif->page, heif->thumbnail))
  ------------------
  |  Branch (865:6): [True: 1, False: 2.52k]
  ------------------
  866|      1|		return -1;
  867|  2.52k|	heif->page_width = heif_image_handle_get_width(heif->handle);
  868|  2.52k|	heif->page_height = heif_image_handle_get_height(heif->handle);
  869|  2.52k|	heif->bits_per_pixel =
  870|  2.52k|		heif_image_handle_get_luma_bits_per_pixel(heif->handle);
  871|  2.52k|	if (heif->bits_per_pixel < 0) {
  ------------------
  |  Branch (871:6): [True: 88, False: 2.43k]
  ------------------
  872|     88|		vips_error(class->nickname, "%s", _("undefined bits per pixel"));
  ------------------
  |  |   30|     88|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     88|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  873|     88|		return -1;
  874|     88|	}
  875|       |
  876|  2.43k|	for (i = heif->page + 1; i < heif->page + heif->n; i++) {
  ------------------
  |  Branch (876:27): [True: 0, False: 2.43k]
  ------------------
  877|      0|		if (vips_foreign_load_heif_set_page(heif, i, heif->thumbnail))
  ------------------
  |  Branch (877:7): [True: 0, False: 0]
  ------------------
  878|      0|			return -1;
  879|      0|		if (heif_image_handle_get_width(heif->handle) != heif->page_width ||
  ------------------
  |  Branch (879:7): [True: 0, False: 0]
  ------------------
  880|      0|			heif_image_handle_get_height(heif->handle) != heif->page_height ||
  ------------------
  |  Branch (880:4): [True: 0, False: 0]
  ------------------
  881|      0|			heif_image_handle_get_luma_bits_per_pixel(heif->handle) !=
  ------------------
  |  Branch (881:4): [True: 0, False: 0]
  ------------------
  882|      0|				heif->bits_per_pixel) {
  883|      0|			vips_error(class->nickname, "%s",
  884|      0|				_("not all pages are the same size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  885|      0|			return -1;
  886|      0|		}
  887|      0|	}
  888|       |
  889|       |#ifdef DEBUG
  890|       |	printf("page_width = %d\n", heif->page_width);
  891|       |	printf("page_height = %d\n", heif->page_height);
  892|       |	printf("bits_per_pixel = %d\n", heif->bits_per_pixel);
  893|       |
  894|       |	printf("n_top = %d\n", heif->n_top);
  895|       |	for (i = 0; i < heif->n_top; i++) {
  896|       |		printf("  id[%d] = %d\n", i, heif->id[i]);
  897|       |		if (vips_foreign_load_heif_set_page(heif, i, FALSE))
  898|       |			return -1;
  899|       |		printf("    width = %d\n",
  900|       |			heif_image_handle_get_width(heif->handle));
  901|       |		printf("    height = %d\n",
  902|       |			heif_image_handle_get_height(heif->handle));
  903|       |		printf("    bits_per_pixel = %d\n",
  904|       |			heif_image_handle_get_luma_bits_per_pixel(heif->handle));
  905|       |		printf("    has_depth = %d\n",
  906|       |			heif_image_handle_has_depth_image(heif->handle));
  907|       |		printf("    has_alpha = %d\n",
  908|       |			heif_image_handle_has_alpha_channel(heif->handle));
  909|       |		printf("    n_metadata = %d\n",
  910|       |			heif_image_handle_get_number_of_metadata_blocks(
  911|       |				heif->handle, NULL));
  912|       |#ifdef HAVE_HEIF_COLOR_PROFILE
  913|       |		printf("    colour profile type = 0x%xd\n",
  914|       |			heif_image_handle_get_color_profile_type(heif->handle));
  915|       |#endif /*HAVE_HEIF_COLOR_PROFILE*/
  916|       |	}
  917|       |#endif /*DEBUG*/
  918|       |
  919|  2.43k|	if (vips_foreign_load_heif_set_header(heif, load->out))
  ------------------
  |  Branch (919:6): [True: 21, False: 2.41k]
  ------------------
  920|     21|		return -1;
  921|       |
  922|  2.41k|	vips_source_minimise(heif->source);
  923|       |
  924|  2.41k|	return 0;
  925|  2.43k|}
heifload.c:vips_foreign_load_heif_set_page:
  501|  9.70k|{
  502|  9.70k|	if (!heif->handle ||
  ------------------
  |  Branch (502:6): [True: 2.52k, False: 7.17k]
  ------------------
  503|  9.70k|		page_no != heif->page_no ||
  ------------------
  |  Branch (503:3): [True: 0, False: 7.17k]
  ------------------
  504|  9.70k|		thumbnail != heif->thumbnail_set) {
  ------------------
  |  Branch (504:3): [True: 0, False: 7.17k]
  ------------------
  505|  2.52k|		struct heif_error error;
  506|       |
  507|       |#ifdef DEBUG
  508|       |		printf("vips_foreign_load_heif_set_page: %d, thumbnail = %d\n",
  509|       |			page_no, thumbnail);
  510|       |#endif /*DEBUG*/
  511|       |
  512|  2.52k|		VIPS_FREEF(heif_image_handle_release, heif->handle);
  ------------------
  |  |   41|  2.52k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.52k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.52k|	{ \
  |  |   43|  2.52k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 2.52k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  2.52k|	} \
  |  |   48|  2.52k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.52k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|  2.52k|		VIPS_FREEF(heif_image_release, heif->img);
  ------------------
  |  |   41|  2.52k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.52k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.52k|	{ \
  |  |   43|  2.52k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 2.52k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  2.52k|	} \
  |  |   48|  2.52k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.52k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  2.52k|		heif->data = NULL;
  515|  2.52k|		heif->thumbnail_set = FALSE;
  ------------------
  |  |  794|  2.52k|#define	FALSE	(0)
  ------------------
  516|       |
  517|  2.52k|		error = heif_context_get_image_handle(heif->ctx,
  518|  2.52k|			heif->id[page_no], &heif->handle);
  519|  2.52k|		if (error.code) {
  ------------------
  |  Branch (519:7): [True: 1, False: 2.52k]
  ------------------
  520|      1|			vips__heif_error(&error);
  521|      1|			return -1;
  522|      1|		}
  523|       |
  524|  2.52k|		if (thumbnail) {
  ------------------
  |  Branch (524:7): [True: 0, False: 2.52k]
  ------------------
  525|      0|			if (vips_foreign_load_heif_set_thumbnail(heif))
  ------------------
  |  Branch (525:8): [True: 0, False: 0]
  ------------------
  526|      0|				return -1;
  527|       |
  528|       |			/* If we were asked to select the thumbnail, say we
  529|       |			 * did, even if there are no thumbnails and we just
  530|       |			 * selected the main image.
  531|       |			 *
  532|       |			 * If we don't do this, next time around in _generate
  533|       |			 * we'll try to select the thumbnail again, which will
  534|       |			 * be horribly slow.
  535|       |			 */
  536|      0|			heif->thumbnail_set = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  537|      0|		}
  538|       |
  539|  2.52k|		heif->page_no = page_no;
  540|  2.52k|	}
  541|       |
  542|  9.70k|	return 0;
  543|  9.70k|}
heifload.c:vips_foreign_load_heif_set_header:
  547|  4.80k|{
  548|  4.80k|	VipsForeignLoad *load = (VipsForeignLoad *) heif;
  549|       |
  550|  4.80k|	int bands;
  551|  4.80k|	int i;
  552|       |	/* Surely, 16 metadata items will be enough for anyone.
  553|       |	 */
  554|  4.80k|	heif_item_id id[16];
  555|  4.80k|	int n_metadata;
  556|  4.80k|	struct heif_error error;
  557|  4.80k|	VipsForeignHeifCompression compression;
  558|  4.80k|	VipsInterpretation interpretation;
  559|  4.80k|	VipsBandFormat format;
  560|       |
  561|       |	/* We take the metadata from the non-thumbnail first page. HEIC
  562|       |	 * thumbnails don't have metadata.
  563|       |	 */
  564|  4.80k|	if (vips_foreign_load_heif_set_page(heif, heif->page, FALSE))
  ------------------
  |  |  794|  4.80k|#define	FALSE	(0)
  ------------------
  |  Branch (564:6): [True: 0, False: 4.80k]
  ------------------
  565|      0|		return -1;
  566|       |
  567|       |	/* Verify dimensions
  568|       |	 */
  569|  4.80k|	if (heif->page_width < 1 ||
  ------------------
  |  Branch (569:6): [True: 21, False: 4.78k]
  ------------------
  570|  4.80k|		heif->page_height < 1) {
  ------------------
  |  Branch (570:3): [True: 0, False: 4.78k]
  ------------------
  571|     21|		vips_error("heifload", "%s", _("bad dimensions"));
  ------------------
  |  |   30|     21|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     21|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  572|     21|		return -1;
  573|     21|	}
  574|       |
  575|  4.78k|	heif->has_alpha = heif_image_handle_has_alpha_channel(heif->handle);
  576|       |#ifdef DEBUG
  577|       |	printf("heif_image_handle_has_alpha_channel() = %d\n", heif->has_alpha);
  578|       |#endif /*DEBUG*/
  579|  4.78k|	bands = heif->has_alpha ? 4 : 3;
  ------------------
  |  Branch (579:10): [True: 0, False: 4.78k]
  ------------------
  580|       |
  581|       |#ifdef DEBUG
  582|       |	printf("heif_image_handle_get_luma_bits_per_pixel() = %d\n",
  583|       |		heif_image_handle_get_luma_bits_per_pixel(heif->handle));
  584|       |#endif /*DEBUG*/
  585|       |
  586|       |	/* FIXME .. IPTC as well?
  587|       |	 */
  588|  4.78k|	n_metadata = heif_image_handle_get_list_of_metadata_block_IDs(
  589|  4.78k|		heif->handle, NULL, id, VIPS_NUMBER(id));
  ------------------
  |  |   60|  4.78k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  590|  4.78k|	for (i = 0; i < n_metadata; i++) {
  ------------------
  |  Branch (590:14): [True: 0, False: 4.78k]
  ------------------
  591|      0|		size_t length =
  592|      0|			heif_image_handle_get_metadata_size(heif->handle, id[i]);
  593|      0|		const char *type =
  594|      0|			heif_image_handle_get_metadata_type(heif->handle, id[i]);
  595|      0|		const char *content_type =
  596|      0|			heif_image_handle_get_metadata_content_type(heif->handle, id[i]);
  597|       |
  598|      0|		unsigned char *data;
  599|      0|		char name[256];
  600|       |
  601|       |#ifdef DEBUG
  602|       |		printf("metadata type = %s, length = %zu\n", type, length);
  603|       |#endif /*DEBUG*/
  604|       |
  605|      0|		if (!length)
  ------------------
  |  Branch (605:7): [True: 0, False: 0]
  ------------------
  606|      0|			continue;
  607|      0|		if (!(data = VIPS_ARRAY(NULL, length, unsigned char)))
  ------------------
  |  |   72|      0|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (607:7): [True: 0, False: 0]
  ------------------
  608|      0|			return -1;
  609|      0|		error = heif_image_handle_get_metadata(heif->handle, id[i], data);
  610|      0|		if (error.code) {
  ------------------
  |  Branch (610:7): [True: 0, False: 0]
  ------------------
  611|      0|			VIPS_FREE(data);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      0|			vips__heif_error(&error);
  613|      0|			return -1;
  614|      0|		}
  615|       |
  616|       |		/* We need to skip the first four bytes of EXIF, they just
  617|       |		 * contain the offset.
  618|       |		 */
  619|      0|		if (length > 4 &&
  ------------------
  |  Branch (619:7): [True: 0, False: 0]
  ------------------
  620|      0|			g_ascii_strcasecmp(type, "exif") == 0) {
  ------------------
  |  Branch (620:4): [True: 0, False: 0]
  ------------------
  621|      0|			length -= 4;
  622|      0|			memmove(data, data + 4, length);
  623|      0|		}
  624|       |
  625|       |		/* Exif data will have the type string "exif".
  626|       |		 *
  627|       |		 * For XMP, the content type is "application/rdf+xml".
  628|       |		 */
  629|      0|		if (g_ascii_strcasecmp(type, "exif") == 0)
  ------------------
  |  Branch (629:7): [True: 0, False: 0]
  ------------------
  630|      0|			g_snprintf(name, 256, VIPS_META_EXIF_NAME);
  ------------------
  |  |   46|      0|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  631|      0|		else if (g_ascii_strcasecmp(content_type, "application/rdf+xml") == 0)
  ------------------
  |  Branch (631:12): [True: 0, False: 0]
  ------------------
  632|      0|			g_snprintf(name, 256, VIPS_META_XMP_NAME);
  ------------------
  |  |   53|      0|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  633|      0|		else
  634|      0|			g_snprintf(name, 256, "heif-%s-%d", type, i);
  635|       |
  636|      0|		vips_image_set_blob(out, name,
  637|      0|			(VipsCallbackFn) vips_area_free_cb, data, length);
  638|       |
  639|       |		/* image_set will automatically parse EXIF, if necessary.
  640|       |		 */
  641|      0|	}
  642|       |
  643|       |	/* We use libheif's autorotate, so we need to remove any EXIF
  644|       |	 * orientation tags.
  645|       |	 *
  646|       |	 * According to the HEIF standard, EXIF orientation tags are only
  647|       |	 * informational and images should not be rotated because of them.
  648|       |	 * Unless we strip these tags, there's a danger downstream processing
  649|       |	 * could double-rotate.
  650|       |	 */
  651|  4.78k|	vips_autorot_remove_angle(out);
  652|       |
  653|  4.78k|#ifdef HAVE_HEIF_COLOR_PROFILE
  654|  4.78k|	enum heif_color_profile_type profile_type =
  655|  4.78k|		heif_image_handle_get_color_profile_type(heif->handle);
  656|       |
  657|       |#ifdef DEBUG
  658|       |	{
  659|       |		printf("profile type = ");
  660|       |		switch (profile_type) {
  661|       |		case heif_color_profile_type_not_present:
  662|       |			printf("none");
  663|       |			break;
  664|       |
  665|       |		case heif_color_profile_type_nclx:
  666|       |			printf("nclx");
  667|       |			break;
  668|       |
  669|       |		case heif_color_profile_type_rICC:
  670|       |			printf("rICC");
  671|       |			break;
  672|       |
  673|       |		case heif_color_profile_type_prof:
  674|       |			printf("prof");
  675|       |			break;
  676|       |
  677|       |		default:
  678|       |			printf("unknown");
  679|       |			break;
  680|       |		}
  681|       |		printf("\n");
  682|       |	}
  683|       |#endif /*DEBUG*/
  684|       |
  685|       |	/* lcms can load standard (prof) and reduced (rICC) profiles
  686|       |	 */
  687|  4.78k|	if (profile_type == heif_color_profile_type_prof ||
  ------------------
  |  Branch (687:6): [True: 0, False: 4.78k]
  ------------------
  688|  4.78k|		profile_type == heif_color_profile_type_rICC) {
  ------------------
  |  Branch (688:3): [True: 0, False: 4.78k]
  ------------------
  689|      0|		size_t length = heif_image_handle_get_raw_color_profile_size(
  690|      0|			heif->handle);
  691|       |
  692|      0|		unsigned char *data;
  693|       |
  694|      0|		if (!(data = VIPS_ARRAY(NULL, length, unsigned char)))
  ------------------
  |  |   72|      0|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (694:7): [True: 0, False: 0]
  ------------------
  695|      0|			return -1;
  696|      0|		error = heif_image_handle_get_raw_color_profile(heif->handle, data);
  697|      0|		if (error.code) {
  ------------------
  |  Branch (697:7): [True: 0, False: 0]
  ------------------
  698|      0|			VIPS_FREE(data);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  699|      0|			vips__heif_error(&error);
  700|      0|			return -1;
  701|      0|		}
  702|       |
  703|       |#ifdef DEBUG
  704|       |		printf("profile data, length = %zd\n", length);
  705|       |#endif /*DEBUG*/
  706|       |
  707|      0|		vips_image_set_blob(out, VIPS_META_ICC_NAME,
  ------------------
  |  |   78|      0|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  708|      0|			(VipsCallbackFn) vips_area_free_cb, data, length);
  709|      0|	}
  710|  4.78k|	else if (profile_type == heif_color_profile_type_nclx) {
  ------------------
  |  Branch (710:11): [True: 0, False: 4.78k]
  ------------------
  711|      0|		g_info("heifload: ignoring nclx profile");
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  712|      0|	}
  713|  4.78k|#endif /*HAVE_HEIF_COLOR_PROFILE*/
  714|       |
  715|  4.78k|	vips_image_set_int(out, "heif-primary", heif->primary_page);
  716|  4.78k|	vips_image_set_int(out, VIPS_META_N_PAGES, heif->n_top);
  ------------------
  |  |  165|  4.78k|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  717|       |
  718|       |	/* Only set page-height if we have more than one page, or this could
  719|       |	 * accidentally turn into an animated image later.
  720|       |	 */
  721|  4.78k|	if (heif->n > 1)
  ------------------
  |  Branch (721:6): [True: 0, False: 4.78k]
  ------------------
  722|      0|		vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, heif->page_height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  723|       |
  724|       |	/* Determine compression from HEIF "brand". heif_avif and heif_avis
  725|       |	 * were added in v1.7.
  726|       |	 */
  727|  4.78k|	compression = VIPS_FOREIGN_HEIF_COMPRESSION_HEVC;
  728|       |
  729|  4.78k|#ifdef HAVE_HEIF_AVIF
  730|  4.78k|	{
  731|  4.78k|		const unsigned char *brand_data;
  732|       |
  733|  4.78k|		if ((brand_data = vips_source_sniff(heif->source, 12))) {
  ------------------
  |  Branch (733:7): [True: 4.78k, False: 0]
  ------------------
  734|  4.78k|			enum heif_brand brand;
  735|  4.78k|			brand = heif_main_brand(brand_data, 12);
  736|  4.78k|			if (brand == heif_avif ||
  ------------------
  |  Branch (736:8): [True: 4.42k, False: 358]
  ------------------
  737|  4.78k|				brand == heif_avis)
  ------------------
  |  Branch (737:5): [True: 0, False: 358]
  ------------------
  738|  4.42k|				compression = VIPS_FOREIGN_HEIF_COMPRESSION_AV1;
  739|  4.78k|		}
  740|  4.78k|	}
  741|  4.78k|#endif /*HAVE_HEIF_AVIF*/
  742|       |
  743|  4.78k|	vips_image_set_string(out, "heif-compression",
  744|  4.78k|		vips_enum_nick(VIPS_TYPE_FOREIGN_HEIF_COMPRESSION,
  ------------------
  |  |  129|  4.78k|#define VIPS_TYPE_FOREIGN_HEIF_COMPRESSION (vips_foreign_heif_compression_get_type())
  ------------------
  745|  4.78k|			compression));
  746|       |
  747|  4.78k|	vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, heif->bits_per_pixel);
  ------------------
  |  |  100|  4.78k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  748|       |
  749|       |	/* Deprecated "heif-bitdepth" use "bits-per-sample" instead.
  750|       |	 */
  751|  4.78k|	vips_image_set_int(out, "heif-bitdepth", heif->bits_per_pixel);
  752|       |
  753|  4.78k|	if (heif->bits_per_pixel > 8) {
  ------------------
  |  Branch (753:6): [True: 4.63k, False: 152]
  ------------------
  754|  4.63k|		interpretation = VIPS_INTERPRETATION_RGB16;
  755|  4.63k|		format = VIPS_FORMAT_USHORT;
  756|  4.63k|	}
  757|    152|	else {
  758|    152|		interpretation = VIPS_INTERPRETATION_sRGB;
  759|    152|		format = VIPS_FORMAT_UCHAR;
  760|    152|	}
  761|       |
  762|       |	/* FIXME .. we always decode to RGB in generate. We should check for
  763|       |	 * all grey images, perhaps.
  764|       |	 */
  765|  4.78k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (765:6): [True: 0, False: 4.78k]
  ------------------
  766|      0|		return -1;
  767|  4.78k|	vips_image_init_fields(out,
  768|  4.78k|		heif->page_width, heif->page_height * heif->n, bands,
  769|  4.78k|		format, VIPS_CODING_NONE, interpretation,
  770|  4.78k|		1.0, 1.0);
  771|       |
  772|  4.78k|	VIPS_SETSTR(load->out->filename,
  ------------------
  |  |   53|  4.78k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.78k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  4.78k|	{ \
  |  |   55|  4.78k|		const char *sst = (V); \
  |  |   56|  4.78k|		\
  |  |   57|  4.78k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 2.41k, False: 2.37k]
  |  |  ------------------
  |  |   58|  2.41k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 2.41k]
  |  |  |  Branch (58:16): [True: 2.41k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  2.41k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  2.41k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  2.41k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  2.41k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  2.41k|	{ \
  |  |  |  |  |  |   43|  2.41k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 2.41k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  2.41k|			(void) F((S)); \
  |  |  |  |  |  |   45|  2.41k|			(S) = 0; \
  |  |  |  |  |  |   46|  2.41k|		} \
  |  |  |  |  |  |   47|  2.41k|	} \
  |  |  |  |  |  |   48|  2.41k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  2.41k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  2.41k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 2.41k]
  |  |  ------------------
  |  |   61|  2.41k|					(S) = g_strdup(sst); \
  |  |   62|  2.41k|			} \
  |  |   63|  2.41k|		} \
  |  |   64|  4.78k|	} \
  |  |   65|  4.78k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.78k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  773|  4.78k|		vips_connection_filename(VIPS_CONNECTION(heif->source)));
  774|       |
  775|  4.78k|	return 0;
  776|  4.78k|}
heifload.c:vips_foreign_load_heif_load:
 1030|  2.37k|{
 1031|  2.37k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load;
 1032|       |
 1033|  2.37k|	VipsImage **t = (VipsImage **)
 1034|  2.37k|		vips_object_local_array(VIPS_OBJECT(load), 3);
  ------------------
  |  |  433|  2.37k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.37k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.37k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|       |
 1036|       |#ifdef DEBUG
 1037|       |	printf("vips_foreign_load_heif_load: loading image\n");
 1038|       |#endif /*DEBUG*/
 1039|       |
 1040|  2.37k|	t[0] = vips_image_new();
 1041|  2.37k|	if (vips_foreign_load_heif_set_header(heif, t[0]))
  ------------------
  |  Branch (1041:6): [True: 0, False: 2.37k]
  ------------------
 1042|      0|		return -1;
 1043|       |
 1044|       |	/* Close input immediately at end of read.
 1045|       |	 */
 1046|  2.37k|	g_signal_connect(t[0], "minimise",
  ------------------
  |  |  491|  2.37k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1047|  2.37k|		G_CALLBACK(vips_foreign_load_heif_minimise), heif);
 1048|       |
 1049|  2.37k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (1049:6): [True: 0, False: 2.37k]
  ------------------
 1050|  2.37k|			NULL, vips_foreign_load_heif_generate, NULL, heif, NULL) ||
 1051|  2.37k|		vips_sequential(t[0], &t[1], NULL) ||
  ------------------
  |  Branch (1051:3): [True: 0, False: 2.37k]
  ------------------
 1052|  2.37k|		vips_image_write(t[1], load->real))
  ------------------
  |  Branch (1052:3): [True: 2.37k, False: 0]
  ------------------
 1053|  2.37k|		return -1;
 1054|       |
 1055|      0|	if (vips_source_decode(heif->source))
  ------------------
  |  Branch (1055:6): [True: 0, False: 0]
  ------------------
 1056|      0|		return -1;
 1057|       |
 1058|      0|	return 0;
 1059|      0|}
heifload.c:vips_foreign_load_heif_minimise:
 1024|  4.74k|{
 1025|  4.74k|	vips_source_minimise(heif->source);
 1026|  4.74k|}
heifload.c:vips_foreign_load_heif_generate:
  930|  2.37k|{
  931|  2.37k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) a;
  932|  2.37k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(heif);
  ------------------
  |  |  441|  2.37k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.37k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.37k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|  2.37k|	VipsRect *r = &out_region->valid;
  934|       |
  935|  2.37k|	int page = r->top / heif->page_height + heif->page;
  936|  2.37k|	int line = r->top % heif->page_height;
  937|       |
  938|       |#ifdef DEBUG_VERBOSE
  939|       |	printf("vips_foreign_load_heif_generate: line %d\n", r->top);
  940|       |#endif /*DEBUG_VERBOSE*/
  941|       |
  942|  2.37k|	g_assert(r->height == 1);
  ------------------
  |  |  166|  2.37k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.37k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.37k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  943|       |
  944|  2.37k|	if (vips_foreign_load_heif_set_page(heif, page, heif->thumbnail))
  ------------------
  |  Branch (944:6): [True: 0, False: 2.37k]
  ------------------
  945|      0|		return -1;
  946|       |
  947|  2.37k|	if (!heif->img) {
  ------------------
  |  Branch (947:6): [True: 2.37k, False: 0]
  ------------------
  948|  2.37k|		enum heif_chroma chroma =
  949|  2.37k|			vips__heif_chroma(heif->bits_per_pixel, heif->has_alpha);
  950|       |
  951|  2.37k|		struct heif_error error;
  952|  2.37k|		struct heif_decoding_options *options;
  953|       |
  954|  2.37k|		options = heif_decoding_options_alloc();
  955|  2.37k|		error = heif_decode_image(heif->handle, &heif->img,
  956|  2.37k|			heif_colorspace_RGB,
  957|  2.37k|			chroma,
  958|  2.37k|			options);
  959|  2.37k|		heif_decoding_options_free(options);
  960|  2.37k|		if (error.code) {
  ------------------
  |  Branch (960:7): [True: 2.36k, False: 3]
  ------------------
  961|  2.36k|			vips__heif_error(&error);
  962|  2.36k|			return -1;
  963|  2.36k|		}
  964|       |
  965|       |#ifdef DEBUG
  966|       |		vips__heif_image_print(heif->img);
  967|       |#endif /*DEBUG*/
  968|  2.37k|	}
  969|       |
  970|      3|	if (!heif->data) {
  ------------------
  |  Branch (970:6): [True: 3, False: 0]
  ------------------
  971|      3|		int image_width = heif_image_get_width(heif->img,
  972|      3|			heif_channel_interleaved);
  973|      3|		int image_height = heif_image_get_height(heif->img,
  974|      3|			heif_channel_interleaved);
  975|       |
  976|       |		/* We can sometimes get inconsistency between the dimensions
  977|       |		 * reported on the handle, and the final image we fetch. Error
  978|       |		 * out to prevent a segv.
  979|       |		 */
  980|      3|		if (image_width != heif->page_width ||
  ------------------
  |  Branch (980:7): [True: 3, False: 0]
  ------------------
  981|      3|			image_height != heif->page_height) {
  ------------------
  |  Branch (981:4): [True: 0, False: 0]
  ------------------
  982|      3|			vips_error(class->nickname,
  983|      3|				"%s", _("bad image dimensions on decode"));
  ------------------
  |  |   30|      3|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      3|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  984|      3|			return -1;
  985|      3|		}
  986|       |
  987|      0|		if (!(heif->data = heif_image_get_plane_readonly(heif->img,
  ------------------
  |  Branch (987:7): [True: 0, False: 0]
  ------------------
  988|      0|				  heif_channel_interleaved, &heif->stride))) {
  989|      0|			vips_error(class->nickname,
  990|      0|				"%s", _("unable to get image data"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  991|      0|			return -1;
  992|      0|		}
  993|      0|	}
  994|       |
  995|      0|	memcpy(VIPS_REGION_ADDR(out_region, 0, r->top),
  ------------------
  |  |  227|      0|	((R)->data + \
  |  |  228|      0|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      0|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      0|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  996|      0|		heif->data + heif->stride * line,
  997|      0|		VIPS_IMAGE_SIZEOF_LINE(out_region->im));
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|       |
  999|       |	/* We may need to swap bytes and shift to fill 16 bits.
 1000|       |	 */
 1001|      0|	if (heif->bits_per_pixel > 8) {
  ------------------
  |  Branch (1001:6): [True: 0, False: 0]
  ------------------
 1002|      0|		int shift = 16 - heif->bits_per_pixel;
 1003|      0|		int ne = VIPS_REGION_N_ELEMENTS(out_region);
  ------------------
  |  |  197|      0|	((size_t) ((R)->valid.width * (R)->im->Bands))
  ------------------
 1004|       |
 1005|      0|		int i;
 1006|      0|		VipsPel *p;
 1007|       |
 1008|      0|		p = VIPS_REGION_ADDR(out_region, 0, r->top);
  ------------------
  |  |  227|      0|	((R)->data + \
  |  |  228|      0|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      0|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      0|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|      0|		for (i = 0; i < ne; i++) {
  ------------------
  |  Branch (1009:15): [True: 0, False: 0]
  ------------------
 1010|       |			/* We've asked for big endian, we must write native.
 1011|       |			 */
 1012|      0|			guint16 v = ((p[0] << 8) | p[1]) << shift;
 1013|       |
 1014|      0|			*((guint16 *) p) = v;
 1015|      0|			p += 2;
 1016|      0|		}
 1017|      0|	}
 1018|       |
 1019|      0|	return 0;
 1020|      3|}
heifload.c:vips_foreign_load_heif_init:
 1195|  4.88k|{
 1196|  4.88k|	heif->n = 1;
 1197|       |
 1198|  4.88k|	heif->reader = VIPS_ARRAY(NULL, 1, struct heif_reader);
  ------------------
  |  |   72|  4.88k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  4.88k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  4.88k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  4.88k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  4.88k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1199|       |
 1200|       |	/* The first version to support heif_reader.
 1201|       |	 */
 1202|  4.88k|	heif->reader->reader_api_version = 1;
 1203|  4.88k|	heif->reader->get_position = vips_foreign_load_heif_get_position;
 1204|  4.88k|	heif->reader->read = vips_foreign_load_heif_read;
 1205|  4.88k|	heif->reader->seek = vips_foreign_load_heif_seek;
 1206|  4.88k|	heif->reader->wait_for_file_size =
 1207|  4.88k|		vips_foreign_load_heif_wait_for_file_size;
 1208|  4.88k|}
heifload.c:vips_foreign_load_heif_get_position:
 1122|   144k|{
 1123|   144k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1124|       |
 1125|   144k|	return vips_source_seek(heif->source, 0L, SEEK_CUR);
 1126|   144k|}
heifload.c:vips_foreign_load_heif_read:
 1135|   384k|{
 1136|   384k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1137|       |
 1138|   761k|	while (size > 0) {
  ------------------
  |  Branch (1138:9): [True: 377k, False: 384k]
  ------------------
 1139|   377k|		gint64 bytes_read;
 1140|       |
 1141|   377k|		bytes_read = vips_source_read(heif->source, data, size);
 1142|   377k|		if (bytes_read <= 0)
  ------------------
  |  Branch (1142:7): [True: 120, False: 377k]
  ------------------
 1143|    120|			return -1;
 1144|       |
 1145|   377k|		size -= bytes_read;
 1146|   377k|		data = (char *) data + bytes_read;
 1147|   377k|	}
 1148|       |
 1149|   384k|	return 0;
 1150|   384k|}
heifload.c:vips_foreign_load_heif_seek:
 1154|  52.9k|{
 1155|  52.9k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1156|       |
 1157|       |	/* Return 0 on success.
 1158|       |	 */
 1159|  52.9k|	return vips_source_seek(heif->source, position, SEEK_SET) == -1;
 1160|  52.9k|}
heifload.c:vips_foreign_load_heif_wait_for_file_size:
 1167|   141k|{
 1168|   141k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1169|       |
 1170|   141k|	gint64 old_position;
 1171|   141k|	gint64 result;
 1172|   141k|	enum heif_reader_grow_status status;
 1173|       |
 1174|       |	/* We seek the VipsSource to the position and check for errors.
 1175|       |	 */
 1176|   141k|	old_position = vips_source_seek(heif->source, 0L, SEEK_CUR);
 1177|   141k|	result = vips_source_seek(heif->source, target_size, SEEK_SET);
 1178|   141k|	vips_source_seek(heif->source, old_position, SEEK_SET);
 1179|       |
 1180|   141k|	if (result < 0)
  ------------------
  |  Branch (1180:6): [True: 1.52k, False: 140k]
  ------------------
 1181|       |		/* Unable to seek to this point, so it's beyond EOF.
 1182|       |		 */
 1183|  1.52k|		status = heif_reader_grow_status_size_beyond_eof;
 1184|   140k|	else
 1185|       |		/* Successfully read to the requested point, but the requested
 1186|       |		 * point is not necessarily EOF.
 1187|       |		 */
 1188|   140k|		status = heif_reader_grow_status_size_reached;
 1189|       |
 1190|   141k|	return status;
 1191|   141k|}
heifload.c:vips_foreign_load_heif_file_class_init:
 1254|      1|{
 1255|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1256|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1257|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1258|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1259|       |
 1260|      1|	gobject_class->set_property = vips_object_set_property;
 1261|      1|	gobject_class->get_property = vips_object_get_property;
 1262|       |
 1263|      1|	object_class->nickname = "heifload";
 1264|      1|	object_class->build = vips_foreign_load_heif_file_build;
 1265|       |
 1266|      1|	foreign_class->suffs = vips__heif_suffs;
 1267|       |
 1268|      1|	load_class->is_a = vips_foreign_load_heif_file_is_a;
 1269|       |
 1270|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1271|      1|		_("Filename"),
 1272|      1|		_("Filename to load from"),
 1273|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1274|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifFile, filename),
 1275|      1|		NULL);
 1276|      1|}
heifload.c:vips_foreign_load_heif_is_a:
  393|  12.7k|{
  394|  12.7k|	if (len >= 12) {
  ------------------
  |  Branch (394:6): [True: 12.3k, False: 340]
  ------------------
  395|  12.3k|		unsigned char *p = (unsigned char *) buf;
  396|  12.3k|		guint32 chunk_len =
  397|  12.3k|			VIPS_LSHIFT_INT(p[0], 24) |
  ------------------
  |  |   87|  12.3k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  398|  12.3k|			VIPS_LSHIFT_INT(p[1], 16) |
  ------------------
  |  |   87|  12.3k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  399|  12.3k|			VIPS_LSHIFT_INT(p[2], 8) |
  ------------------
  |  |   87|  12.3k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  400|  12.3k|			VIPS_LSHIFT_INT(p[3], 0);
  ------------------
  |  |   87|  12.3k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  401|       |
  402|  12.3k|		int i;
  403|       |
  404|       |		/* chunk_len can be pretty big for eg. animated AVIF.
  405|       |		 */
  406|  12.3k|		if (chunk_len > 2048 ||
  ------------------
  |  Branch (406:7): [True: 7.45k, False: 4.93k]
  ------------------
  407|  12.3k|			chunk_len % 4 != 0)
  ------------------
  |  Branch (407:4): [True: 7, False: 4.93k]
  ------------------
  408|  7.46k|			return 0;
  409|       |
  410|  43.8k|		for (i = 0; i < VIPS_NUMBER(heif_magic); i++)
  ------------------
  |  |   60|  43.8k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (410:15): [True: 43.7k, False: 46]
  ------------------
  411|  43.7k|			if (strncmp(buf + 4, heif_magic[i], 8) == 0)
  ------------------
  |  Branch (411:8): [True: 4.88k, False: 38.8k]
  ------------------
  412|  4.88k|				return 1;
  413|  4.93k|	}
  414|       |
  415|    386|	return 0;
  416|  12.7k|}
heifload.c:vips_foreign_load_heif_buffer_class_init:
 1326|      1|{
 1327|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1328|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1329|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1330|       |
 1331|      1|	gobject_class->set_property = vips_object_set_property;
 1332|      1|	gobject_class->get_property = vips_object_get_property;
 1333|       |
 1334|      1|	object_class->nickname = "heifload_buffer";
 1335|      1|	object_class->build = vips_foreign_load_heif_buffer_build;
 1336|       |
 1337|      1|	load_class->is_a_buffer = vips_foreign_load_heif_buffer_is_a;
 1338|       |
 1339|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1340|      1|		_("Buffer"),
 1341|      1|		_("Buffer to load from"),
 1342|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1343|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifBuffer, buf),
 1344|      1|		VIPS_TYPE_BLOB);
 1345|      1|}
heifload.c:vips_foreign_load_heif_buffer_build:
 1299|  4.88k|{
 1300|  4.88k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object;
 1301|  4.88k|	VipsForeignLoadHeifBuffer *buffer =
 1302|  4.88k|		(VipsForeignLoadHeifBuffer *) object;
 1303|       |
 1304|  4.88k|	if (buffer->buf &&
  ------------------
  |  Branch (1304:6): [True: 4.88k, False: 0]
  ------------------
 1305|  4.88k|		!(heif->source = vips_source_new_from_memory(
  ------------------
  |  Branch (1305:3): [True: 0, False: 4.88k]
  ------------------
 1306|  4.88k|			VIPS_AREA(buffer->buf)->data,
  ------------------
  |  |  137|  4.88k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1307|  4.88k|			VIPS_AREA(buffer->buf)->length)))
  ------------------
  |  |  137|  4.88k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1308|      0|		return -1;
 1309|       |
 1310|  4.88k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_file_parent_class)
  ------------------
  |  |  435|  4.88k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  4.88k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  4.88k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1310:6): [True: 2.47k, False: 2.41k]
  ------------------
 1311|  4.88k|			->build(object))
 1312|  2.47k|		return -1;
 1313|       |
 1314|  2.41k|	return 0;
 1315|  4.88k|}
heifload.c:vips_foreign_load_heif_buffer_is_a:
 1319|  12.7k|{
 1320|  12.7k|	return vips_foreign_load_heif_is_a(buf, len);
 1321|  12.7k|}
heifload.c:vips_foreign_load_heif_buffer_init:
 1349|  4.88k|{
 1350|  4.88k|}
heifload.c:vips_foreign_load_heif_source_class_init:
 1397|      1|{
 1398|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1399|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1400|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1401|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1402|       |
 1403|      1|	gobject_class->set_property = vips_object_set_property;
 1404|      1|	gobject_class->get_property = vips_object_get_property;
 1405|       |
 1406|      1|	object_class->nickname = "heifload_source";
 1407|      1|	object_class->build = vips_foreign_load_heif_source_build;
 1408|       |
 1409|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
 1410|       |
 1411|      1|	load_class->is_a_source = vips_foreign_load_heif_source_is_a_source;
 1412|       |
 1413|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1414|      1|		_("Source"),
 1415|      1|		_("Source to load from"),
 1416|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1417|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifSource, source),
 1418|      1|		VIPS_TYPE_SOURCE);
 1419|      1|}

heifsave.c:vips_foreign_save_heif_class_init:
  755|      1|{
  756|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  757|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  758|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  759|       |
  760|      1|	vips__heif_init();
  761|       |
  762|      1|	gobject_class->dispose = vips_foreign_save_heif_dispose;
  763|      1|	gobject_class->set_property = vips_object_set_property;
  764|      1|	gobject_class->get_property = vips_object_get_property;
  765|       |
  766|      1|	object_class->nickname = "heifsave_base";
  767|      1|	object_class->description = _("save image in HEIF format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  768|      1|	object_class->build = vips_foreign_save_heif_build;
  769|       |
  770|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  771|      1|	save_class->format_table = vips_heif_bandfmt;
  772|       |
  773|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  774|      1|		_("Q"),
  775|      1|		_("Q factor"),
  776|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  777|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, Q),
  778|      1|		1, 100, 50);
  779|       |
  780|      1|	VIPS_ARG_INT(class, "bitdepth", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  781|      1|		_("Bit depth"),
  782|      1|		_("Number of bits per pixel"),
  783|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  784|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, bitdepth),
  785|      1|		8, 12, 12);
  786|       |
  787|      1|	VIPS_ARG_BOOL(class, "lossless", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  788|      1|		_("Lossless"),
  789|      1|		_("Enable lossless compression"),
  790|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  791|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, lossless),
  792|      1|		FALSE);
  793|       |
  794|      1|	VIPS_ARG_ENUM(class, "compression", 14,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  795|      1|		_("Compression"),
  796|      1|		_("Compression format"),
  797|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  798|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, compression),
  799|      1|		VIPS_TYPE_FOREIGN_HEIF_COMPRESSION,
  800|      1|		VIPS_FOREIGN_HEIF_COMPRESSION_HEVC);
  801|       |
  802|      1|	VIPS_ARG_INT(class, "effort", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  803|      1|		_("Effort"),
  804|      1|		_("CPU effort"),
  805|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  806|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, effort),
  807|      1|		0, 9, 4);
  808|       |
  809|      1|	VIPS_ARG_ENUM(class, "subsample_mode", 16,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  810|      1|		_("Subsample mode"),
  811|      1|		_("Select chroma subsample operation mode"),
  812|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  813|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, subsample_mode),
  814|      1|		VIPS_TYPE_FOREIGN_SUBSAMPLE,
  815|      1|		VIPS_FOREIGN_SUBSAMPLE_AUTO);
  816|       |
  817|      1|	VIPS_ARG_INT(class, "speed", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  818|      1|		_("Speed"),
  819|      1|		_("CPU effort"),
  820|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  821|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, speed),
  822|      1|		0, 9, 5);
  823|       |
  824|      1|	VIPS_ARG_ENUM(class, "encoder", 18,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  825|      1|		_("Encoder"),
  826|      1|		_("Select encoder to use"),
  827|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  828|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, selected_encoder),
  829|      1|		VIPS_TYPE_FOREIGN_HEIF_ENCODER,
  830|      1|		VIPS_FOREIGN_HEIF_ENCODER_AUTO);
  831|      1|}
heifsave.c:vips_foreign_save_heif_file_class_init:
  883|      1|{
  884|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  885|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  886|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  887|       |
  888|      1|	gobject_class->set_property = vips_object_set_property;
  889|      1|	gobject_class->get_property = vips_object_get_property;
  890|       |
  891|      1|	object_class->nickname = "heifsave";
  892|      1|	object_class->build = vips_foreign_save_heif_file_build;
  893|       |
  894|      1|	foreign_class->suffs = vips__heif_suffs;
  895|       |
  896|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  897|      1|		_("Filename"),
  898|      1|		_("Filename to save to"),
  899|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  900|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifFile, filename),
  901|      1|		NULL);
  902|      1|}
heifsave.c:vips_foreign_save_heif_buffer_class_init:
  948|      1|{
  949|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  951|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  952|       |
  953|      1|	gobject_class->set_property = vips_object_set_property;
  954|      1|	gobject_class->get_property = vips_object_get_property;
  955|       |
  956|      1|	object_class->nickname = "heifsave_buffer";
  957|      1|	object_class->build = vips_foreign_save_heif_buffer_build;
  958|       |
  959|      1|	foreign_class->suffs = vips__heic_suffs;
  960|       |
  961|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  962|      1|		_("Buffer"),
  963|      1|		_("Buffer to save to"),
  964|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  965|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifBuffer, buf),
  966|      1|		VIPS_TYPE_BLOB);
  967|      1|}
heifsave.c:vips_foreign_save_heif_target_class_init:
 1006|      1|{
 1007|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1009|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1010|       |
 1011|      1|	gobject_class->set_property = vips_object_set_property;
 1012|      1|	gobject_class->get_property = vips_object_get_property;
 1013|       |
 1014|      1|	object_class->nickname = "heifsave_target";
 1015|      1|	object_class->build = vips_foreign_save_heif_target_build;
 1016|       |
 1017|      1|	foreign_class->suffs = vips__heic_suffs;
 1018|       |
 1019|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1020|      1|		_("Target"),
 1021|      1|		_("Target to save to"),
 1022|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1023|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifTarget, target),
 1024|      1|		VIPS_TYPE_TARGET);
 1025|      1|}
heifsave.c:vips_foreign_save_avif_target_class_init:
 1041|      1|{
 1042|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1043|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1044|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1045|       |
 1046|      1|	object_class->nickname = "avifsave_target";
 1047|      1|	object_class->description = _("save image in AVIF format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1048|       |
 1049|      1|	foreign_class->suffs = vips__avif_suffs;
 1050|       |
 1051|       |	/* Hide from UI.
 1052|       |	 */
 1053|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
 1054|      1|}

vips__foreign_load_jp2k_decompress:
 1598|      1|{
 1599|      1|	vips_error("jp2k",
 1600|      1|		"%s", _("libvips built without JPEG2000 support"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1601|      1|	return -1;
 1602|      1|}

vips__jpeg_read_source:
 1054|  11.6k|{
 1055|  11.6k|	ReadJpeg *jpeg;
 1056|       |
 1057|  11.6k|	if (!(jpeg = readjpeg_new(source, out, shrink, fail_on,
  ------------------
  |  Branch (1057:6): [True: 0, False: 11.6k]
  ------------------
 1058|  11.6k|			  autorotate, unlimited)))
 1059|      0|		return -1;
 1060|       |
 1061|       |	/* Here for longjmp() from vips__new_error_exit() during
 1062|       |	 * cinfo->mem->alloc_small() or jpeg_read_header().
 1063|       |	 */
 1064|  11.6k|	if (setjmp(jpeg->eman.jmp))
 1065|  1.03k|		return -1;
 1066|       |
 1067|  10.5k|	if (readjpeg_open_input(jpeg) ||
  ------------------
  |  Branch (1067:6): [True: 18.4E, False: 11.6k]
  ------------------
 1068|  11.6k|		vips__jpeg_read(jpeg, out, header_only))
  ------------------
  |  Branch (1068:3): [True: 4.44k, False: 7.18k]
  ------------------
 1069|  3.40k|		return -1;
 1070|       |
 1071|  7.18k|	if (header_only)
  ------------------
  |  Branch (1071:6): [True: 5.58k, False: 1.59k]
  ------------------
 1072|  5.58k|		vips_source_minimise(source);
 1073|       |
 1074|  7.18k|	return 0;
 1075|  10.5k|}
vips__isjpeg_source:
 1079|  27.5k|{
 1080|  27.5k|	const unsigned char *p;
 1081|       |
 1082|  27.5k|	if ((p = vips_source_sniff(source, 2)) &&
  ------------------
  |  Branch (1082:6): [True: 27.5k, False: 16]
  ------------------
 1083|  27.5k|		p[0] == 0xff &&
  ------------------
  |  Branch (1083:3): [True: 6.65k, False: 20.9k]
  ------------------
 1084|  27.5k|		p[1] == 0xd8)
  ------------------
  |  Branch (1084:3): [True: 6.61k, False: 34]
  ------------------
 1085|  6.61k|		return 1;
 1086|       |
 1087|  20.9k|	return 0;
 1088|  27.5k|}
jpeg2vips.c:readjpeg_new:
  454|  11.6k|{
  455|  11.6k|	ReadJpeg *jpeg;
  456|       |
  457|  11.6k|	if (!(jpeg = VIPS_NEW(out, ReadJpeg)))
  ------------------
  |  |   70|  11.6k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  11.6k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  11.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  11.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  11.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (457:6): [True: 0, False: 11.6k]
  ------------------
  458|      0|		return NULL;
  459|       |
  460|  11.6k|	jpeg->out = out;
  461|  11.6k|	jpeg->source = source;
  462|  11.6k|	g_object_ref(source);
  463|  11.6k|	jpeg->shrink = shrink;
  464|  11.6k|	jpeg->fail_on = fail_on;
  465|  11.6k|	jpeg->cinfo.err = jpeg_std_error(&jpeg->eman.pub);
  466|  11.6k|	jpeg->cinfo.err->addon_message_table = vips__jpeg_message_table;
  467|  11.6k|	jpeg->cinfo.err->first_addon_message = 1000;
  468|  11.6k|	jpeg->cinfo.err->last_addon_message = 1001;
  469|  11.6k|	jpeg->eman.pub.error_exit = vips__new_error_exit;
  470|  11.6k|	jpeg->eman.pub.emit_message = readjpeg_emit_message;
  471|  11.6k|	jpeg->eman.pub.output_message = vips__new_output_message;
  472|  11.6k|	jpeg->eman.fp = NULL;
  473|  11.6k|	jpeg->autorotate = autorotate;
  474|  11.6k|	jpeg->unlimited = unlimited;
  475|  11.6k|	jpeg->cinfo.client_data = jpeg;
  476|       |
  477|       |	/* jpeg_create_decompress() can fail on some sanity checks. Don't
  478|       |	 * readjpeg_free() since we don't want to jpeg_destroy_decompress().
  479|       |	 */
  480|  11.6k|	if (setjmp(jpeg->eman.jmp))
  481|      0|		return NULL;
  482|       |
  483|  11.6k|	jpeg_create_decompress(&jpeg->cinfo);
  ------------------
  |  |  972|  11.6k|  jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
  |  |  ------------------
  |  |  |  |    4|  11.6k|#define JPEG_LIB_VERSION  62
  |  |  ------------------
  |  |  973|  11.6k|                        (size_t)sizeof(struct jpeg_decompress_struct))
  ------------------
  484|       |
  485|  11.6k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  11.6k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  486|  11.6k|		G_CALLBACK(readjpeg_close_cb), jpeg);
  487|  11.6k|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|  11.6k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  488|  11.6k|		G_CALLBACK(readjpeg_minimise_cb), jpeg);
  489|       |
  490|  11.6k|	return jpeg;
  491|  11.6k|}
jpeg2vips.c:readjpeg_emit_message:
  383|   290k|{
  384|   290k|	ReadJpeg *jpeg = (ReadJpeg *) cinfo->client_data;
  385|       |
  386|   290k|	long num_warnings;
  387|       |
  388|   290k|	if (msg_level < 0) {
  ------------------
  |  Branch (388:6): [True: 100k, False: 189k]
  ------------------
  389|       |		/* Always count warnings in num_warnings.
  390|       |		 */
  391|   100k|		num_warnings = ++cinfo->err->num_warnings;
  392|       |
  393|       |		/* Corrupt files may give many warnings, the policy here is to
  394|       |		 * show only the first warning and treat many warnings as fatal,
  395|       |		 * unless unlimited is set.
  396|       |		 */
  397|   100k|		if (num_warnings == 1)
  ------------------
  |  Branch (397:7): [True: 11.3k, False: 89.3k]
  ------------------
  398|  11.3k|			(*cinfo->err->output_message)(cinfo);
  399|  89.3k|		else if (!jpeg ||
  ------------------
  |  Branch (399:12): [True: 0, False: 89.3k]
  ------------------
  400|  89.3k|			(!jpeg->unlimited && num_warnings >= 100))
  ------------------
  |  Branch (400:5): [True: 89.3k, False: 0]
  |  Branch (400:25): [True: 163, False: 89.2k]
  ------------------
  401|    163|			cinfo->err->error_exit(cinfo);
  402|   100k|	}
  403|   189k|	else if (cinfo->err->trace_level >= msg_level)
  ------------------
  |  Branch (403:11): [True: 0, False: 189k]
  ------------------
  404|       |		/* It's a trace message. Show it if trace_level >= msg_level.
  405|       |		 */
  406|      0|		(*cinfo->err->output_message)(cinfo);
  407|   290k|}
jpeg2vips.c:readjpeg_close_cb:
  440|  11.6k|{
  441|  11.6k|	(void) readjpeg_free(jpeg);
  442|  11.6k|}
jpeg2vips.c:readjpeg_free:
  413|  11.6k|{
  414|  11.6k|	if (jpeg->eman.pub.num_warnings != 0) {
  ------------------
  |  Branch (414:6): [True: 11.3k, False: 265]
  ------------------
  415|  11.3k|		g_warning(_("read gave %ld warnings"),
  ------------------
  |  |  338|  11.3k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  11.3k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  11.3k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  11.3k|                               __VA_ARGS__)
  ------------------
  416|  11.3k|			jpeg->eman.pub.num_warnings);
  417|  11.3k|		g_warning("%s", vips_error_buffer());
  ------------------
  |  |  338|  11.3k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  11.3k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  11.3k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  11.3k|                               __VA_ARGS__)
  ------------------
  418|       |
  419|       |		/* Make the message only appear once.
  420|       |		 */
  421|  11.3k|		jpeg->eman.pub.num_warnings = 0;
  422|  11.3k|	}
  423|       |
  424|       |	/* Don't call jpeg_finish_decompress(). It just checks the tail of the
  425|       |	 * file and who cares about that. All mem is freed in
  426|       |	 * jpeg_destroy_decompress().
  427|       |	 */
  428|       |
  429|       |	/* I don't think this can fail. It's harmless to call many times.
  430|       |	 */
  431|  11.6k|	jpeg_destroy_decompress(&jpeg->cinfo);
  432|       |
  433|  11.6k|	VIPS_UNREF(jpeg->source);
  ------------------
  |  |   57|  11.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  11.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  11.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  11.6k|	{ \
  |  |  |  |   43|  11.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 11.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  11.6k|			(void) F((S)); \
  |  |  |  |   45|  11.6k|			(S) = 0; \
  |  |  |  |   46|  11.6k|		} \
  |  |  |  |   47|  11.6k|	} \
  |  |  |  |   48|  11.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  11.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|       |
  435|  11.6k|	return 0;
  436|  11.6k|}
jpeg2vips.c:readjpeg_minimise_cb:
  446|  18.7k|{
  447|  18.7k|	vips_source_minimise(jpeg->source);
  448|  18.7k|}
jpeg2vips.c:readjpeg_open_input:
  328|  11.6k|{
  329|  11.6k|	j_decompress_ptr cinfo = &jpeg->cinfo;
  330|       |
  331|  11.6k|	if (jpeg->source &&
  ------------------
  |  Branch (331:6): [True: 11.6k, False: 0]
  ------------------
  332|  11.6k|		!cinfo->src) {
  ------------------
  |  Branch (332:3): [True: 11.6k, False: 0]
  ------------------
  333|  11.6k|		Source *src;
  334|       |
  335|  11.6k|		if (vips_source_rewind(jpeg->source))
  ------------------
  |  Branch (335:7): [True: 0, False: 11.6k]
  ------------------
  336|      0|			return -1;
  337|       |
  338|  11.6k|		cinfo->src =
  339|  11.6k|			(struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)(
  340|  11.6k|				(j_common_ptr) cinfo,
  341|  11.6k|				JPOOL_PERMANENT,
  ------------------
  |  |  888|  11.6k|#define JPOOL_PERMANENT  0      /* lasts until master record is destroyed */
  ------------------
  342|  11.6k|				sizeof(Source));
  343|       |
  344|  11.6k|		src = (Source *) cinfo->src;
  345|  11.6k|		src->jpeg = jpeg;
  346|  11.6k|		src->source = jpeg->source;
  347|  11.6k|		src->pub.init_source = source_init_source;
  348|       |
  349|       |		/* Use default method.
  350|       |		 */
  351|  11.6k|		src->pub.resync_to_restart = jpeg_resync_to_restart;
  352|       |
  353|  11.6k|		if (vips_source_is_mappable(jpeg->source)) {
  ------------------
  |  Branch (353:7): [True: 11.6k, False: 0]
  ------------------
  354|  11.6k|			size_t src_len;
  355|  11.6k|			const unsigned char *src_data = vips_source_map(
  356|  11.6k|				jpeg->source, &src_len);
  357|       |
  358|  11.6k|			src->pub.fill_input_buffer =
  359|  11.6k|				source_fill_input_buffer_mappable;
  360|  11.6k|			src->pub.skip_input_data = skip_input_data_mappable;
  361|  11.6k|			src->pub.bytes_in_buffer = src_len;
  362|  11.6k|			src->pub.next_input_byte = src_data;
  363|  11.6k|		}
  364|      0|		else {
  365|      0|			src->pub.fill_input_buffer = source_fill_input_buffer;
  366|      0|			src->pub.skip_input_data = skip_input_data;
  367|       |
  368|       |			/* Forces fill_input_buffer on first read.
  369|       |			 */
  370|      0|			src->pub.bytes_in_buffer = 0;
  371|       |
  372|       |			/* Until buffer loaded.
  373|       |			 */
  374|      0|			src->pub.next_input_byte = NULL;
  375|      0|		}
  376|  11.6k|	}
  377|       |
  378|  11.6k|	return 0;
  379|  11.6k|}
jpeg2vips.c:source_init_source:
  228|  11.6k|{
  229|       |	/* No work necessary here.
  230|       |	 */
  231|  11.6k|}
jpeg2vips.c:source_fill_input_buffer_mappable:
  268|  19.4k|{
  269|  19.4k|	Source *src = (Source *) cinfo->src;
  270|       |
  271|  19.4k|	if (src->jpeg->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (271:6): [True: 0, False: 19.4k]
  ------------------
  272|       |		/* Knock the output out of cache.
  273|       |		 */
  274|      0|		vips_foreign_load_invalidate(src->jpeg->out);
  275|      0|		ERREXIT(cinfo, JERR_VIPS_IMAGE_EOF);
  ------------------
  |  |  240|      0|  ((cinfo)->err->msg_code = (code), \
  |  |  241|      0|   (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
  ------------------
  276|      0|	}
  277|  19.4k|	else
  278|  19.4k|		WARNMS(cinfo, JWRN_VIPS_IMAGE_EOF);
  ------------------
  |  |  283|  19.4k|  ((cinfo)->err->msg_code = (code), \
  |  |  284|  19.4k|   (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
  ------------------
  279|       |
  280|       |	/* Insert a fake EOI marker.
  281|       |	 */
  282|  19.4k|	src->buf[0] = (JOCTET) 0xFF;
  283|  19.4k|	src->buf[1] = (JOCTET) JPEG_EOI;
  ------------------
  |  | 1167|  19.4k|#define JPEG_EOI        0xD9    /* EOI marker code */
  ------------------
  284|       |
  285|  19.4k|	src->pub.next_input_byte = src->buf;
  286|  19.4k|	src->pub.bytes_in_buffer = 2;
  287|       |
  288|  19.4k|	return TRUE;
  ------------------
  |  |  209|  19.4k|#define TRUE    1
  ------------------
  289|  19.4k|}
jpeg2vips.c:skip_input_data_mappable:
  313|  1.74k|{
  314|  1.74k|	Source *src = (Source *) cinfo->src;
  315|       |
  316|  1.74k|	if (num_bytes > (long) src->pub.bytes_in_buffer) {
  ------------------
  |  Branch (316:6): [True: 185, False: 1.55k]
  ------------------
  317|    185|		src->pub.next_input_byte += src->pub.bytes_in_buffer;
  318|    185|		src->pub.bytes_in_buffer = 0;
  319|    185|	}
  320|  1.55k|	else {
  321|  1.55k|		src->pub.next_input_byte += (size_t) num_bytes;
  322|  1.55k|		src->pub.bytes_in_buffer -= (size_t) num_bytes;
  323|  1.55k|	}
  324|  1.74k|}
jpeg2vips.c:vips__jpeg_read:
 1002|  11.6k|{
 1003|       |	/* Need to read in APP1 (EXIF metadata), APP2 (ICC profile), APP13
 1004|       |	 * (photoshop IPTC) and APP14 (Adobe flags).
 1005|       |	 */
 1006|  11.6k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 1, 0xffff);
  ------------------
  |  | 1168|  11.6k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1007|  11.6k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 2, 0xffff);
  ------------------
  |  | 1168|  11.6k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1008|  11.6k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 13, 0xffff);
  ------------------
  |  | 1168|  11.6k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1009|  11.6k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 14, 0xffff);
  ------------------
  |  | 1168|  11.6k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1010|       |
 1011|       |#ifdef DEBUG
 1012|       |	{
 1013|       |		int i;
 1014|       |
 1015|       |		/* Handy for debugging ... spot any extra  markers.
 1016|       |		 */
 1017|       |		for (i = 0; i < 16; i++)
 1018|       |			jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + i, 0xffff);
 1019|       |	}
 1020|       |#endif /*DEBUG*/
 1021|       |
 1022|       |	/* Convert!
 1023|       |	 */
 1024|  11.6k|	if (header_only) {
  ------------------
  |  Branch (1024:6): [True: 6.61k, False: 5.00k]
  ------------------
 1025|  6.61k|		if (read_jpeg_header(jpeg, out))
  ------------------
  |  Branch (1025:7): [True: 0, False: 6.61k]
  ------------------
 1026|      0|			return -1;
 1027|       |
 1028|       |		/* Patch in the correct size.
 1029|       |		 */
 1030|  6.61k|		out->Xsize = jpeg->output_width;
 1031|  6.61k|		out->Ysize = jpeg->output_height;
 1032|       |
 1033|       |		/* Swap width and height if we're going to rotate this image.
 1034|       |		 */
 1035|  6.61k|		if (jpeg->autorotate) {
  ------------------
  |  Branch (1035:7): [True: 0, False: 6.61k]
  ------------------
 1036|      0|			if (vips_image_get_orientation_swap(out))
  ------------------
  |  Branch (1036:8): [True: 0, False: 0]
  ------------------
 1037|      0|				VIPS_SWAP(int, out->Xsize, out->Ysize);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |
 1039|      0|			vips_autorot_remove_angle(out);
 1040|      0|		}
 1041|  6.61k|	}
 1042|  5.00k|	else {
 1043|  5.00k|		if (read_jpeg_image(jpeg, out))
  ------------------
  |  Branch (1043:7): [True: 3.40k, False: 1.59k]
  ------------------
 1044|  3.40k|			return -1;
 1045|  5.00k|	}
 1046|       |
 1047|  8.21k|	return 0;
 1048|  11.6k|}
jpeg2vips.c:read_jpeg_header:
  571|  11.6k|{
  572|  11.6k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  573|       |
  574|  11.6k|	jpeg_saved_marker_ptr p;
  575|  11.6k|	VipsInterpretation interpretation;
  576|  11.6k|	double xres, yres;
  577|       |
  578|       |	/* Capture app2 sections here for assembly.
  579|       |	 */
  580|  11.6k|	void *app2_data[MAX_APP2_SECTIONS] = { 0 };
  581|  11.6k|	size_t app2_data_length[MAX_APP2_SECTIONS] = { 0 };
  582|  11.6k|	size_t data_length;
  583|  11.6k|	int i;
  584|       |
  585|       |	/* Read JPEG header. libjpeg will set out_color_space sanely for us
  586|       |	 * for YUV YCCK etc.
  587|       |	 */
  588|  11.6k|	jpeg_read_header(cinfo, TRUE);
  ------------------
  |  |  209|  11.6k|#define TRUE    1
  ------------------
  589|  11.6k|	cinfo->scale_denom = jpeg->shrink;
  590|  11.6k|	cinfo->scale_num = 1;
  591|  11.6k|	jpeg_calc_output_dimensions(cinfo);
  592|       |
  593|  11.6k|	jpeg->invert_pels = FALSE;
  ------------------
  |  |  206|  11.6k|#define FALSE   0               /* values of boolean */
  ------------------
  594|  11.6k|	switch (cinfo->out_color_space) {
  595|  1.58k|	case JCS_GRAYSCALE:
  ------------------
  |  Branch (595:2): [True: 1.58k, False: 10.0k]
  ------------------
  596|  1.58k|		interpretation = VIPS_INTERPRETATION_B_W;
  597|  1.58k|		break;
  598|       |
  599|    439|	case JCS_CMYK:
  ------------------
  |  Branch (599:2): [True: 439, False: 11.1k]
  ------------------
  600|    439|		interpretation = VIPS_INTERPRETATION_CMYK;
  601|       |
  602|       |		/* CMYKs are almost always returned inverted, but see below.
  603|       |		 */
  604|    439|		jpeg->invert_pels = TRUE;
  ------------------
  |  |  209|    439|#define TRUE    1
  ------------------
  605|    439|		break;
  606|       |
  607|  8.50k|	case JCS_RGB:
  ------------------
  |  Branch (607:2): [True: 8.50k, False: 3.12k]
  ------------------
  608|  8.56k|	default:
  ------------------
  |  Branch (608:2): [True: 60, False: 11.5k]
  ------------------
  609|  8.56k|		interpretation = VIPS_INTERPRETATION_sRGB;
  610|  8.56k|		break;
  611|  11.6k|	}
  612|       |
  613|       |#ifdef DEBUG
  614|       |	if (cinfo->saw_JFIF_marker)
  615|       |		printf("read_jpeg_header: jfif _density %d, %d, unit %d\n",
  616|       |			cinfo->X_density, cinfo->Y_density,
  617|       |			cinfo->density_unit);
  618|       |#endif /*DEBUG*/
  619|       |
  620|       |	/* Get the jfif resolution. exif may overwrite this later. Default to
  621|       |	 * 72dpi (as EXIF does).
  622|       |	 */
  623|  10.5k|	xres = 72.0 / 25.4;
  624|  10.5k|	yres = 72.0 / 25.4;
  625|  10.5k|	if (cinfo->saw_JFIF_marker &&
  ------------------
  |  Branch (625:6): [True: 736, False: 9.85k]
  ------------------
  626|  10.5k|		cinfo->X_density != 1U &&
  ------------------
  |  Branch (626:3): [True: 719, False: 17]
  ------------------
  627|  10.5k|		cinfo->Y_density != 1U) {
  ------------------
  |  Branch (627:3): [True: 714, False: 5]
  ------------------
  628|    714|		switch (cinfo->density_unit) {
  629|     31|		case 0:
  ------------------
  |  Branch (629:3): [True: 31, False: 683]
  ------------------
  630|       |			/* X_density / Y_density gives the pixel aspect ratio.
  631|       |			 * Leave xres, but adjust yres.
  632|       |			 */
  633|     31|			if (cinfo->Y_density > 0)
  ------------------
  |  Branch (633:8): [True: 26, False: 5]
  ------------------
  634|     26|				yres = xres * cinfo->X_density /
  635|     26|					cinfo->Y_density;
  636|     31|			break;
  637|       |
  638|     40|		case 1:
  ------------------
  |  Branch (638:3): [True: 40, False: 674]
  ------------------
  639|       |			/* Pixels per inch.
  640|       |			 */
  641|     40|			xres = cinfo->X_density / 25.4;
  642|     40|			yres = cinfo->Y_density / 25.4;
  643|     40|			vips_image_set_string(out,
  644|     40|				VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|     40|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  645|     40|			break;
  646|       |
  647|    548|		case 2:
  ------------------
  |  Branch (647:3): [True: 548, False: 166]
  ------------------
  648|       |			/* Pixels per cm.
  649|       |			 */
  650|    548|			xres = cinfo->X_density / 10.0;
  651|    548|			yres = cinfo->Y_density / 10.0;
  652|    548|			vips_image_set_string(out,
  653|    548|				VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|    548|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  654|    548|			break;
  655|       |
  656|     95|		default:
  ------------------
  |  Branch (656:3): [True: 95, False: 619]
  ------------------
  657|     95|			g_warning("%s", _("unknown JFIF resolution unit"));
  ------------------
  |  |  338|     95|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     95|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     95|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     95|                               __VA_ARGS__)
  ------------------
  658|     95|			break;
  659|    714|		}
  660|       |
  661|       |#ifdef DEBUG
  662|       |		printf("read_jpeg_header: seen jfif resolution %g, %g p/mm\n",
  663|       |			xres, yres);
  664|       |#endif /*DEBUG*/
  665|    714|	}
  666|       |
  667|       |	/* Set VIPS header.
  668|       |	 */
  669|  10.5k|	vips_image_init_fields(out,
  670|  10.5k|		cinfo->output_width, cinfo->output_height,
  671|  10.5k|		cinfo->output_components,
  672|  10.5k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  673|  10.5k|		interpretation,
  674|  10.5k|		xres, yres);
  675|       |
  676|  10.5k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  10.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  10.5k|	{ \
  |  |   55|  10.5k|		const char *sst = (V); \
  |  |   56|  10.5k|		\
  |  |   57|  10.5k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 10.5k, False: 0]
  |  |  ------------------
  |  |   58|  10.5k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 10.5k]
  |  |  |  Branch (58:16): [True: 10.5k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  10.5k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  10.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  10.5k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  10.5k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  10.5k|	{ \
  |  |  |  |  |  |   43|  10.5k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 10.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  10.5k|			(void) F((S)); \
  |  |  |  |  |  |   45|  10.5k|			(S) = 0; \
  |  |  |  |  |  |   46|  10.5k|		} \
  |  |  |  |  |  |   47|  10.5k|	} \
  |  |  |  |  |  |   48|  10.5k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  10.5k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 10.5k]
  |  |  ------------------
  |  |   61|  10.5k|					(S) = g_strdup(sst); \
  |  |   62|  10.5k|			} \
  |  |   63|  10.5k|		} \
  |  |   64|  10.5k|	} \
  |  |   65|  10.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|  10.5k|		vips_connection_filename(VIPS_CONNECTION(jpeg->source)));
  678|       |
  679|  10.5k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_FATSTRIP, NULL))
  ------------------
  |  Branch (679:6): [True: 0, False: 10.5k]
  ------------------
  680|      0|		return -1;
  681|       |
  682|       |	/* cinfo->output_width and cinfo->output_height round up with
  683|       |	 * shrink-on-load. For example, if the image is 1801 pixels across and
  684|       |	 * we shrink by 4, the output will be 450.25 pixels across,
  685|       |	 * cinfo->output_width with be 451, and libjpeg will write a black
  686|       |	 * column of pixels down the right.
  687|       |	 *
  688|       |	 * We must strictly round down, since we don't want fractional pixels
  689|       |	 * along the bottom and right.
  690|       |	 */
  691|  10.5k|	jpeg->output_width = cinfo->image_width / jpeg->shrink;
  692|  10.5k|	jpeg->output_height = cinfo->image_height / jpeg->shrink;
  693|       |
  694|       |	/* Interlaced jpegs need lots of memory to read, so our caller needs
  695|       |	 * to know.
  696|       |	 */
  697|  10.5k|	(void) vips_image_set_int(out, "jpeg-multiscan",
  698|  10.5k|		jpeg_has_multiple_scans(cinfo));
  699|       |
  700|       |	/* 8.7 adds this for PNG as well, so we have a new format-neutral name.
  701|       |	 */
  702|  10.5k|	if (jpeg_has_multiple_scans(cinfo))
  ------------------
  |  Branch (702:6): [True: 8.82k, False: 1.76k]
  ------------------
  703|  8.82k|		vips_image_set_int(out, "interlaced", 1);
  704|       |
  705|  10.5k|	(void) vips_image_set_string(out, "jpeg-chroma-subsample",
  706|  10.5k|		find_chroma_subsample(cinfo));
  707|       |
  708|       |	/* Look for EXIF and ICC profile.
  709|       |	 */
  710|  18.7k|	for (p = cinfo->marker_list; p; p = p->next) {
  ------------------
  |  Branch (710:31): [True: 8.12k, False: 10.5k]
  ------------------
  711|       |#ifdef DEBUG
  712|       |		{
  713|       |			printf("read_jpeg_header: seen %u bytes of APP%d\n",
  714|       |				p->data_length,
  715|       |				p->marker - JPEG_APP0);
  716|       |
  717|       |			for (i = 0; i < 10; i++)
  718|       |				printf("\t%d) '%c' (%d)\n",
  719|       |					i, p->data[i], p->data[i]);
  720|       |		}
  721|       |#endif /*DEBUG*/
  722|       |
  723|  8.12k|		switch (p->marker) {
  724|  4.98k|		case JPEG_APP0 + 1:
  ------------------
  |  | 1168|  4.98k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (724:3): [True: 4.98k, False: 3.14k]
  ------------------
  725|       |			/* Possible EXIF or XMP data.
  726|       |			 */
  727|  4.98k|			if (p->data_length > 4 &&
  ------------------
  |  Branch (727:8): [True: 4.78k, False: 205]
  ------------------
  728|  4.98k|				vips_isprefix("Exif", (char *) p->data) &&
  ------------------
  |  Branch (728:5): [True: 3.22k, False: 1.55k]
  ------------------
  729|  4.98k|				attach_blob(out, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  3.22k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (729:5): [True: 0, False: 3.22k]
  ------------------
  730|  3.22k|					p->data, p->data_length))
  731|      0|				return -1;
  732|       |
  733|  4.98k|			if (p->data_length > 4 &&
  ------------------
  |  Branch (733:8): [True: 4.78k, False: 205]
  ------------------
  734|  4.98k|				vips_isprefix("http", (char *) p->data) &&
  ------------------
  |  Branch (734:5): [True: 1.28k, False: 3.49k]
  ------------------
  735|  4.98k|				attach_xmp_blob(out,
  ------------------
  |  Branch (735:5): [True: 0, False: 1.28k]
  ------------------
  736|  1.28k|					p->data, p->data_length))
  737|      0|				return -1;
  738|       |
  739|  4.98k|			break;
  740|       |
  741|  4.98k|		case JPEG_APP0 + 2:
  ------------------
  |  | 1168|    954|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (741:3): [True: 954, False: 7.17k]
  ------------------
  742|       |			/* Possible ICC profile.
  743|       |			 */
  744|    954|			if (p->data_length > 14 &&
  ------------------
  |  Branch (744:8): [True: 714, False: 240]
  ------------------
  745|    954|				vips_isprefix("ICC_PROFILE",
  ------------------
  |  Branch (745:5): [True: 521, False: 193]
  ------------------
  746|    714|					(char *) p->data)) {
  747|       |				/* cur_marker numbers from 1, according to
  748|       |				 * spec.
  749|       |				 */
  750|    521|				int cur_marker = p->data[12] - 1;
  751|       |
  752|    521|				if (cur_marker >= 0 &&
  ------------------
  |  Branch (752:9): [True: 490, False: 31]
  ------------------
  753|    521|					cur_marker < MAX_APP2_SECTIONS) {
  ------------------
  |  |  564|    490|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (753:6): [True: 450, False: 40]
  ------------------
  754|    450|					app2_data[cur_marker] = p->data + 14;
  755|    450|					app2_data_length[cur_marker] =
  756|    450|						p->data_length - 14;
  757|    450|				}
  758|    521|			}
  759|    954|			break;
  760|       |
  761|    608|		case JPEG_APP0 + 13:
  ------------------
  |  | 1168|    608|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (761:3): [True: 608, False: 7.52k]
  ------------------
  762|       |			/* Possible IPTC data block.
  763|       |			 */
  764|    608|			if (p->data_length > 5 &&
  ------------------
  |  Branch (764:8): [True: 218, False: 390]
  ------------------
  765|    608|				vips_isprefix("Photo", (char *) p->data)) {
  ------------------
  |  Branch (765:5): [True: 2, False: 216]
  ------------------
  766|      2|				if (attach_blob(out, VIPS_META_IPTC_NAME,
  ------------------
  |  |   60|      2|#define VIPS_META_IPTC_NAME "iptc-data"
  ------------------
  |  Branch (766:9): [True: 0, False: 2]
  ------------------
  767|      2|						p->data, p->data_length))
  768|      0|					return -1;
  769|       |
  770|       |				/* Older versions of libvips used this misspelt
  771|       |				 * name :-( attach under this name too for
  772|       |				 * compatibility.
  773|       |				 */
  774|      2|				if (attach_blob(out, "ipct-data",
  ------------------
  |  Branch (774:9): [True: 0, False: 2]
  ------------------
  775|      2|						p->data, p->data_length))
  776|      0|					return -1;
  777|      2|			}
  778|    608|			break;
  779|       |
  780|  1.57k|		case JPEG_APP0 + 14:
  ------------------
  |  | 1168|  1.57k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (780:3): [True: 1.57k, False: 6.55k]
  ------------------
  781|       |			/* Adobe block. There's a lot of confusion about
  782|       |			 * whether or not CMYK jpg images are inverted. For
  783|       |			 * the images we have, it seems they should always
  784|       |			 * invert.
  785|       |			 *
  786|       |			 * See: https://sno.phy.queensu.ca/~phil/exiftool/\
  787|       |			 * 	TagNames/JPEG.html#Adobe
  788|       |			 *
  789|       |			 * data[11] == 0 - unknown
  790|       |			 * data[11] == 1 - YCbCr
  791|       |			 * data[11] == 2 - YCCK
  792|       |			 *
  793|       |			 * Leave this code here in case we come up with a
  794|       |			 * better rule.
  795|       |			 */
  796|  1.57k|			if (p->data_length >= 12 &&
  ------------------
  |  Branch (796:8): [True: 1.34k, False: 236]
  ------------------
  797|  1.57k|				vips_isprefix("Adobe", (char *) p->data)) {
  ------------------
  |  Branch (797:5): [True: 277, False: 1.06k]
  ------------------
  798|    277|				if (p->data[11] == 0) {
  ------------------
  |  Branch (798:9): [True: 24, False: 253]
  ------------------
  799|       |#ifdef DEBUG
  800|       |					printf("complete Adobe block, not YCCK image\n");
  801|       |#endif				/*DEBUG*/
  802|       |					// jpeg->invert_pels = FALSE;
  803|     24|				}
  804|    277|			}
  805|  1.57k|			break;
  806|       |
  807|      0|		default:
  ------------------
  |  Branch (807:3): [True: 0, False: 8.12k]
  ------------------
  808|       |#ifdef DEBUG
  809|       |			printf("read_jpeg_header: "
  810|       |				   "ignoring %u byte APP%d block\n",
  811|       |				p->data_length, p->marker - JPEG_APP0);
  812|       |#endif /*DEBUG*/
  813|      0|			break;
  814|  8.12k|		}
  815|  8.12k|	}
  816|       |
  817|       |	/* Assemble ICC sections.
  818|       |	 */
  819|  10.5k|	data_length = 0;
  820|  10.6k|	for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++)
  ------------------
  |  |  564|  21.2k|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (820:14): [True: 10.6k, False: 0]
  |  Branch (820:39): [True: 54, False: 10.5k]
  ------------------
  821|     54|		data_length += app2_data_length[i];
  822|  10.5k|	if (data_length) {
  ------------------
  |  Branch (822:6): [True: 28, False: 10.5k]
  ------------------
  823|     28|		unsigned char *data;
  824|     28|		int p;
  825|       |
  826|       |#ifdef DEBUG
  827|       |		printf("read_jpeg_header: assembled %zd byte ICC profile\n",
  828|       |			data_length);
  829|       |#endif /*DEBUG*/
  830|       |
  831|     28|		if (!(data = vips_malloc(NULL, data_length)))
  ------------------
  |  Branch (831:7): [True: 0, False: 28]
  ------------------
  832|      0|			return -1;
  833|       |
  834|     28|		p = 0;
  835|     82|		for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++) {
  ------------------
  |  |  564|    164|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (835:15): [True: 82, False: 0]
  |  Branch (835:40): [True: 54, False: 28]
  ------------------
  836|     54|			memcpy(data + p, app2_data[i], app2_data_length[i]);
  837|     54|			p += app2_data_length[i];
  838|     54|		}
  839|       |
  840|     28|		vips_image_set_blob(out, VIPS_META_ICC_NAME,
  ------------------
  |  |   78|     28|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  841|     28|			(VipsCallbackFn) vips_area_free_cb, data, data_length);
  842|     28|	}
  843|       |
  844|  10.5k|	return 0;
  845|  10.5k|}
jpeg2vips.c:find_chroma_subsample:
  495|  10.5k|{
  496|       |	/* libjpeg only uses 4:4:4 and 4:2:0, confusingly.
  497|       |	 *
  498|       |	 * http://poynton.ca/PDFs/Chroma_subsampling_notation.pdf
  499|       |	 */
  500|  10.5k|	gboolean has_subsample = cinfo->max_h_samp_factor > 1 ||
  ------------------
  |  Branch (500:27): [True: 9.18k, False: 1.40k]
  ------------------
  501|  10.5k|		cinfo->max_v_samp_factor > 1;
  ------------------
  |  Branch (501:3): [True: 1.27k, False: 131]
  ------------------
  502|  10.5k|	gboolean is_cmyk = cinfo->num_components > 3;
  503|       |
  504|  10.5k|	return is_cmyk
  ------------------
  |  Branch (504:9): [True: 442, False: 10.1k]
  ------------------
  505|  10.5k|		? (has_subsample ? "4:2:0:4" : "4:4:4:4")
  ------------------
  |  Branch (505:6): [True: 442, False: 0]
  ------------------
  506|  10.5k|		: (has_subsample ? "4:2:0" : "4:4:4");
  ------------------
  |  Branch (506:6): [True: 10.0k, False: 131]
  ------------------
  507|  10.5k|}
jpeg2vips.c:attach_blob:
  511|  4.16k|{
  512|       |	/* Only use the first one.
  513|       |	 */
  514|  4.16k|	if (vips_image_get_typeof(im, field)) {
  ------------------
  |  Branch (514:6): [True: 1.60k, False: 2.55k]
  ------------------
  515|       |#ifdef DEBUG
  516|       |		printf("attach_blob: second %s block, ignoring\n", field);
  517|       |#endif /*DEBUG*/
  518|       |
  519|  1.60k|		return 0;
  520|  1.60k|	}
  521|       |
  522|       |#ifdef DEBUG
  523|       |	printf("attach_blob: attaching %zd bytes of %s\n",
  524|       |		data_length, field);
  525|       |#endif /*DEBUG*/
  526|       |
  527|  2.55k|	vips_image_set_blob_copy(im, field, data, data_length);
  528|       |
  529|  2.55k|	return 0;
  530|  4.16k|}
jpeg2vips.c:attach_xmp_blob:
  538|  1.28k|{
  539|  1.28k|	char *p = (char *) data;
  540|  1.28k|	int i;
  541|       |
  542|  1.28k|	if (data_length < 4 ||
  ------------------
  |  Branch (542:6): [True: 0, False: 1.28k]
  ------------------
  543|  1.28k|		!vips_isprefix("http", p))
  ------------------
  |  Branch (543:3): [True: 0, False: 1.28k]
  ------------------
  544|      0|		return 0;
  545|       |
  546|       |	/* Search for a null char within the first few characters. 80
  547|       |	 * should be plenty for a basic URL.
  548|       |	 *
  549|       |	 * -2 for the extra null.
  550|       |	 */
  551|  13.3k|	for (i = 0; i < VIPS_MIN(80, data_length - 2); i++)
  ------------------
  |  |   55|  13.3k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 29, False: 13.2k]
  |  |  ------------------
  ------------------
  |  Branch (551:14): [True: 12.7k, False: 587]
  ------------------
  552|  12.7k|		if (!p[i])
  ------------------
  |  Branch (552:7): [True: 702, False: 12.0k]
  ------------------
  553|    702|			break;
  554|  1.28k|	if (p[i])
  ------------------
  |  Branch (554:6): [True: 356, False: 933]
  ------------------
  555|    356|		return 0;
  556|       |
  557|    933|	return attach_blob(im, VIPS_META_XMP_NAME,
  ------------------
  |  |   53|    933|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  558|    933|		p + i + 1, data_length - i - 1);
  559|  1.28k|}
jpeg2vips.c:read_jpeg_image:
  941|  5.00k|{
  942|  5.00k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  943|  5.00k|	VipsImage **t = (VipsImage **)
  944|  5.00k|		vips_object_local_array(VIPS_OBJECT(out), 5);
  ------------------
  |  |  433|  5.00k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  5.00k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  5.00k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|       |
  946|  5.00k|	VipsImage *im;
  947|       |
  948|       |	/* Here for longjmp() from vips__new_error_exit() during
  949|       |	 * jpeg_read_header() or jpeg_start_decompress().
  950|       |	 */
  951|  5.00k|	if (setjmp(jpeg->eman.jmp))
  952|  2.22k|		return -1;
  953|       |
  954|  2.78k|	t[0] = vips_image_new();
  955|  2.78k|	if (read_jpeg_header(jpeg, t[0]))
  ------------------
  |  Branch (955:6): [True: 0, False: 2.78k]
  ------------------
  956|      0|		return -1;
  957|       |
  958|       |	/* Switch to pixel decode.
  959|       |	 */
  960|  2.78k|	if (vips_source_decode(jpeg->source))
  ------------------
  |  Branch (960:6): [True: 0, False: 2.78k]
  ------------------
  961|      0|		return -1;
  962|       |
  963|  2.78k|	jpeg_start_decompress(cinfo);
  964|       |
  965|       |#ifdef DEBUG
  966|       |	printf("read_jpeg_image: starting decompress\n");
  967|       |#endif /*DEBUG*/
  968|       |
  969|       |	/* We must crop after the seq, or our generate may not be asked for
  970|       |	 * full lines of pixels and will attempt to write beyond the buffer.
  971|       |	 */
  972|  2.78k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (972:6): [True: 0, False: 2.78k]
  ------------------
  973|  2.78k|			NULL, read_jpeg_generate, NULL,
  974|  2.78k|			jpeg, NULL) ||
  975|  2.78k|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (975:3): [True: 0, False: 2.78k]
  ------------------
  976|  2.78k|			"tile_height", 8,
  977|  2.78k|			NULL) ||
  978|  2.78k|		vips_extract_area(t[1], &t[2],
  ------------------
  |  Branch (978:3): [True: 0, False: 2.78k]
  ------------------
  979|  2.78k|			0, 0, jpeg->output_width, jpeg->output_height, NULL))
  980|      0|		return -1;
  981|  2.78k|	im = t[2];
  982|       |
  983|  2.78k|	if (jpeg->autorotate &&
  ------------------
  |  Branch (983:6): [True: 0, False: 2.78k]
  ------------------
  984|  2.78k|		vips_image_get_orientation(im) != 1) {
  ------------------
  |  Branch (984:3): [True: 0, False: 0]
  ------------------
  985|       |		/* We have to copy to memory before calling autorot, since it
  986|       |		 * needs random access.
  987|       |		 */
  988|      0|		if (!(t[3] = vips_image_copy_memory(im)) ||
  ------------------
  |  Branch (988:7): [True: 0, False: 0]
  ------------------
  989|      0|			vips_autorot(t[3], &t[4], NULL))
  ------------------
  |  Branch (989:4): [True: 0, False: 0]
  ------------------
  990|      0|			return -1;
  991|      0|		im = t[4];
  992|      0|	}
  993|       |
  994|  2.78k|	if (vips_image_write(im, out))
  ------------------
  |  Branch (994:6): [True: 1.18k, False: 1.59k]
  ------------------
  995|  1.18k|		return -1;
  996|       |
  997|  1.59k|	return 0;
  998|  2.78k|}
jpeg2vips.c:read_jpeg_generate:
  850|  13.8k|{
  851|  13.8k|	VipsRect *r = &out_region->valid;
  852|  13.8k|	ReadJpeg *jpeg = (ReadJpeg *) a;
  853|  13.8k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  854|  13.8k|	int sz = cinfo->output_width * cinfo->output_components;
  855|       |
  856|  13.8k|	int y;
  857|       |
  858|       |#ifdef DEBUG_VERBOSE
  859|       |	printf("read_jpeg_generate: %p line %d, %d rows\n",
  860|       |		g_thread_self(), r->top, r->height);
  861|       |#endif /*DEBUG_VERBOSE*/
  862|       |
  863|  13.8k|	VIPS_GATE_START("read_jpeg_generate: work");
  ------------------
  |  |   41|  13.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  13.8k|	{ \
  |  |   43|  13.8k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 13.8k]
  |  |  ------------------
  |  |   44|  13.8k|			vips__thread_gate_start(NAME); \
  |  |   45|  13.8k|	} \
  |  |   46|  13.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|       |
  865|       |	/* We're inside a tilecache where tiles are the full image width, so
  866|       |	 * this should always be true.
  867|       |	 */
  868|  13.8k|	g_assert(r->left == 0);
  ------------------
  |  |  166|  13.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|  13.8k|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|  13.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  870|  13.8k|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|  13.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  871|       |
  872|       |	/* Tiles should always be on a 8-pixel boundary.
  873|       |	 */
  874|  13.8k|	g_assert(r->top % 8 == 0);
  ------------------
  |  |  166|  13.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|       |
  876|       |	/* Tiles should always be a strip in height, unless it's the final
  877|       |	 * strip.
  878|       |	 */
  879|  13.8k|	g_assert(r->height == VIPS_MIN(8, out_region->im->Ysize - r->top));
  ------------------
  |  |  166|  13.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|       |
  881|       |	/* And check that the y position is correct. It should be, since we are
  882|       |	 * inside a vips_sequential().
  883|       |	 */
  884|  13.8k|	if (r->top != cinfo->output_scanline) {
  ------------------
  |  Branch (884:6): [True: 0, False: 13.8k]
  ------------------
  885|      0|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  886|      0|		vips_error("VipsJpeg", _("out of order read at line %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  887|      0|			cinfo->output_scanline);
  888|       |
  889|      0|		return -1;
  890|      0|	}
  891|       |
  892|       |	/* Here for longjmp() from vips__new_error_exit() during
  893|       |	 * jpeg_read_scanlines().
  894|       |	 */
  895|  13.8k|	if (setjmp(jpeg->eman.jmp)) {
  896|  1.18k|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|  1.18k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.18k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  1.18k|	{ \
  |  |   51|  1.18k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   52|  1.18k|			vips__thread_gate_stop(NAME); \
  |  |   53|  1.18k|	} \
  |  |   54|  1.18k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.18k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|       |
  898|       |#ifdef DEBUG
  899|       |		printf("read_jpeg_generate: longjmp() exit\n");
  900|       |#endif /*DEBUG*/
  901|       |
  902|  1.18k|		return -1;
  903|  1.18k|	}
  904|       |
  905|  12.6k|	if (jpeg->eman.pub.num_warnings > 0 &&
  ------------------
  |  Branch (905:6): [True: 13.7k, False: 18.4E]
  ------------------
  906|  13.7k|		jpeg->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (906:3): [True: 0, False: 13.7k]
  ------------------
  907|      0|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|       |
  909|       |		/* Only fail once.
  910|       |		 */
  911|      0|		jpeg->eman.pub.num_warnings = 0;
  912|       |
  913|      0|		return -1;
  914|      0|	}
  915|       |
  916|   110k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (916:14): [True: 97.4k, False: 12.6k]
  ------------------
  917|  97.4k|		JSAMPROW row_pointer[1];
  918|       |
  919|  97.4k|		row_pointer[0] = (JSAMPLE *)
  920|  97.4k|			VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  97.4k|	((R)->data + \
  |  |  228|  97.4k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  97.4k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  97.4k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  97.4k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  97.4k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  97.4k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|       |
  922|  97.4k|		jpeg_read_scanlines(cinfo, &row_pointer[0], 1);
  923|       |
  924|  97.4k|		if (jpeg->invert_pels) {
  ------------------
  |  Branch (924:7): [True: 1.97k, False: 95.4k]
  ------------------
  925|  1.97k|			int x;
  926|       |
  927|   259k|			for (x = 0; x < sz; x++)
  ------------------
  |  Branch (927:16): [True: 257k, False: 1.97k]
  ------------------
  928|   257k|				row_pointer[0][x] = 255 - row_pointer[0][x];
  929|  1.97k|		}
  930|  97.4k|	}
  931|       |
  932|  12.6k|	VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|  12.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  12.6k|	{ \
  |  |   51|  12.6k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 12.6k]
  |  |  ------------------
  |  |   52|  12.6k|			vips__thread_gate_stop(NAME); \
  |  |   53|  12.6k|	} \
  |  |   54|  12.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|       |
  934|  12.6k|	return 0;
  935|  12.6k|}

jpegload.c:vips_foreign_load_jpeg_class_init:
  166|      1|{
  167|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  169|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  170|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  171|       |
  172|      1|	gobject_class->dispose = vips_foreign_load_jpeg_dispose;
  173|      1|	gobject_class->set_property = vips_object_set_property;
  174|      1|	gobject_class->get_property = vips_object_get_property;
  175|       |
  176|      1|	object_class->nickname = "jpegload_base";
  177|      1|	object_class->description = _("load jpeg");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  178|      1|	object_class->build = vips_foreign_load_jpeg_build;
  179|       |
  180|       |	/* We are fast at is_a(), so high priority.
  181|       |	 */
  182|      1|	foreign_class->priority = 50;
  183|       |
  184|      1|	load_class->get_flags_filename =
  185|      1|		vips_foreign_load_jpeg_get_flags_filename;
  186|      1|	load_class->get_flags = vips_foreign_load_jpeg_get_flags;
  187|      1|	load_class->header = vips_foreign_load_jpeg_header;
  188|      1|	load_class->load = vips_foreign_load_jpeg_load;
  189|       |
  190|      1|	VIPS_ARG_INT(class, "shrink", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Shrink"),
  192|      1|		_("Shrink factor on load"),
  193|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpeg, shrink),
  195|      1|		1, 8, 1);
  196|       |
  197|      1|	VIPS_ARG_BOOL(class, "autorotate", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  198|      1|		_("Autorotate"),
  199|      1|		_("Rotate image using exif orientation"),
  200|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpeg, autorotate),
  202|      1|		FALSE);
  203|       |
  204|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  205|       |	VIPS_ARG_BOOL(class, "unlimited", 22,
  206|       |		_("Unlimited"),
  207|       |		_("Remove all denial of service limits"),
  208|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  209|       |		G_STRUCT_OFFSET(VipsForeignLoadJpeg, unlimited),
  210|       |		FALSE);
  211|       |#endif
  212|      1|}
jpegload.c:vips_foreign_load_jpeg_dispose:
   98|  6.61k|{
   99|  6.61k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) gobject;
  100|       |
  101|  6.61k|	VIPS_UNREF(jpeg->source);
  ------------------
  |  |   57|  6.61k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  6.61k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  6.61k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  6.61k|	{ \
  |  |  |  |   43|  6.61k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 6.61k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  6.61k|			(void) F((S)); \
  |  |  |  |   45|  6.61k|			(S) = 0; \
  |  |  |  |   46|  6.61k|		} \
  |  |  |  |   47|  6.61k|	} \
  |  |  |  |   48|  6.61k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  6.61k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|       |
  103|  6.61k|	G_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  6.61k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.61k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.61k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_build:
  108|  6.61k|{
  109|  6.61k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object;
  110|       |
  111|  6.61k|	if (jpeg->shrink != 1 &&
  ------------------
  |  Branch (111:6): [True: 0, False: 6.61k]
  ------------------
  112|  6.61k|		jpeg->shrink != 2 &&
  ------------------
  |  Branch (112:3): [True: 0, False: 0]
  ------------------
  113|  6.61k|		jpeg->shrink != 4 &&
  ------------------
  |  Branch (113:3): [True: 0, False: 0]
  ------------------
  114|  6.61k|		jpeg->shrink != 8) {
  ------------------
  |  Branch (114:3): [True: 0, False: 0]
  ------------------
  115|      0|		vips_error("VipsFormatLoadJpeg",
  116|      0|			_("bad shrink factor %d"), jpeg->shrink);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  117|      0|		return -1;
  118|      0|	}
  119|       |
  120|  6.61k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->build(object))
  ------------------
  |  |  435|  6.61k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.61k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.61k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (120:6): [True: 1.03k, False: 5.58k]
  ------------------
  121|  1.03k|		return -1;
  122|       |
  123|  5.58k|	return 0;
  124|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_get_flags:
  128|  6.61k|{
  129|  6.61k|	return VIPS_FOREIGN_SEQUENTIAL;
  130|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_header:
  140|  6.61k|{
  141|  6.61k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load;
  142|       |
  143|  6.61k|	if (vips__jpeg_read_source(jpeg->source,
  ------------------
  |  Branch (143:6): [True: 1.03k, False: 5.58k]
  ------------------
  144|  6.61k|			load->out, TRUE, jpeg->shrink, load->fail_on,
  ------------------
  |  |  798|  6.61k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  6.61k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  145|  6.61k|			jpeg->autorotate, jpeg->unlimited))
  146|  1.03k|		return -1;
  147|       |
  148|  5.58k|	return 0;
  149|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_load:
  153|  5.00k|{
  154|  5.00k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load;
  155|       |
  156|  5.00k|	if (vips__jpeg_read_source(jpeg->source,
  ------------------
  |  Branch (156:6): [True: 3.40k, False: 1.59k]
  ------------------
  157|  5.00k|			load->real, FALSE, jpeg->shrink, load->fail_on,
  ------------------
  |  |  794|  5.00k|#define	FALSE	(0)
  ------------------
  158|  5.00k|			jpeg->autorotate, jpeg->unlimited))
  159|  3.40k|		return -1;
  160|       |
  161|  1.59k|	return 0;
  162|  5.00k|}
jpegload.c:vips_foreign_load_jpeg_init:
  216|  6.61k|{
  217|  6.61k|	jpeg->shrink = 1;
  218|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_source_class_init:
  260|      1|{
  261|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  263|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  264|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  265|       |
  266|      1|	gobject_class->set_property = vips_object_set_property;
  267|      1|	gobject_class->get_property = vips_object_get_property;
  268|       |
  269|      1|	object_class->nickname = "jpegload_source";
  270|      1|	object_class->description = _("load image from jpeg source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  271|      1|	object_class->build = vips_foreign_load_jpeg_source_build;
  272|       |
  273|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  274|       |
  275|      1|	load_class->is_a_source = vips_foreign_load_jpeg_source_is_a_source;
  276|       |
  277|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  278|      1|		_("Source"),
  279|      1|		_("Source to load from"),
  280|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  281|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegSource, source),
  282|      1|		VIPS_TYPE_SOURCE);
  283|      1|}
jpegload.c:vips_foreign_load_jpeg_source_is_a_source:
  253|  27.5k|{
  254|  27.5k|	return vips__isjpeg_source(source);
  255|  27.5k|}
jpegload.c:vips_foreign_load_jpeg_file_class_init:
  336|      1|{
  337|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  339|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  340|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  341|       |
  342|      1|	gobject_class->set_property = vips_object_set_property;
  343|      1|	gobject_class->get_property = vips_object_get_property;
  344|       |
  345|      1|	object_class->nickname = "jpegload";
  346|      1|	object_class->description = _("load jpeg from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  347|      1|	object_class->build = vips_foreign_load_jpeg_file_build;
  348|       |
  349|      1|	foreign_class->suffs = vips__jpeg_suffs;
  350|       |
  351|      1|	load_class->is_a = vips_foreign_load_jpeg_file_is_a;
  352|       |
  353|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  354|      1|		_("Filename"),
  355|      1|		_("Filename to load from"),
  356|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  357|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegFile, filename),
  358|      1|		NULL);
  359|      1|}
jpegload.c:vips_foreign_load_jpeg_buffer_class_init:
  415|      1|{
  416|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  418|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  419|       |
  420|      1|	gobject_class->set_property = vips_object_set_property;
  421|      1|	gobject_class->get_property = vips_object_get_property;
  422|       |
  423|      1|	object_class->nickname = "jpegload_buffer";
  424|      1|	object_class->description = _("load jpeg from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  425|      1|	object_class->build = vips_foreign_load_jpeg_buffer_build;
  426|       |
  427|      1|	load_class->is_a_buffer = vips_foreign_load_jpeg_buffer_is_a_buffer;
  428|       |
  429|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  430|      1|		_("Buffer"),
  431|      1|		_("Buffer to load from"),
  432|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  433|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegBuffer, blob),
  434|      1|		VIPS_TYPE_BLOB);
  435|      1|}
jpegload.c:vips_foreign_load_jpeg_buffer_build:
  380|  6.61k|{
  381|  6.61k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object;
  382|  6.61k|	VipsForeignLoadJpegBuffer *buffer =
  383|  6.61k|		(VipsForeignLoadJpegBuffer *) object;
  384|       |
  385|  6.61k|	if (buffer->blob &&
  ------------------
  |  Branch (385:6): [True: 6.61k, False: 0]
  ------------------
  386|  6.61k|		!(jpeg->source = vips_source_new_from_memory(
  ------------------
  |  Branch (386:3): [True: 0, False: 6.61k]
  ------------------
  387|  6.61k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  6.61k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  388|  6.61k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  6.61k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  389|      0|		return -1;
  390|       |
  391|  6.61k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_buffer_parent_class)
  ------------------
  |  |  435|  6.61k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.61k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.61k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (391:6): [True: 1.03k, False: 5.58k]
  ------------------
  392|  6.61k|			->build(object))
  393|  1.03k|		return -1;
  394|       |
  395|  5.58k|	return 0;
  396|  6.61k|}
jpegload.c:vips_foreign_load_jpeg_buffer_is_a_buffer:
  400|  27.5k|{
  401|  27.5k|	VipsSource *source;
  402|  27.5k|	gboolean result;
  403|       |
  404|  27.5k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (404:6): [True: 0, False: 27.5k]
  ------------------
  405|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  406|  27.5k|	result = vips_foreign_load_jpeg_source_is_a_source(source);
  407|  27.5k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  27.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  27.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  27.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  27.5k|	{ \
  |  |  |  |   43|  27.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 27.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  27.5k|			(void) F((S)); \
  |  |  |  |   45|  27.5k|			(S) = 0; \
  |  |  |  |   46|  27.5k|		} \
  |  |  |  |   47|  27.5k|	} \
  |  |  |  |   48|  27.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  27.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|       |
  409|  27.5k|	return result;
  410|  27.5k|}
jpegload.c:vips_foreign_load_jpeg_buffer_init:
  439|  6.61k|{
  440|  6.61k|}

jpegsave.c:vips_foreign_save_jpeg_class_init:
  143|      1|{
  144|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  146|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  147|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  148|       |
  149|      1|	gobject_class->set_property = vips_object_set_property;
  150|      1|	gobject_class->get_property = vips_object_get_property;
  151|       |
  152|      1|	object_class->nickname = "jpegsave_base";
  153|      1|	object_class->description = _("save jpeg");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  154|      1|	object_class->build = vips_foreign_save_jpeg_build;
  155|       |
  156|      1|	foreign_class->suffs = vips__jpeg_suffs;
  157|       |
  158|       |	/* See also vips_foreign_save_tiff_build() when saving JPEG in TIFF.
  159|       |	 */
  160|      1|	save_class->saveable = VIPS_SAVEABLE_RGB_CMYK;
  161|      1|	save_class->format_table = bandfmt_jpeg;
  162|       |
  163|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  164|      1|		_("Q"),
  165|      1|		_("Q factor"),
  166|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  167|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, Q),
  168|      1|		1, 100, 75);
  169|       |
  170|      1|	VIPS_ARG_BOOL(class, "optimize_coding", 12,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  171|      1|		_("Optimize coding"),
  172|      1|		_("Compute optimal Huffman coding tables"),
  173|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  174|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_coding),
  175|      1|		FALSE);
  176|       |
  177|      1|	VIPS_ARG_BOOL(class, "interlace", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  178|      1|		_("Interlace"),
  179|      1|		_("Generate an interlaced (progressive) jpeg"),
  180|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  181|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, interlace),
  182|      1|		FALSE);
  183|       |
  184|      1|	VIPS_ARG_BOOL(class, "no_subsample", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  185|      1|		_("No subsample"),
  186|      1|		_("Disable chroma subsample"),
  187|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  188|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, no_subsample),
  189|      1|		FALSE);
  190|       |
  191|      1|	VIPS_ARG_BOOL(class, "trellis_quant", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  192|      1|		_("Trellis quantisation"),
  193|      1|		_("Apply trellis quantisation to each 8x8 block"),
  194|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, trellis_quant),
  196|      1|		FALSE);
  197|       |
  198|      1|	VIPS_ARG_BOOL(class, "overshoot_deringing", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  199|      1|		_("Overshoot de-ringing"),
  200|      1|		_("Apply overshooting to samples with extreme values"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, overshoot_deringing),
  203|      1|		FALSE);
  204|       |
  205|      1|	VIPS_ARG_BOOL(class, "optimize_scans", 17,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  206|      1|		_("Optimize scans"),
  207|      1|		_("Split spectrum of DCT coefficients into separate scans"),
  208|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  209|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_scans),
  210|      1|		FALSE);
  211|       |
  212|      1|	VIPS_ARG_INT(class, "quant_table", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  213|      1|		_("Quantization table"),
  214|      1|		_("Use predefined quantization table with given index"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  216|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, quant_table),
  217|      1|		0, 8, 0);
  218|       |
  219|      1|	VIPS_ARG_ENUM(class, "subsample_mode", 19,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  220|      1|		_("Subsample mode"),
  221|      1|		_("Select chroma subsample operation mode"),
  222|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  223|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, subsample_mode),
  224|      1|		VIPS_TYPE_FOREIGN_SUBSAMPLE,
  225|      1|		VIPS_FOREIGN_SUBSAMPLE_AUTO);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "restart_interval", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("Restart interval"),
  229|      1|		_("Add restart markers every specified number of mcu"),
  230|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, restart_interval),
  232|      1|		0, INT_MAX, 0);
  233|      1|}
jpegsave.c:vips_foreign_save_jpeg_target_class_init:
  280|      1|{
  281|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  283|       |
  284|      1|	gobject_class->set_property = vips_object_set_property;
  285|      1|	gobject_class->get_property = vips_object_get_property;
  286|       |
  287|      1|	object_class->nickname = "jpegsave_target";
  288|      1|	object_class->description = _("save image to jpeg target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  289|      1|	object_class->build = vips_foreign_save_jpeg_target_build;
  290|       |
  291|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  292|      1|		_("Target"),
  293|      1|		_("Target to save to"),
  294|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  295|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegTarget, target),
  296|      1|		VIPS_TYPE_TARGET);
  297|      1|}
jpegsave.c:vips_foreign_save_jpeg_file_class_init:
  349|      1|{
  350|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  352|       |
  353|      1|	gobject_class->set_property = vips_object_set_property;
  354|      1|	gobject_class->get_property = vips_object_get_property;
  355|       |
  356|      1|	object_class->nickname = "jpegsave";
  357|      1|	object_class->description = _("save image to jpeg file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  358|      1|	object_class->build = vips_foreign_save_jpeg_file_build;
  359|       |
  360|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  361|      1|		_("Filename"),
  362|      1|		_("Filename to save to"),
  363|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  364|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegFile, filename),
  365|      1|		NULL);
  366|      1|}
jpegsave.c:vips_foreign_save_jpeg_buffer_class_init:
  427|      1|{
  428|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  430|       |
  431|      1|	gobject_class->set_property = vips_object_set_property;
  432|      1|	gobject_class->get_property = vips_object_get_property;
  433|       |
  434|      1|	object_class->nickname = "jpegsave_buffer";
  435|      1|	object_class->description = _("save image to jpeg buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  436|      1|	object_class->build = vips_foreign_save_jpeg_buffer_build;
  437|       |
  438|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  439|      1|		_("Buffer"),
  440|      1|		_("Buffer to save to"),
  441|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  442|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegBuffer, buf),
  443|      1|		VIPS_TYPE_BLOB);
  444|      1|}
jpegsave.c:vips_foreign_save_jpeg_mime_class_init:
  507|      1|{
  508|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  509|       |
  510|      1|	object_class->nickname = "jpegsave_mime";
  511|      1|	object_class->description = _("save image to jpeg mime");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  512|      1|	object_class->build = vips_foreign_save_jpeg_mime_build;
  513|      1|}

nsgif_destroy:
 1384|    748|{
 1385|    748|	if (gif == NULL) {
  ------------------
  |  Branch (1385:6): [True: 0, False: 748]
  ------------------
 1386|      0|		return;
 1387|      0|	}
 1388|       |
 1389|       |	/* Release all our memory blocks */
 1390|    748|	if (gif->frame_image) {
  ------------------
  |  Branch (1390:6): [True: 345, False: 403]
  ------------------
 1391|    345|		assert(gif->bitmap.destroy);
 1392|    345|		gif->bitmap.destroy(gif->frame_image);
 1393|    345|		gif->frame_image = NULL;
 1394|    345|	}
 1395|       |
 1396|    748|	free(gif->frames);
 1397|    748|	gif->frames = NULL;
 1398|       |
 1399|    748|	free(gif->prev_frame);
 1400|    748|	gif->prev_frame = NULL;
 1401|       |
 1402|    748|	lzw_context_destroy(gif->lzw_ctx);
 1403|    748|	gif->lzw_ctx = NULL;
 1404|       |
 1405|    748|	free(gif);
 1406|    748|}
nsgif_create:
 1492|    749|{
 1493|    749|	nsgif_t *gif;
 1494|       |
 1495|    749|	gif = calloc(1, sizeof(*gif));
 1496|    749|	if (gif == NULL) {
  ------------------
  |  Branch (1496:6): [True: 0, False: 749]
  ------------------
 1497|      0|		return NSGIF_ERR_OOM;
 1498|      0|	}
 1499|       |
 1500|    749|	gif->bitmap = *bitmap_vt;
 1501|    749|	gif->decoded_frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    749|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1502|    749|	gif->prev_index = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    749|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1503|       |
 1504|    749|	gif->delay_min = NSGIF_FRAME_DELAY_MIN;
  ------------------
  |  |   21|    749|#define NSGIF_FRAME_DELAY_MIN 2
  ------------------
 1505|    749|	gif->delay_default = NSGIF_FRAME_DELAY_DEFAULT;
  ------------------
  |  |   28|    749|#define NSGIF_FRAME_DELAY_DEFAULT 10
  ------------------
 1506|       |
 1507|    749|	gif->colour_layout = nsgif__bitmap_fmt_to_colour_layout(bitmap_fmt);
 1508|       |
 1509|    749|	*gif_out = gif;
 1510|    749|	return NSGIF_OK;
 1511|    749|}
nsgif_data_scan:
 1612|    749|{
 1613|    749|	const uint8_t *nsgif_data;
 1614|    749|	nsgif_error ret;
 1615|    749|	uint32_t frames;
 1616|       |
 1617|    749|	if (gif->data_complete) {
  ------------------
  |  Branch (1617:6): [True: 0, False: 749]
  ------------------
 1618|      0|		return NSGIF_ERR_DATA_COMPLETE;
 1619|      0|	}
 1620|       |
 1621|       |	/* Initialize values */
 1622|    749|	gif->buf_len = size;
 1623|    749|	gif->buf = data;
 1624|       |
 1625|       |	/* Get our current processing position */
 1626|    749|	nsgif_data = gif->buf + gif->buf_pos;
 1627|       |
 1628|       |	/* See if we should initialise the GIF */
 1629|    749|	if (gif->buf_pos == 0) {
  ------------------
  |  Branch (1629:6): [True: 749, False: 0]
  ------------------
 1630|       |		/* We want everything to be NULL before we start so we've no
 1631|       |		 * chance of freeing bad pointers (paranoia)
 1632|       |		 */
 1633|    749|		gif->frame_image = NULL;
 1634|    749|		gif->frames = NULL;
 1635|    749|		gif->frame_holders = 0;
 1636|       |
 1637|       |		/* The caller may have been lazy and not reset any values */
 1638|    749|		gif->info.frame_count = 0;
 1639|    749|		gif->frame_count_partial = 0;
 1640|    749|		gif->decoded_frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    749|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1641|    749|		gif->frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    749|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1642|       |
 1643|    749|		ret = nsgif__parse_header(gif, &nsgif_data, false);
 1644|    749|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1644:7): [True: 2, False: 747]
  ------------------
 1645|      2|			return ret;
 1646|      2|		}
 1647|       |
 1648|    747|		ret = nsgif__parse_logical_screen_descriptor(gif, &nsgif_data);
 1649|    747|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1649:7): [True: 5, False: 742]
  ------------------
 1650|      5|			return ret;
 1651|      5|		}
 1652|       |
 1653|       |		/* Remember we've done this now */
 1654|    742|		gif->buf_pos = nsgif_data - gif->buf;
 1655|       |
 1656|       |		/* Some broken GIFs report the size as the screen size they
 1657|       |		 * were created in. As such, we detect for the common cases and
 1658|       |		 * set the sizes as 0 if they are found which results in the
 1659|       |		 * GIF being the maximum size of the frames.
 1660|       |		 */
 1661|    742|		if (((gif->info.width == 640) && (gif->info.height == 480)) ||
  ------------------
  |  Branch (1661:8): [True: 8, False: 734]
  |  Branch (1661:36): [True: 0, False: 8]
  ------------------
 1662|    742|		    ((gif->info.width == 640) && (gif->info.height == 512)) ||
  ------------------
  |  Branch (1662:8): [True: 8, False: 734]
  |  Branch (1662:36): [True: 2, False: 6]
  ------------------
 1663|    742|		    ((gif->info.width == 800) && (gif->info.height == 600)) ||
  ------------------
  |  Branch (1663:8): [True: 11, False: 729]
  |  Branch (1663:36): [True: 1, False: 10]
  ------------------
 1664|    742|		    ((gif->info.width == 1024) && (gif->info.height == 768)) ||
  ------------------
  |  Branch (1664:8): [True: 16, False: 723]
  |  Branch (1664:37): [True: 2, False: 14]
  ------------------
 1665|    742|		    ((gif->info.width == 1280) && (gif->info.height == 1024)) ||
  ------------------
  |  Branch (1665:8): [True: 15, False: 722]
  |  Branch (1665:37): [True: 1, False: 14]
  ------------------
 1666|    742|		    ((gif->info.width == 1600) && (gif->info.height == 1200)) ||
  ------------------
  |  Branch (1666:8): [True: 3, False: 733]
  |  Branch (1666:37): [True: 0, False: 3]
  ------------------
 1667|    742|		    ((gif->info.width == 0) || (gif->info.height == 0)) ||
  ------------------
  |  Branch (1667:8): [True: 13, False: 723]
  |  Branch (1667:34): [True: 166, False: 557]
  ------------------
 1668|    742|		    ((gif->info.width > 2048) || (gif->info.height > 2048))) {
  ------------------
  |  Branch (1668:8): [True: 363, False: 194]
  |  Branch (1668:36): [True: 84, False: 110]
  ------------------
 1669|    632|			gif->info.width = 1;
 1670|    632|			gif->info.height = 1;
 1671|    632|		}
 1672|       |
 1673|       |		/* Set the first colour to a value that will never occur in
 1674|       |		 * reality so we know if we've processed it
 1675|       |		*/
 1676|    742|		gif->global_colour_table[0] = NSGIF_PROCESS_COLOURS;
  ------------------
  |  |  153|    742|#define NSGIF_PROCESS_COLOURS 0xaa000000
  ------------------
 1677|       |
 1678|       |		/* Check if the GIF has no frame data (13-byte header + 1-byte
 1679|       |		 * termination block) Although generally useless, the GIF
 1680|       |		 * specification does not expressly prohibit this
 1681|       |		 */
 1682|    742|		if (gif->buf_len == gif->buf_pos + 1) {
  ------------------
  |  Branch (1682:7): [True: 23, False: 719]
  ------------------
 1683|     23|			if (nsgif_data[0] == NSGIF_TRAILER) {
  ------------------
  |  |  168|     23|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1683:8): [True: 1, False: 22]
  ------------------
 1684|      1|				return NSGIF_OK;
 1685|      1|			}
 1686|     23|		}
 1687|    742|	}
 1688|       |
 1689|       |	/*  Do the colour map if we haven't already. As the top byte is always
 1690|       |	 *  0xff or 0x00 depending on the transparency we know if it's been
 1691|       |	 *  filled in.
 1692|       |	 */
 1693|    741|	if (gif->global_colour_table[0] == NSGIF_PROCESS_COLOURS) {
  ------------------
  |  |  153|    741|#define NSGIF_PROCESS_COLOURS 0xaa000000
  ------------------
  |  Branch (1693:6): [True: 741, False: 0]
  ------------------
 1694|       |		/* Check for a global colour map signified by bit 7 */
 1695|    741|		if (gif->info.global_palette) {
  ------------------
  |  Branch (1695:7): [True: 165, False: 576]
  ------------------
 1696|    165|			size_t remaining = gif->buf + gif->buf_len - nsgif_data;
 1697|    165|			size_t used;
 1698|       |
 1699|    165|			ret = nsgif__colour_table_extract(
 1700|    165|					gif->global_colour_table,
 1701|    165|					&gif->colour_layout,
 1702|    165|					gif->colour_table_size,
 1703|    165|					nsgif_data, remaining, &used, true);
 1704|    165|			if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1704:8): [True: 36, False: 129]
  ------------------
 1705|     36|				return ret;
 1706|     36|			}
 1707|       |
 1708|    129|			nsgif_data += used;
 1709|    129|			gif->buf_pos = (nsgif_data - gif->buf);
 1710|    576|		} else {
 1711|       |			/* Create a default colour table with the first two
 1712|       |			 * colours as black and white. */
 1713|    576|			uint8_t *entry = (uint8_t *)gif->global_colour_table;
 1714|       |
 1715|       |			/* Black */
 1716|    576|			entry[gif->colour_layout.r] = 0x00;
 1717|    576|			entry[gif->colour_layout.g] = 0x00;
 1718|    576|			entry[gif->colour_layout.b] = 0x00;
 1719|    576|			entry[gif->colour_layout.a] = 0xFF;
 1720|       |
 1721|    576|			entry += sizeof(uint32_t);
 1722|       |
 1723|       |			/* White */
 1724|    576|			entry[gif->colour_layout.r] = 0xFF;
 1725|    576|			entry[gif->colour_layout.g] = 0xFF;
 1726|    576|			entry[gif->colour_layout.b] = 0xFF;
 1727|    576|			entry[gif->colour_layout.a] = 0xFF;
 1728|       |
 1729|    576|			gif->colour_table_size = 2;
 1730|    576|		}
 1731|       |
 1732|    705|		if (gif->info.global_palette &&
  ------------------
  |  Branch (1732:7): [True: 129, False: 576]
  ------------------
 1733|    705|		    gif->bg_index < gif->colour_table_size) {
  ------------------
  |  Branch (1733:7): [True: 113, False: 16]
  ------------------
 1734|    113|			size_t bg_idx = gif->bg_index;
 1735|    113|			gif->info.background = gif->global_colour_table[bg_idx];
 1736|    592|		} else {
 1737|    592|			gif->info.background = gif->global_colour_table[0];
 1738|    592|		}
 1739|    705|	}
 1740|       |
 1741|    705|	if (gif->lzw_ctx == NULL) {
  ------------------
  |  Branch (1741:6): [True: 705, False: 0]
  ------------------
 1742|    705|		lzw_result res = lzw_context_create(
 1743|    705|				(struct lzw_ctx **)&gif->lzw_ctx);
 1744|    705|		if (res != LZW_OK) {
  ------------------
  |  Branch (1744:7): [True: 0, False: 705]
  ------------------
 1745|      0|			return nsgif__error_from_lzw(res);
 1746|      0|		}
 1747|    705|	}
 1748|       |
 1749|       |	/* Try to initialise all frames. */
 1750|  11.1k|	do {
 1751|  11.1k|		frames = gif->info.frame_count;
 1752|  11.1k|		ret = nsgif__process_frame(gif, frames, false);
 1753|  11.1k|	} while (gif->info.frame_count > frames);
  ------------------
  |  Branch (1753:11): [True: 10.4k, False: 705]
  ------------------
 1754|       |
 1755|    705|	if (ret == NSGIF_ERR_END_OF_DATA && gif->info.frame_count > 0) {
  ------------------
  |  Branch (1755:6): [True: 567, False: 138]
  |  Branch (1755:38): [True: 296, False: 271]
  ------------------
 1756|    296|		ret = NSGIF_OK;
 1757|    296|	}
 1758|       |
 1759|    705|	return ret;
 1760|    705|}
nsgif_data_complete:
 1765|    749|{
 1766|    749|	if (gif->data_complete == false) {
  ------------------
  |  Branch (1766:6): [True: 749, False: 0]
  ------------------
 1767|    749|		uint32_t start = gif->info.frame_count;
 1768|    749|		uint32_t end = gif->frame_count_partial;
 1769|       |
 1770|    803|		for (uint32_t f = start; f < end; f++) {
  ------------------
  |  Branch (1770:28): [True: 88, False: 715]
  ------------------
 1771|     88|			nsgif_frame *frame = &gif->frames[f];
 1772|       |
 1773|     88|			if (frame->lzw_data_length > 0) {
  ------------------
  |  Branch (1773:8): [True: 34, False: 54]
  ------------------
 1774|     34|				frame->info.display = true;
 1775|     34|				gif->info.frame_count = f + 1;
 1776|       |
 1777|     34|				if (f == 0) {
  ------------------
  |  Branch (1777:9): [True: 11, False: 23]
  ------------------
 1778|     11|					frame->info.transparency = true;
 1779|     11|				}
 1780|     34|				break;
 1781|     34|			}
 1782|     88|		}
 1783|    749|	}
 1784|       |
 1785|    749|	gif->data_complete = true;
 1786|    749|}
nsgif_frame_decode:
 1951|    345|{
 1952|    345|	uint32_t start_frame;
 1953|    345|	nsgif_error ret = NSGIF_OK;
 1954|       |
 1955|    345|	if (frame >= gif->info.frame_count) {
  ------------------
  |  Branch (1955:6): [True: 0, False: 345]
  ------------------
 1956|      0|		return NSGIF_ERR_BAD_FRAME;
 1957|      0|	}
 1958|       |
 1959|    345|	if (gif->decoded_frame == frame) {
  ------------------
  |  Branch (1959:6): [True: 0, False: 345]
  ------------------
 1960|      0|		*bitmap = gif->frame_image;
 1961|      0|		return NSGIF_OK;
 1962|       |
 1963|    345|	} else if (gif->decoded_frame >= frame ||
  ------------------
  |  Branch (1963:13): [True: 345, False: 0]
  ------------------
 1964|    345|	           gif->decoded_frame == NSGIF_FRAME_INVALID) {
  ------------------
  |  |  156|      0|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (1964:13): [True: 0, False: 0]
  ------------------
 1965|       |		/* Can skip to first frame or restart. */
 1966|    345|		start_frame = 0;
 1967|    345|	} else {
 1968|      0|		start_frame = nsgif__frame_next(
 1969|      0|				gif, false, gif->decoded_frame);
 1970|      0|	}
 1971|       |
 1972|    590|	for (uint32_t f = start_frame; f <= frame; f++) {
  ------------------
  |  Branch (1972:33): [True: 345, False: 245]
  ------------------
 1973|    345|		ret = nsgif__process_frame(gif, f, true);
 1974|    345|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1974:7): [True: 100, False: 245]
  ------------------
 1975|    100|			return ret;
 1976|    100|		}
 1977|    345|	}
 1978|       |
 1979|    245|	*bitmap = gif->frame_image;
 1980|    245|	return ret;
 1981|    345|}
nsgif_get_info:
 1985|    749|{
 1986|    749|	return &gif->info;
 1987|    749|}
nsgif_get_frame_info:
 1993|  20.9k|{
 1994|  20.9k|	if (frame >= gif->info.frame_count) {
  ------------------
  |  Branch (1994:6): [True: 0, False: 20.9k]
  ------------------
 1995|      0|		return NULL;
 1996|      0|	}
 1997|       |
 1998|  20.9k|	return &gif->frames[frame].info;
 1999|  20.9k|}
nsgif_global_palette:
 2006|    650|{
 2007|    650|	size_t len = sizeof(*table) * NSGIF_MAX_COLOURS;
  ------------------
  |  |   27|    650|#define NSGIF_MAX_COLOURS 256
  ------------------
 2008|       |
 2009|    650|	memcpy(table, gif->global_colour_table, len);
 2010|    650|	*entries = gif->colour_table_size;
 2011|    650|}
nsgif_local_palette:
 2019|  18.5k|{
 2020|  18.5k|	const nsgif_frame *f;
 2021|       |
 2022|  18.5k|	if (frame >= gif->frame_count_partial) {
  ------------------
  |  Branch (2022:6): [True: 0, False: 18.5k]
  ------------------
 2023|      0|		return false;
 2024|      0|	}
 2025|       |
 2026|  18.5k|	f = &gif->frames[frame];
 2027|  18.5k|	if (f->info.local_palette == false) {
  ------------------
  |  Branch (2027:6): [True: 12.1k, False: 6.36k]
  ------------------
 2028|  12.1k|		return false;
 2029|  12.1k|	}
 2030|       |
 2031|  6.36k|	*entries = 2 << (f->flags & NSGIF_COLOUR_TABLE_SIZE_MASK);
  ------------------
  |  |  166|  6.36k|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 2032|  6.36k|	nsgif__colour_table_decode(table, &gif->colour_layout,
 2033|  6.36k|			*entries, gif->buf + f->colour_table_offset);
 2034|       |
 2035|  6.36k|	return true;
 2036|  18.5k|}
nsgif_strerror:
 2040|    535|{
 2041|    535|	static const char *const str[] = {
 2042|    535|		[NSGIF_OK]                = "Success",
 2043|    535|		[NSGIF_ERR_OOM]           = "Out of memory",
 2044|    535|		[NSGIF_ERR_DATA]          = "Invalid source data",
 2045|    535|		[NSGIF_ERR_BAD_FRAME]     = "Requested frame does not exist",
 2046|    535|		[NSGIF_ERR_DATA_FRAME]    = "Invalid frame data",
 2047|    535|		[NSGIF_ERR_END_OF_DATA]   = "Unexpected end of GIF source data",
 2048|    535|		[NSGIF_ERR_DATA_COMPLETE] = "Can't add data to completed GIF",
 2049|    535|		[NSGIF_ERR_FRAME_DISPLAY] = "Frame can't be displayed",
 2050|    535|		[NSGIF_ERR_ANIMATION_END] = "Animation complete",
 2051|    535|	};
 2052|       |
 2053|    535|	if (err >= NSGIF_ARRAY_LEN(str) || str[err] == NULL) {
  ------------------
  |  |  139|  1.07k|#define NSGIF_ARRAY_LEN(_a) ((sizeof(_a)) / (sizeof(*_a)))
  ------------------
  |  Branch (2053:6): [True: 0, False: 535]
  |  Branch (2053:37): [True: 0, False: 535]
  ------------------
 2054|      0|		return "Unknown error";
 2055|      0|	}
 2056|       |
 2057|    535|	return str[err];
 2058|    535|}
gif.c:nsgif__bitmap_fmt_to_colour_layout:
 1424|    749|{
 1425|    749|	bool le = nsgif__host_is_little_endian();
 1426|       |
 1427|       |	/* Map endian-dependant formats to byte-wise format for the host. */
 1428|    749|	switch (bitmap_fmt) {
 1429|      0|	case NSGIF_BITMAP_FMT_RGBA8888:
  ------------------
  |  Branch (1429:2): [True: 0, False: 749]
  ------------------
 1430|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8B8G8R8
  ------------------
  |  Branch (1430:16): [True: 0, False: 0]
  ------------------
 1431|      0|		                  : NSGIF_BITMAP_FMT_R8G8B8A8;
 1432|      0|		break;
 1433|      0|	case NSGIF_BITMAP_FMT_BGRA8888:
  ------------------
  |  Branch (1433:2): [True: 0, False: 749]
  ------------------
 1434|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8R8G8B8
  ------------------
  |  Branch (1434:16): [True: 0, False: 0]
  ------------------
 1435|      0|		                  : NSGIF_BITMAP_FMT_B8G8R8A8;
 1436|      0|		break;
 1437|      0|	case NSGIF_BITMAP_FMT_ARGB8888:
  ------------------
  |  Branch (1437:2): [True: 0, False: 749]
  ------------------
 1438|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_B8G8R8A8
  ------------------
  |  Branch (1438:16): [True: 0, False: 0]
  ------------------
 1439|      0|		                  : NSGIF_BITMAP_FMT_A8R8G8B8;
 1440|      0|		break;
 1441|      0|	case NSGIF_BITMAP_FMT_ABGR8888:
  ------------------
  |  Branch (1441:2): [True: 0, False: 749]
  ------------------
 1442|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_R8G8B8A8
  ------------------
  |  Branch (1442:16): [True: 0, False: 0]
  ------------------
 1443|      0|		                  : NSGIF_BITMAP_FMT_A8B8G8R8;
 1444|      0|		break;
 1445|    749|	default:
  ------------------
  |  Branch (1445:2): [True: 749, False: 0]
  ------------------
 1446|    749|		break;
 1447|    749|	}
 1448|       |
 1449|       |	/* Set up colour component order for bitmap format. */
 1450|    749|	switch (bitmap_fmt) {
 1451|      0|	default:
  ------------------
  |  Branch (1451:2): [True: 0, False: 749]
  ------------------
 1452|       |		/* Fall through. */
 1453|    749|	case NSGIF_BITMAP_FMT_R8G8B8A8:
  ------------------
  |  Branch (1453:2): [True: 749, False: 0]
  ------------------
 1454|    749|		return (struct nsgif_colour_layout) {
 1455|    749|			.r = 0,
 1456|    749|			.g = 1,
 1457|    749|			.b = 2,
 1458|    749|			.a = 3,
 1459|    749|		};
 1460|       |
 1461|      0|	case NSGIF_BITMAP_FMT_B8G8R8A8:
  ------------------
  |  Branch (1461:2): [True: 0, False: 749]
  ------------------
 1462|      0|		return (struct nsgif_colour_layout) {
 1463|      0|			.b = 0,
 1464|      0|			.g = 1,
 1465|      0|			.r = 2,
 1466|      0|			.a = 3,
 1467|      0|		};
 1468|       |
 1469|      0|	case NSGIF_BITMAP_FMT_A8R8G8B8:
  ------------------
  |  Branch (1469:2): [True: 0, False: 749]
  ------------------
 1470|      0|		return (struct nsgif_colour_layout) {
 1471|      0|			.a = 0,
 1472|      0|			.r = 1,
 1473|      0|			.g = 2,
 1474|      0|			.b = 3,
 1475|      0|		};
 1476|       |
 1477|      0|	case NSGIF_BITMAP_FMT_A8B8G8R8:
  ------------------
  |  Branch (1477:2): [True: 0, False: 749]
  ------------------
 1478|      0|		return (struct nsgif_colour_layout) {
 1479|      0|			.a = 0,
 1480|      0|			.b = 1,
 1481|      0|			.g = 2,
 1482|      0|			.r = 3,
 1483|      0|		};
 1484|    749|	}
 1485|    749|}
gif.c:nsgif__host_is_little_endian:
 1416|    749|{
 1417|    749|	const uint16_t test = 1;
 1418|       |
 1419|    749|	return ((const uint8_t *) &test)[0];
 1420|    749|}
gif.c:nsgif__parse_header:
 1540|    749|{
 1541|    749|	const uint8_t *data = *pos;
 1542|    749|	size_t len = gif->buf + gif->buf_len - data;
 1543|       |
 1544|    749|	if (len < 6) {
  ------------------
  |  Branch (1544:6): [True: 2, False: 747]
  ------------------
 1545|      2|		return NSGIF_ERR_END_OF_DATA;
 1546|      2|	}
 1547|       |
 1548|    747|	if (strncmp((const char *) data, "GIF", 3) != 0) {
  ------------------
  |  Branch (1548:6): [True: 0, False: 747]
  ------------------
 1549|      0|		return NSGIF_ERR_DATA;
 1550|      0|	}
 1551|    747|	data += 3;
 1552|       |
 1553|    747|	if (strict == true) {
  ------------------
  |  Branch (1553:6): [True: 0, False: 747]
  ------------------
 1554|      0|		if ((strncmp((const char *) data, "87a", 3) != 0) &&
  ------------------
  |  Branch (1554:7): [True: 0, False: 0]
  ------------------
 1555|      0|		    (strncmp((const char *) data, "89a", 3) != 0)) {
  ------------------
  |  Branch (1555:7): [True: 0, False: 0]
  ------------------
 1556|      0|			return NSGIF_ERR_DATA;
 1557|      0|		}
 1558|      0|	}
 1559|    747|	data += 3;
 1560|       |
 1561|    747|	*pos = data;
 1562|    747|	return NSGIF_OK;
 1563|    747|}
gif.c:nsgif__parse_logical_screen_descriptor:
 1587|    747|{
 1588|    747|	const uint8_t *data = *pos;
 1589|    747|	size_t len = gif->buf + gif->buf_len - data;
 1590|       |
 1591|    747|	if (len < 7) {
  ------------------
  |  Branch (1591:6): [True: 5, False: 742]
  ------------------
 1592|      5|		return NSGIF_ERR_END_OF_DATA;
 1593|      5|	}
 1594|       |
 1595|    742|	gif->info.width = data[0] | (data[1] << 8);
 1596|    742|	gif->info.height = data[2] | (data[3] << 8);
 1597|    742|	gif->info.global_palette = data[4] & NSGIF_COLOUR_TABLE_MASK;
  ------------------
  |  |  165|    742|#define NSGIF_COLOUR_TABLE_MASK 0x80
  ------------------
 1598|    742|	gif->colour_table_size = 2 << (data[4] & NSGIF_COLOUR_TABLE_SIZE_MASK);
  ------------------
  |  |  166|    742|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 1599|    742|	gif->bg_index = data[5];
 1600|    742|	gif->aspect_ratio = data[6];
 1601|    742|	gif->info.loop_max = 1;
 1602|       |
 1603|    742|	*pos += 7;
 1604|    742|	return NSGIF_OK;
 1605|    747|}
gif.c:nsgif__colour_table_extract:
 1115|  3.45k|{
 1116|  3.45k|	if (data_len < colour_table_entries * 3) {
  ------------------
  |  Branch (1116:6): [True: 55, False: 3.40k]
  ------------------
 1117|     55|		return NSGIF_ERR_END_OF_DATA;
 1118|     55|	}
 1119|       |
 1120|  3.40k|	if (decode) {
  ------------------
  |  Branch (1120:6): [True: 149, False: 3.25k]
  ------------------
 1121|    149|		nsgif__colour_table_decode(colour_table, layout,
 1122|    149|				colour_table_entries, data);
 1123|    149|	}
 1124|       |
 1125|  3.40k|	*used = colour_table_entries * 3;
 1126|  3.40k|	return NSGIF_OK;
 1127|  3.45k|}
gif.c:nsgif__error_from_lzw:
  177|    148|{
  178|    148|	static const nsgif_error g_res[] = {
  179|    148|		[LZW_OK]        = NSGIF_OK,
  180|    148|		[LZW_NO_MEM]    = NSGIF_ERR_OOM,
  181|    148|		[LZW_OK_EOD]    = NSGIF_ERR_END_OF_DATA,
  182|    148|		[LZW_NO_DATA]   = NSGIF_ERR_END_OF_DATA,
  183|    148|		[LZW_EOI_CODE]  = NSGIF_ERR_DATA_FRAME,
  184|    148|		[LZW_BAD_ICODE] = NSGIF_ERR_DATA_FRAME,
  185|    148|		[LZW_BAD_CODE]  = NSGIF_ERR_DATA_FRAME,
  186|    148|	};
  187|    148|	assert(l_res != LZW_BAD_PARAM);
  188|    148|	assert(l_res != LZW_NO_COLOUR);
  189|    148|	return g_res[l_res];
  190|    148|}
gif.c:nsgif__process_frame:
 1315|  11.4k|{
 1316|  11.4k|	nsgif_error ret;
 1317|  11.4k|	const uint8_t *pos;
 1318|  11.4k|	const uint8_t *end;
 1319|  11.4k|	struct nsgif_frame *frame;
 1320|       |
 1321|  11.4k|	frame = nsgif__get_frame(gif, frame_idx);
 1322|  11.4k|	if (frame == NULL) {
  ------------------
  |  Branch (1322:6): [True: 0, False: 11.4k]
  ------------------
 1323|      0|		return NSGIF_ERR_OOM;
 1324|      0|	}
 1325|       |
 1326|  11.4k|	end = gif->buf + gif->buf_len;
 1327|       |
 1328|  11.4k|	if (decode) {
  ------------------
  |  Branch (1328:6): [True: 345, False: 11.1k]
  ------------------
 1329|    345|		pos = gif->buf + frame->frame_offset;
 1330|       |
 1331|       |		/* Ensure this frame is supposed to be decoded */
 1332|    345|		if (frame->info.display == false) {
  ------------------
  |  Branch (1332:7): [True: 0, False: 345]
  ------------------
 1333|      0|			return NSGIF_OK;
 1334|      0|		}
 1335|       |
 1336|       |		/* Ensure the frame is in range to decode */
 1337|    345|		if (frame_idx > gif->frame_count_partial) {
  ------------------
  |  Branch (1337:7): [True: 0, False: 345]
  ------------------
 1338|      0|			return NSGIF_ERR_END_OF_DATA;
 1339|      0|		}
 1340|       |
 1341|       |		/* Done if frame is already decoded */
 1342|    345|		if (frame_idx == gif->decoded_frame) {
  ------------------
  |  Branch (1342:7): [True: 0, False: 345]
  ------------------
 1343|      0|			return NSGIF_OK;
 1344|      0|		}
 1345|  11.1k|	} else {
 1346|  11.1k|		pos = gif->buf + gif->buf_pos;
 1347|       |
 1348|       |		/* Check if we've finished */
 1349|  11.1k|		if (pos < end && pos[0] == NSGIF_TRAILER) {
  ------------------
  |  |  168|  11.0k|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1349:7): [True: 11.0k, False: 89]
  |  Branch (1349:20): [True: 14, False: 11.0k]
  ------------------
 1350|     14|			return NSGIF_OK;
 1351|     14|		}
 1352|  11.1k|	}
 1353|       |
 1354|  11.4k|	ret = nsgif__parse_frame_extensions(gif, frame, &pos, !decode);
 1355|  11.4k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1355:6): [True: 116, False: 11.3k]
  ------------------
 1356|    116|		goto cleanup;
 1357|    116|	}
 1358|       |
 1359|  11.3k|	ret = nsgif__parse_image_descriptor(gif, frame, &pos, !decode);
 1360|  11.3k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1360:6): [True: 468, False: 10.8k]
  ------------------
 1361|    468|		goto cleanup;
 1362|    468|	}
 1363|       |
 1364|  10.8k|	ret = nsgif__parse_colour_table(gif, frame, &pos, decode);
 1365|  10.8k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1365:6): [True: 19, False: 10.8k]
  ------------------
 1366|     19|		goto cleanup;
 1367|     19|	}
 1368|       |
 1369|  10.8k|	ret = nsgif__parse_image_data(gif, frame, &pos, decode);
 1370|  10.8k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1370:6): [True: 185, False: 10.6k]
  ------------------
 1371|    185|		goto cleanup;
 1372|    185|	}
 1373|       |
 1374|  11.4k|cleanup:
 1375|  11.4k|	if (!decode) {
  ------------------
  |  Branch (1375:6): [True: 11.1k, False: 345]
  ------------------
 1376|  11.1k|		gif->buf_pos = pos - gif->buf;
 1377|  11.1k|	}
 1378|       |
 1379|  11.4k|	return ret;
 1380|  10.8k|}
gif.c:nsgif__get_frame:
 1268|  11.4k|{
 1269|  11.4k|	struct nsgif_frame *frame;
 1270|       |
 1271|  11.4k|	if (gif->frame_holders > frame_idx) {
  ------------------
  |  Branch (1271:6): [True: 345, False: 11.1k]
  ------------------
 1272|    345|		frame = &gif->frames[frame_idx];
 1273|  11.1k|	} else {
 1274|       |		/* Allocate more memory */
 1275|  11.1k|		size_t count = frame_idx + 1;
 1276|  11.1k|		struct nsgif_frame *temp;
 1277|       |
 1278|  11.1k|		temp = realloc(gif->frames, count * sizeof(*frame));
 1279|  11.1k|		if (temp == NULL) {
  ------------------
  |  Branch (1279:7): [True: 0, False: 11.1k]
  ------------------
 1280|      0|			return NULL;
 1281|      0|		}
 1282|  11.1k|		gif->frames = temp;
 1283|  11.1k|		gif->frame_holders = count;
 1284|       |
 1285|  11.1k|		frame = &gif->frames[frame_idx];
 1286|       |
 1287|  11.1k|		frame->info.local_palette = false;
 1288|  11.1k|		frame->info.transparency = false;
 1289|  11.1k|		frame->info.display = false;
 1290|  11.1k|		frame->info.disposal = 0;
 1291|  11.1k|		frame->info.delay = 10;
 1292|       |
 1293|  11.1k|		frame->transparency_index = NSGIF_NO_TRANSPARENCY;
  ------------------
  |  |  162|  11.1k|#define NSGIF_NO_TRANSPARENCY (0xFFFFFFFFu)
  ------------------
 1294|  11.1k|		frame->frame_offset = gif->buf_pos;
 1295|  11.1k|		frame->redraw_required = false;
 1296|  11.1k|		frame->lzw_data_length = 0;
 1297|  11.1k|		frame->decoded = false;
 1298|  11.1k|	}
 1299|       |
 1300|  11.4k|	return frame;
 1301|  11.4k|}
gif.c:nsgif__parse_frame_extensions:
  893|  11.4k|{
  894|  11.4k|	enum {
  895|  11.4k|		GIF_EXT_INTRODUCER      = 0x21,
  896|  11.4k|		GIF_EXT_GRAPHIC_CONTROL = 0xf9,
  897|  11.4k|		GIF_EXT_COMMENT         = 0xfe,
  898|  11.4k|		GIF_EXT_PLAIN_TEXT      = 0x01,
  899|  11.4k|		GIF_EXT_APPLICATION     = 0xff,
  900|  11.4k|	};
  901|  11.4k|	const uint8_t *nsgif_data = *pos;
  902|  11.4k|	const uint8_t *nsgif_end = gif->buf + gif->buf_len;
  903|  11.4k|	int nsgif_bytes = nsgif_end - nsgif_data;
  904|       |
  905|       |	/* Initialise the extensions */
  906|  15.7k|	while (nsgif_bytes > 0 && nsgif_data[0] == GIF_EXT_INTRODUCER) {
  ------------------
  |  Branch (906:9): [True: 15.6k, False: 111]
  |  Branch (906:28): [True: 4.38k, False: 11.2k]
  ------------------
  907|  4.38k|		bool block_step = true;
  908|  4.38k|		nsgif_error ret;
  909|       |
  910|  4.38k|		nsgif_data++;
  911|  4.38k|		nsgif_bytes--;
  912|       |
  913|  4.38k|		if (nsgif_bytes == 0) {
  ------------------
  |  Branch (913:7): [True: 2, False: 4.38k]
  ------------------
  914|      2|			return NSGIF_ERR_END_OF_DATA;
  915|      2|		}
  916|       |
  917|       |		/* Switch on extension label */
  918|  4.38k|		switch (nsgif_data[0]) {
  919|  1.15k|		case GIF_EXT_GRAPHIC_CONTROL:
  ------------------
  |  Branch (919:3): [True: 1.15k, False: 3.23k]
  ------------------
  920|  1.15k|			if (decode) {
  ------------------
  |  Branch (920:8): [True: 1.10k, False: 48]
  ------------------
  921|  1.10k|				ret = nsgif__parse_extension_graphic_control(
  922|  1.10k|						frame,
  923|  1.10k|						nsgif_data,
  924|  1.10k|						nsgif_bytes);
  925|  1.10k|				if (ret != NSGIF_OK) {
  ------------------
  |  Branch (925:9): [True: 1, False: 1.10k]
  ------------------
  926|      1|					return ret;
  927|      1|				}
  928|  1.10k|			}
  929|  1.15k|			break;
  930|       |
  931|  2.31k|		case GIF_EXT_APPLICATION:
  ------------------
  |  Branch (931:3): [True: 2.31k, False: 2.06k]
  ------------------
  932|  2.31k|			if (decode) {
  ------------------
  |  Branch (932:8): [True: 2.20k, False: 117]
  ------------------
  933|  2.20k|				ret = nsgif__parse_extension_application(
  934|  2.20k|						gif, nsgif_data, nsgif_bytes);
  935|  2.20k|				if (ret != NSGIF_OK) {
  ------------------
  |  Branch (935:9): [True: 20, False: 2.18k]
  ------------------
  936|     20|					return ret;
  937|     20|				}
  938|  2.20k|			}
  939|  2.29k|			break;
  940|       |
  941|  2.29k|		case GIF_EXT_COMMENT:
  ------------------
  |  Branch (941:3): [True: 723, False: 3.66k]
  ------------------
  942|       |			/* Move the pointer to the first data sub-block Skip 1
  943|       |			 * byte for the extension label. */
  944|    723|			++nsgif_data;
  945|    723|			block_step = false;
  946|    723|			break;
  947|       |
  948|    191|		default:
  ------------------
  |  Branch (948:3): [True: 191, False: 4.19k]
  ------------------
  949|    191|			break;
  950|  4.38k|		}
  951|       |
  952|  4.36k|		if (block_step) {
  ------------------
  |  Branch (952:7): [True: 3.64k, False: 723]
  ------------------
  953|       |			/* Move the pointer to the first data sub-block Skip 2
  954|       |			 * bytes for the extension label and size fields Skip
  955|       |			 * the extension size itself
  956|       |			 */
  957|  3.64k|			if (nsgif_bytes < 2) {
  ------------------
  |  Branch (957:8): [True: 2, False: 3.64k]
  ------------------
  958|      2|				return NSGIF_ERR_END_OF_DATA;
  959|      2|			}
  960|  3.64k|			nsgif_data += 2 + nsgif_data[1];
  961|  3.64k|		}
  962|       |
  963|       |		/* Repeatedly skip blocks until we get a zero block or run out
  964|       |		 * of data.  This data is ignored by this gif decoder. */
  965|  19.9k|		while (nsgif_data < nsgif_end && nsgif_data[0] != NSGIF_BLOCK_TERMINATOR) {
  ------------------
  |  |  167|  19.9k|#define NSGIF_BLOCK_TERMINATOR 0x00
  ------------------
  |  Branch (965:10): [True: 19.9k, False: 21]
  |  Branch (965:36): [True: 15.7k, False: 4.25k]
  ------------------
  966|  15.7k|			nsgif_data += nsgif_data[0] + 1;
  967|  15.7k|			if (nsgif_data >= nsgif_end) {
  ------------------
  |  Branch (967:8): [True: 91, False: 15.6k]
  ------------------
  968|     91|				return NSGIF_ERR_END_OF_DATA;
  969|     91|			}
  970|  15.7k|		}
  971|  4.27k|		nsgif_data++;
  972|  4.27k|		nsgif_bytes = nsgif_end - nsgif_data;
  973|  4.27k|	}
  974|       |
  975|  11.3k|	if (nsgif_data > nsgif_end) {
  ------------------
  |  Branch (975:6): [True: 21, False: 11.3k]
  ------------------
  976|     21|		nsgif_data = nsgif_end;
  977|     21|	}
  978|       |
  979|       |	/* Set buffer position and return */
  980|  11.3k|	*pos = nsgif_data;
  981|  11.3k|	return NSGIF_OK;
  982|  11.4k|}
gif.c:nsgif__parse_extension_graphic_control:
  752|  1.10k|{
  753|  1.10k|	enum {
  754|  1.10k|		GIF_MASK_TRANSPARENCY = 0x01,
  755|  1.10k|		GIF_MASK_DISPOSAL     = 0x1c,
  756|  1.10k|	};
  757|       |
  758|       |	/* 6-byte Graphic Control Extension is:
  759|       |	 *
  760|       |	 *  +0  CHAR    Graphic Control Label
  761|       |	 *  +1  CHAR    Block Size
  762|       |	 *  +2  CHAR    __Packed Fields__
  763|       |	 *              3BITS   Reserved
  764|       |	 *              3BITS   Disposal Method
  765|       |	 *              1BIT    User Input Flag
  766|       |	 *              1BIT    Transparent Color Flag
  767|       |	 *  +3  SHORT   Delay Time
  768|       |	 *  +5  CHAR    Transparent Color Index
  769|       |	 */
  770|  1.10k|	if (len < 6) {
  ------------------
  |  Branch (770:6): [True: 1, False: 1.10k]
  ------------------
  771|      1|		return NSGIF_ERR_END_OF_DATA;
  772|      1|	}
  773|       |
  774|  1.10k|	frame->info.delay = data[3] | (data[4] << 8);
  775|       |
  776|  1.10k|	if (data[2] & GIF_MASK_TRANSPARENCY) {
  ------------------
  |  Branch (776:6): [True: 821, False: 284]
  ------------------
  777|    821|		frame->info.transparency = true;
  778|    821|		frame->transparency_index = data[5];
  779|    821|	}
  780|       |
  781|  1.10k|	frame->info.disposal = ((data[2] & GIF_MASK_DISPOSAL) >> 2);
  782|       |	/* I have encountered documentation and GIFs in the
  783|       |	 * wild that use 0x04 to restore the previous frame,
  784|       |	 * rather than the officially documented 0x03.  I
  785|       |	 * believe some (older?)  software may even actually
  786|       |	 * export this way.  We handle this as a type of
  787|       |	 * "quirks" mode. */
  788|  1.10k|	if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_QUIRK) {
  ------------------
  |  Branch (788:6): [True: 17, False: 1.08k]
  ------------------
  789|     17|		frame->info.disposal = NSGIF_DISPOSAL_RESTORE_PREV;
  790|     17|	}
  791|       |
  792|       |	/* if we are clearing the background then we need to
  793|       |	 * redraw enough to cover the previous frame too. */
  794|  1.10k|	frame->redraw_required =
  795|  1.10k|			frame->info.disposal == NSGIF_DISPOSAL_RESTORE_BG ||
  ------------------
  |  Branch (795:4): [True: 806, False: 299]
  ------------------
  796|  1.10k|			frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV;
  ------------------
  |  Branch (796:4): [True: 17, False: 282]
  ------------------
  797|       |
  798|  1.10k|	return NSGIF_OK;
  799|  1.10k|}
gif.c:nsgif__parse_extension_application:
  842|  2.20k|{
  843|       |	/* 14-byte+ Application Extension is:
  844|       |	 *
  845|       |	 *  +0    CHAR    Application Extension Label
  846|       |	 *  +1    CHAR    Block Size
  847|       |	 *  +2    8CHARS  Application Identifier
  848|       |	 *  +10   3CHARS  Appl. Authentication Code
  849|       |	 *  +13   1-256   Application Data (Data sub-blocks)
  850|       |	 */
  851|  2.20k|	if (len < 17) {
  ------------------
  |  Branch (851:6): [True: 20, False: 2.18k]
  ------------------
  852|     20|		return NSGIF_ERR_END_OF_DATA;
  853|     20|	}
  854|       |
  855|  2.18k|	if (nsgif__app_ext_is_loop_count(data, len)) {
  ------------------
  |  Branch (855:6): [True: 1.51k, False: 668]
  ------------------
  856|  1.51k|		enum {
  857|  1.51k|			EXT_LOOP_COUNT_SUB_BLOCK_SIZE = 0x03,
  858|  1.51k|			EXT_LOOP_COUNT_SUB_BLOCK_ID   = 0x01,
  859|  1.51k|		};
  860|  1.51k|		if ((data[13] == EXT_LOOP_COUNT_SUB_BLOCK_SIZE) &&
  ------------------
  |  Branch (860:7): [True: 1.33k, False: 183]
  ------------------
  861|  1.51k|		    (data[14] == EXT_LOOP_COUNT_SUB_BLOCK_ID)) {
  ------------------
  |  Branch (861:7): [True: 1.24k, False: 82]
  ------------------
  862|  1.24k|			gif->info.loop_max = data[15] | (data[16] << 8);
  863|       |
  864|       |			/* The value in the source data means repeat N times
  865|       |			 * after the first implied play. A value of zero has
  866|       |			 * the special meaning of loop forever. (The only way
  867|       |			 * to play the animation once is  not to have this
  868|       |			 * extension at all. */
  869|  1.24k|			if (gif->info.loop_max > 0) {
  ------------------
  |  Branch (869:8): [True: 152, False: 1.09k]
  ------------------
  870|    152|				gif->info.loop_max++;
  871|    152|			}
  872|  1.24k|		}
  873|  1.51k|	}
  874|       |
  875|  2.18k|	return NSGIF_OK;
  876|  2.20k|}
gif.c:nsgif__app_ext_is_loop_count:
  811|  2.18k|{
  812|  2.18k|	enum {
  813|  2.18k|		EXT_LOOP_COUNT_BLOCK_SIZE = 0x0b,
  814|  2.18k|	};
  815|       |
  816|  2.18k|	assert(len > 13);
  817|  2.18k|	(void)(len);
  818|       |
  819|  2.18k|	if (data[1] == EXT_LOOP_COUNT_BLOCK_SIZE) {
  ------------------
  |  Branch (819:6): [True: 2.12k, False: 54]
  ------------------
  820|  2.12k|		if (strncmp((const char *)data + 2, "NETSCAPE2.0", 11) == 0 ||
  ------------------
  |  Branch (820:7): [True: 1.50k, False: 627]
  ------------------
  821|  2.12k|		    strncmp((const char *)data + 2, "ANIMEXTS1.0", 11) == 0) {
  ------------------
  |  Branch (821:7): [True: 13, False: 614]
  ------------------
  822|  1.51k|			return true;
  823|  1.51k|		}
  824|  2.12k|	}
  825|       |
  826|    668|	return false;
  827|  2.18k|}
gif.c:nsgif__parse_image_descriptor:
 1012|  11.3k|{
 1013|  11.3k|	const uint8_t *data = *pos;
 1014|  11.3k|	size_t len = gif->buf + gif->buf_len - data;
 1015|  11.3k|	enum {
 1016|  11.3k|		NSGIF_IMAGE_DESCRIPTOR_LEN = 10u,
 1017|  11.3k|		NSGIF_IMAGE_SEPARATOR      = 0x2Cu,
 1018|  11.3k|		NSGIF_MASK_INTERLACE       = 0x40u,
 1019|  11.3k|	};
 1020|       |
 1021|  11.3k|	assert(gif != NULL);
 1022|  11.3k|	assert(frame != NULL);
 1023|       |
 1024|  11.3k|	if (len < NSGIF_IMAGE_DESCRIPTOR_LEN) {
  ------------------
  |  Branch (1024:6): [True: 360, False: 10.9k]
  ------------------
 1025|    360|		return NSGIF_ERR_END_OF_DATA;
 1026|    360|	}
 1027|       |
 1028|  10.9k|	if (decode) {
  ------------------
  |  Branch (1028:6): [True: 10.6k, False: 345]
  ------------------
 1029|  10.6k|		uint32_t x, y, w, h;
 1030|       |
 1031|  10.6k|		if (data[0] != NSGIF_IMAGE_SEPARATOR) {
  ------------------
  |  Branch (1031:7): [True: 108, False: 10.5k]
  ------------------
 1032|    108|			return NSGIF_ERR_DATA_FRAME;
 1033|    108|		}
 1034|       |
 1035|  10.5k|		x = data[1] | (data[2] << 8);
 1036|  10.5k|		y = data[3] | (data[4] << 8);
 1037|  10.5k|		w = data[5] | (data[6] << 8);
 1038|  10.5k|		h = data[7] | (data[8] << 8);
 1039|  10.5k|		frame->flags = data[9];
 1040|       |
 1041|  10.5k|		frame->info.rect.x0 = x;
 1042|  10.5k|		frame->info.rect.y0 = y;
 1043|  10.5k|		frame->info.rect.x1 = x + w;
 1044|  10.5k|		frame->info.rect.y1 = y + h;
 1045|       |
 1046|  10.5k|		frame->info.interlaced = frame->flags & NSGIF_MASK_INTERLACE;
 1047|       |
 1048|       |		/* Allow first frame to grow image dimensions. */
 1049|  10.5k|		if (gif->info.frame_count == 0) {
  ------------------
  |  Branch (1049:7): [True: 467, False: 10.0k]
  ------------------
 1050|    467|			if (x + w > gif->info.width) {
  ------------------
  |  Branch (1050:8): [True: 389, False: 78]
  ------------------
 1051|    389|				gif->info.width = x + w;
 1052|    389|			}
 1053|    467|			if (y + h > gif->info.height) {
  ------------------
  |  Branch (1053:8): [True: 375, False: 92]
  ------------------
 1054|    375|				gif->info.height = y + h;
 1055|    375|			}
 1056|    467|		}
 1057|  10.5k|	}
 1058|       |
 1059|  10.8k|	*pos += NSGIF_IMAGE_DESCRIPTOR_LEN;
 1060|  10.8k|	return NSGIF_OK;
 1061|  10.9k|}
gif.c:nsgif__parse_colour_table:
 1145|  10.8k|{
 1146|  10.8k|	nsgif_error ret;
 1147|  10.8k|	const uint8_t *data = *pos;
 1148|  10.8k|	size_t len = gif->buf + gif->buf_len - data;
 1149|  10.8k|	size_t used_bytes;
 1150|       |
 1151|  10.8k|	assert(gif != NULL);
 1152|  10.8k|	assert(frame != NULL);
 1153|       |
 1154|  10.8k|	if ((frame->flags & NSGIF_COLOUR_TABLE_MASK) == 0) {
  ------------------
  |  |  165|  10.8k|#define NSGIF_COLOUR_TABLE_MASK 0x80
  ------------------
  |  Branch (1154:6): [True: 7.58k, False: 3.29k]
  ------------------
 1155|  7.58k|		gif->colour_table = gif->global_colour_table;
 1156|  7.58k|		return NSGIF_OK;
 1157|  7.58k|	}
 1158|       |
 1159|  3.29k|	if (decode == false) {
  ------------------
  |  Branch (1159:6): [True: 3.27k, False: 20]
  ------------------
 1160|  3.27k|		frame->colour_table_offset = *pos - gif->buf;
 1161|  3.27k|	}
 1162|       |
 1163|  3.29k|	ret = nsgif__colour_table_extract(
 1164|  3.29k|			gif->local_colour_table, &gif->colour_layout,
 1165|  3.29k|			2 << (frame->flags & NSGIF_COLOUR_TABLE_SIZE_MASK),
  ------------------
  |  |  166|  3.29k|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 1166|  3.29k|			data, len, &used_bytes, decode);
 1167|  3.29k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1167:6): [True: 19, False: 3.27k]
  ------------------
 1168|     19|		return ret;
 1169|     19|	}
 1170|  3.27k|	*pos += used_bytes;
 1171|       |
 1172|  3.27k|	if (decode) {
  ------------------
  |  Branch (1172:6): [True: 20, False: 3.25k]
  ------------------
 1173|     20|		gif->colour_table = gif->local_colour_table;
 1174|  3.25k|	} else {
 1175|  3.25k|		frame->info.local_palette = true;
 1176|  3.25k|	}
 1177|       |
 1178|  3.27k|	return NSGIF_OK;
 1179|  3.29k|}
gif.c:nsgif__parse_image_data:
 1197|  10.8k|{
 1198|  10.8k|	const uint8_t *data = *pos;
 1199|  10.8k|	size_t len = gif->buf + gif->buf_len - data;
 1200|  10.8k|	uint32_t frame_idx = frame - gif->frames;
 1201|  10.8k|	uint8_t minimum_code_size;
 1202|  10.8k|	nsgif_error ret;
 1203|       |
 1204|  10.8k|	assert(gif != NULL);
 1205|  10.8k|	assert(frame != NULL);
 1206|       |
 1207|  10.8k|	if (!decode) {
  ------------------
  |  Branch (1207:6): [True: 10.5k, False: 345]
  ------------------
 1208|  10.5k|		gif->frame_count_partial = frame_idx + 1;
 1209|  10.5k|	}
 1210|       |
 1211|       |	/* Ensure sufficient data remains.  A gif trailer or a minimum lzw code
 1212|       |	 * followed by a gif trailer is treated as OK, although without any
 1213|       |	 * image data. */
 1214|  10.8k|	switch (len) {
 1215|  10.8k|		default: if (data[0] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|  10.8k|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1215:3): [True: 10.8k, False: 40]
  |  Branch (1215:16): [True: 1, False: 10.8k]
  ------------------
 1216|  10.8k|			break;
 1217|  10.8k|		case 2: if (data[1] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|     10|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1217:3): [True: 10, False: 10.8k]
  |  Branch (1217:15): [True: 1, False: 9]
  ------------------
 1218|       |			/* Fall through. */
 1219|     19|		case 1: if (data[0] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|     19|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1219:3): [True: 10, False: 10.8k]
  |  Branch (1219:15): [True: 1, False: 18]
  ------------------
 1220|       |			/* Fall through. */
 1221|     38|		case 0: return NSGIF_ERR_END_OF_DATA;
  ------------------
  |  Branch (1221:3): [True: 20, False: 10.8k]
  ------------------
 1222|  10.8k|	}
 1223|       |
 1224|  10.8k|	minimum_code_size = data[0];
 1225|  10.8k|	if (minimum_code_size >= LZW_CODE_MAX) {
  ------------------
  |  |   21|  10.8k|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (1225:6): [True: 13, False: 10.8k]
  ------------------
 1226|     13|		return NSGIF_ERR_DATA_FRAME;
 1227|     13|	}
 1228|       |
 1229|  10.8k|	if (decode) {
  ------------------
  |  Branch (1229:6): [True: 345, False: 10.4k]
  ------------------
 1230|    345|		ret = nsgif__update_bitmap(gif, frame, data, frame_idx);
 1231|  10.4k|	} else {
 1232|  10.4k|		uint32_t block_size = 0;
 1233|       |
 1234|       |		/* Skip the minimum code size. */
 1235|  10.4k|		data++;
 1236|  10.4k|		len--;
 1237|       |
 1238|  62.2k|		while (block_size != 1) {
  ------------------
  |  Branch (1238:10): [True: 51.8k, False: 10.4k]
  ------------------
 1239|  51.8k|			if (len < 1) {
  ------------------
  |  Branch (1239:8): [True: 4, False: 51.8k]
  ------------------
 1240|      4|				return NSGIF_ERR_END_OF_DATA;
 1241|      4|			}
 1242|  51.8k|			block_size = data[0] + 1;
 1243|       |			/* Check if the frame data runs off the end of the file */
 1244|  51.8k|			if (block_size > len) {
  ------------------
  |  Branch (1244:8): [True: 30, False: 51.7k]
  ------------------
 1245|     30|				frame->lzw_data_length += len;
 1246|     30|				return NSGIF_ERR_END_OF_DATA;
 1247|     30|			}
 1248|       |
 1249|  51.7k|			len -= block_size;
 1250|  51.7k|			data += block_size;
 1251|  51.7k|			frame->lzw_data_length += block_size;
 1252|  51.7k|		}
 1253|       |
 1254|  10.4k|		*pos = data;
 1255|       |
 1256|  10.4k|		gif->info.frame_count = frame_idx + 1;
 1257|  10.4k|		gif->frames[frame_idx].info.display = true;
 1258|       |
 1259|  10.4k|		return NSGIF_OK;
 1260|  10.4k|	}
 1261|       |
 1262|    345|	return ret;
 1263|  10.8k|}
gif.c:nsgif__update_bitmap:
  691|    345|{
  692|    345|	nsgif_error ret;
  693|    345|	uint32_t *bitmap;
  694|       |
  695|    345|	gif->decoded_frame = frame_idx;
  696|       |
  697|    345|	bitmap = nsgif__bitmap_get(gif);
  698|    345|	if (bitmap == NULL) {
  ------------------
  |  Branch (698:6): [True: 0, False: 345]
  ------------------
  699|      0|		return NSGIF_ERR_OOM;
  700|      0|	}
  701|       |
  702|       |	/* Handle any bitmap clearing/restoration required before decoding this
  703|       |	 * frame. */
  704|    345|	if (frame_idx == 0 || gif->decoded_frame == NSGIF_FRAME_INVALID) {
  ------------------
  |  |  156|      0|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (704:6): [True: 345, False: 0]
  |  Branch (704:24): [True: 0, False: 0]
  ------------------
  705|    345|		nsgif__restore_bg(gif, NULL, bitmap);
  706|       |
  707|    345|	} else {
  708|      0|		struct nsgif_frame *prev = &gif->frames[frame_idx - 1];
  709|       |
  710|      0|		if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_BG) {
  ------------------
  |  Branch (710:7): [True: 0, False: 0]
  ------------------
  711|      0|			nsgif__restore_bg(gif, prev, bitmap);
  712|       |
  713|      0|		} else if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) {
  ------------------
  |  Branch (713:14): [True: 0, False: 0]
  ------------------
  714|      0|			ret = nsgif__recover_frame(gif, bitmap);
  715|      0|			if (ret != NSGIF_OK) {
  ------------------
  |  Branch (715:8): [True: 0, False: 0]
  ------------------
  716|      0|				nsgif__restore_bg(gif, prev, bitmap);
  717|      0|			}
  718|      0|		}
  719|      0|	}
  720|       |
  721|    345|	if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) {
  ------------------
  |  Branch (721:6): [True: 1, False: 344]
  ------------------
  722|       |		/* Store the previous frame for later restoration */
  723|      1|		nsgif__record_frame(gif, bitmap);
  724|      1|	}
  725|       |
  726|    345|	ret = nsgif__decode(gif, frame, data, bitmap);
  727|       |
  728|    345|	nsgif__bitmap_modified(gif);
  729|       |
  730|    345|	if (!frame->decoded) {
  ------------------
  |  Branch (730:6): [True: 345, False: 0]
  ------------------
  731|    345|		frame->opaque = nsgif__bitmap_get_opaque(gif);
  732|    345|		frame->decoded = true;
  733|    345|	}
  734|    345|	nsgif__bitmap_set_opaque(gif, frame);
  735|       |
  736|    345|	return ret;
  737|    345|}
gif.c:nsgif__bitmap_get:
  227|    346|{
  228|    346|	nsgif_error ret;
  229|       |
  230|       |	/* Make sure we have a buffer to decode to. */
  231|    346|	ret = nsgif__initialise_sprite(gif, gif->info.width, gif->info.height);
  232|    346|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (232:6): [True: 0, False: 346]
  ------------------
  233|      0|		return NULL;
  234|      0|	}
  235|       |
  236|    346|	gif->rowspan = gif->info.width;
  237|    346|	if (gif->bitmap.get_rowspan) {
  ------------------
  |  Branch (237:6): [True: 0, False: 346]
  ------------------
  238|      0|		gif->rowspan = gif->bitmap.get_rowspan(gif->frame_image);
  239|      0|	}
  240|       |
  241|       |	/* Get the frame data */
  242|    346|	assert(gif->bitmap.get_buffer);
  243|    346|	return (void *)gif->bitmap.get_buffer(gif->frame_image);
  244|    346|}
gif.c:nsgif__initialise_sprite:
  204|    346|{
  205|       |	/* Already allocated? */
  206|    346|	if (gif->frame_image) {
  ------------------
  |  Branch (206:6): [True: 1, False: 345]
  ------------------
  207|      1|		return NSGIF_OK;
  208|      1|	}
  209|       |
  210|    345|	assert(gif->bitmap.create);
  211|    345|	gif->frame_image = gif->bitmap.create(width, height);
  212|    345|	if (gif->frame_image == NULL) {
  ------------------
  |  Branch (212:6): [True: 0, False: 345]
  ------------------
  213|      0|		return NSGIF_ERR_OOM;
  214|      0|	}
  215|       |
  216|    345|	return NSGIF_OK;
  217|    345|}
gif.c:nsgif__restore_bg:
  643|    345|{
  644|    345|	size_t pixel_bytes = sizeof(*bitmap);
  645|       |
  646|    345|	if (frame == NULL) {
  ------------------
  |  Branch (646:6): [True: 345, False: 0]
  ------------------
  647|    345|		size_t width  = gif->info.width;
  648|    345|		size_t height = gif->info.height;
  649|       |
  650|    345|		memset(bitmap, NSGIF_TRANSPARENT_COLOUR,
  ------------------
  |  |  159|    345|#define NSGIF_TRANSPARENT_COLOUR 0x00
  ------------------
  651|    345|				width * height * pixel_bytes);
  652|    345|	} else {
  653|      0|		uint32_t width  = frame->info.rect.x1 - frame->info.rect.x0;
  654|      0|		uint32_t height = frame->info.rect.y1 - frame->info.rect.y0;
  655|      0|		uint32_t offset_x = frame->info.rect.x0;
  656|      0|		uint32_t offset_y = frame->info.rect.y0;
  657|       |
  658|      0|		if (frame->info.display == false ||
  ------------------
  |  Branch (658:7): [True: 0, False: 0]
  ------------------
  659|      0|		    frame->info.rect.x0 >= gif->info.width ||
  ------------------
  |  Branch (659:7): [True: 0, False: 0]
  ------------------
  660|      0|		    frame->info.rect.y0 >= gif->info.height) {
  ------------------
  |  Branch (660:7): [True: 0, False: 0]
  ------------------
  661|      0|			return;
  662|      0|		}
  663|       |
  664|      0|		width -= gif__clip(offset_x, width, gif->info.width);
  665|      0|		height -= gif__clip(offset_y, height, gif->info.height);
  666|       |
  667|      0|		if (frame->info.transparency) {
  ------------------
  |  Branch (667:7): [True: 0, False: 0]
  ------------------
  668|      0|			for (uint32_t y = 0; y < height; y++) {
  ------------------
  |  Branch (668:25): [True: 0, False: 0]
  ------------------
  669|      0|				uint32_t *scanline = bitmap + offset_x +
  670|      0|						(offset_y + y) * gif->info.width;
  671|      0|				memset(scanline, NSGIF_TRANSPARENT_COLOUR,
  ------------------
  |  |  159|      0|#define NSGIF_TRANSPARENT_COLOUR 0x00
  ------------------
  672|      0|						width * pixel_bytes);
  673|      0|			}
  674|      0|		} else {
  675|      0|			for (uint32_t y = 0; y < height; y++) {
  ------------------
  |  Branch (675:25): [True: 0, False: 0]
  ------------------
  676|      0|				uint32_t *scanline = bitmap + offset_x +
  677|      0|						(offset_y + y) * gif->info.width;
  678|      0|				for (uint32_t x = 0; x < width; x++) {
  ------------------
  |  Branch (678:26): [True: 0, False: 0]
  ------------------
  679|      0|					scanline[x] = gif->info.background;
  680|      0|				}
  681|      0|			}
  682|      0|		}
  683|      0|	}
  684|    345|}
gif.c:gif__clip:
  409|    568|{
  410|    568|	uint32_t frame_ext = frame_off + frame_dim;
  411|       |
  412|    568|	if (frame_ext <= image_ext) {
  ------------------
  |  Branch (412:6): [True: 568, False: 0]
  ------------------
  413|    568|		return 0;
  414|    568|	}
  415|       |
  416|      0|	return frame_ext - image_ext;
  417|    568|}
gif.c:nsgif__record_frame:
  297|      1|{
  298|      1|	size_t pixel_bytes = sizeof(*bitmap);
  299|      1|	size_t height = gif->info.height;
  300|      1|	size_t width  = gif->info.width;
  301|      1|	uint32_t *prev_frame;
  302|       |
  303|      1|	if (gif->decoded_frame == NSGIF_FRAME_INVALID ||
  ------------------
  |  |  156|      2|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (303:6): [True: 0, False: 1]
  ------------------
  304|      1|	    gif->decoded_frame == gif->prev_index) {
  ------------------
  |  Branch (304:6): [True: 0, False: 1]
  ------------------
  305|       |		/* No frame to copy, or already have this frame recorded. */
  306|      0|		return;
  307|      0|	}
  308|       |
  309|      1|	bitmap = nsgif__bitmap_get(gif);
  310|      1|	if (bitmap == NULL) {
  ------------------
  |  Branch (310:6): [True: 0, False: 1]
  ------------------
  311|      0|		return;
  312|      0|	}
  313|       |
  314|      1|	if (gif->prev_frame == NULL) {
  ------------------
  |  Branch (314:6): [True: 1, False: 0]
  ------------------
  315|      1|		prev_frame = realloc(gif->prev_frame,
  316|      1|				width * height * pixel_bytes);
  317|      1|		if (prev_frame == NULL) {
  ------------------
  |  Branch (317:7): [True: 0, False: 1]
  ------------------
  318|      0|			return;
  319|      0|		}
  320|      1|	} else {
  321|      0|		prev_frame = gif->prev_frame;
  322|      0|	}
  323|       |
  324|      1|	memcpy(prev_frame, bitmap, width * height * pixel_bytes);
  325|       |
  326|      1|	gif->prev_frame  = prev_frame;
  327|      1|	gif->prev_index  = gif->decoded_frame;
  328|      1|}
gif.c:nsgif__decode:
  602|    345|{
  603|    345|	nsgif_error ret;
  604|    345|	uint32_t width  = frame->info.rect.x1 - frame->info.rect.x0;
  605|    345|	uint32_t height = frame->info.rect.y1 - frame->info.rect.y0;
  606|    345|	uint32_t offset_x = frame->info.rect.x0;
  607|    345|	uint32_t offset_y = frame->info.rect.y0;
  608|    345|	uint32_t transparency_index = frame->transparency_index;
  609|    345|	uint32_t *restrict colour_table = gif->colour_table;
  610|       |
  611|    345|	if (frame->info.interlaced == false && offset_x == 0 &&
  ------------------
  |  Branch (611:6): [True: 305, False: 40]
  |  Branch (611:41): [True: 139, False: 166]
  ------------------
  612|    345|			width == gif->info.width &&
  ------------------
  |  Branch (612:4): [True: 119, False: 20]
  ------------------
  613|    345|			width == gif->rowspan) {
  ------------------
  |  Branch (613:4): [True: 119, False: 0]
  ------------------
  614|    119|		ret = nsgif__decode_simple(gif, height, offset_y,
  615|    119|				data, transparency_index,
  616|    119|				frame_data, colour_table);
  617|    226|	} else {
  618|    226|		ret = nsgif__decode_complex(gif, width, height,
  619|    226|				offset_x, offset_y, frame->info.interlaced,
  620|    226|				data, transparency_index,
  621|    226|				frame_data, colour_table);
  622|    226|	}
  623|       |
  624|    345|	if (gif->data_complete && ret == NSGIF_ERR_END_OF_DATA) {
  ------------------
  |  Branch (624:6): [True: 345, False: 0]
  |  Branch (624:28): [True: 48, False: 297]
  ------------------
  625|       |		/* This is all the data there is, so make do. */
  626|     48|		ret = NSGIF_OK;
  627|     48|	}
  628|       |
  629|    345|	return ret;
  630|    345|}
gif.c:nsgif__decode_simple:
  546|    119|{
  547|    119|	uint32_t pixels;
  548|    119|	uint32_t written = 0;
  549|    119|	nsgif_error ret = NSGIF_OK;
  550|    119|	lzw_result res;
  551|       |
  552|    119|	if (offset_y >= gif->info.height) {
  ------------------
  |  Branch (552:6): [True: 3, False: 116]
  ------------------
  553|      3|		return NSGIF_OK;
  554|      3|	}
  555|       |
  556|    116|	height -= gif__clip(offset_y, height, gif->info.height);
  557|       |
  558|    116|	if (height == 0) {
  ------------------
  |  Branch (558:6): [True: 1, False: 115]
  ------------------
  559|      1|		return NSGIF_OK;
  560|      1|	}
  561|       |
  562|       |	/* Initialise the LZW decoding */
  563|    115|	res = lzw_decode_init_map(gif->lzw_ctx, data[0],
  564|    115|			transparency_index, colour_table,
  565|    115|			gif->buf, gif->buf_len,
  566|    115|			data + 1 - gif->buf);
  567|    115|	if (res != LZW_OK) {
  ------------------
  |  Branch (567:6): [True: 23, False: 92]
  ------------------
  568|     23|		return nsgif__error_from_lzw(res);
  569|     23|	}
  570|       |
  571|     92|	frame_data += (offset_y * gif->info.width);
  572|     92|	pixels = gif->info.width * height;
  573|       |
  574|    105|	while (pixels > 0) {
  ------------------
  |  Branch (574:9): [True: 92, False: 13]
  ------------------
  575|     92|		res = lzw_decode_map(gif->lzw_ctx,
  576|     92|				frame_data, pixels, &written);
  577|     92|		pixels -= written;
  578|     92|		frame_data += written;
  579|     92|		if (res != LZW_OK) {
  ------------------
  |  Branch (579:7): [True: 79, False: 13]
  ------------------
  580|       |			/* Unexpected end of frame, try to recover */
  581|     79|			if (res == LZW_OK_EOD || res == LZW_EOI_CODE) {
  ------------------
  |  Branch (581:8): [True: 44, False: 35]
  |  Branch (581:29): [True: 4, False: 31]
  ------------------
  582|     48|				ret = NSGIF_OK;
  583|     48|			} else {
  584|     31|				ret = nsgif__error_from_lzw(res);
  585|     31|			}
  586|     79|			break;
  587|     79|		}
  588|     92|	}
  589|       |
  590|     92|	if (pixels == 0) {
  ------------------
  |  Branch (590:6): [True: 13, False: 79]
  ------------------
  591|     13|		ret = NSGIF_OK;
  592|     13|	}
  593|       |
  594|     92|	return ret;
  595|    115|}
gif.c:nsgif__decode_complex:
  449|    226|{
  450|    226|	lzw_result res;
  451|    226|	nsgif_error ret = NSGIF_OK;
  452|    226|	uint32_t clip_x = gif__clip(offset_x, width, gif->info.width);
  453|    226|	uint32_t clip_y = gif__clip(offset_y, height, gif->info.height);
  454|    226|	const uint8_t *uncompressed;
  455|    226|	uint32_t available = 0;
  456|    226|	uint8_t step = 24;
  457|    226|	uint32_t skip = 0;
  458|    226|	uint32_t y = 0;
  459|       |
  460|    226|	if (offset_x >= gif->info.width ||
  ------------------
  |  Branch (460:6): [True: 19, False: 207]
  ------------------
  461|    226|	    offset_y >= gif->info.height) {
  ------------------
  |  Branch (461:6): [True: 7, False: 200]
  ------------------
  462|     26|		return NSGIF_OK;
  463|     26|	}
  464|       |
  465|    200|	width -= clip_x;
  466|    200|	height -= clip_y;
  467|       |
  468|    200|	if (width == 0 || height == 0) {
  ------------------
  |  Branch (468:6): [True: 11, False: 189]
  |  Branch (468:20): [True: 5, False: 184]
  ------------------
  469|     16|		return NSGIF_OK;
  470|     16|	}
  471|       |
  472|       |	/* Initialise the LZW decoding */
  473|    184|	res = lzw_decode_init(gif->lzw_ctx, data[0],
  474|    184|			gif->buf, gif->buf_len,
  475|    184|			data + 1 - gif->buf);
  476|    184|	if (res != LZW_OK) {
  ------------------
  |  Branch (476:6): [True: 33, False: 151]
  ------------------
  477|     33|		return nsgif__error_from_lzw(res);
  478|     33|	}
  479|       |
  480|  2.13k|	do {
  481|  2.13k|		uint32_t x;
  482|  2.13k|		uint32_t *frame_scanline;
  483|       |
  484|  2.13k|		frame_scanline = frame_data + offset_x +
  485|  2.13k|				(y + offset_y) * gif->rowspan;
  486|       |
  487|  2.13k|		x = width;
  488|  4.26k|		while (x > 0) {
  ------------------
  |  Branch (488:10): [True: 2.26k, False: 2.00k]
  ------------------
  489|  2.26k|			unsigned row_available;
  490|  2.42k|			while (available == 0) {
  ------------------
  |  Branch (490:11): [True: 292, False: 2.13k]
  ------------------
  491|    292|				if (res != LZW_OK) {
  ------------------
  |  Branch (491:9): [True: 131, False: 161]
  ------------------
  492|       |					/* Unexpected end of frame, try to recover */
  493|    131|					if (res == LZW_OK_EOD ||
  ------------------
  |  Branch (493:10): [True: 68, False: 63]
  ------------------
  494|    131|					    res == LZW_EOI_CODE) {
  ------------------
  |  Branch (494:10): [True: 2, False: 61]
  ------------------
  495|     70|						ret = NSGIF_OK;
  496|     70|					} else {
  497|     61|						ret = nsgif__error_from_lzw(res);
  498|     61|					}
  499|    131|					return ret;
  500|    131|				}
  501|    161|				res = lzw_decode(gif->lzw_ctx,
  502|    161|						&uncompressed, &available);
  503|       |
  504|    161|				if (available == 0) {
  ------------------
  |  Branch (504:9): [True: 1, False: 160]
  ------------------
  505|      1|					return NSGIF_OK;
  506|      1|				}
  507|    160|				gif__jump_data(&skip, &available, &uncompressed);
  508|    160|			}
  509|       |
  510|  2.13k|			row_available = x < available ? x : available;
  ------------------
  |  Branch (510:20): [True: 1.99k, False: 141]
  ------------------
  511|  2.13k|			x -= row_available;
  512|  2.13k|			available -= row_available;
  513|  2.13k|			if (transparency_index > 0xFF) {
  ------------------
  |  Branch (513:8): [True: 2.13k, False: 0]
  ------------------
  514|  84.3k|				while (row_available-- > 0) {
  ------------------
  |  Branch (514:12): [True: 82.2k, False: 2.13k]
  ------------------
  515|  82.2k|					*frame_scanline++ =
  516|  82.2k|						colour_table[*uncompressed++];
  517|  82.2k|				}
  518|  2.13k|			} else {
  519|      0|				while (row_available-- > 0) {
  ------------------
  |  Branch (519:12): [True: 0, False: 0]
  ------------------
  520|      0|					register uint32_t colour;
  521|      0|					colour = *uncompressed++;
  522|      0|					if (colour != transparency_index) {
  ------------------
  |  Branch (522:10): [True: 0, False: 0]
  ------------------
  523|      0|						*frame_scanline =
  524|      0|							colour_table[colour];
  525|      0|					}
  526|      0|					frame_scanline++;
  527|      0|				}
  528|      0|			}
  529|  2.13k|		}
  530|       |
  531|  2.00k|		skip = clip_x;
  532|  2.00k|		gif__jump_data(&skip, &available, &uncompressed);
  533|  2.00k|	} while (nsgif__next_row(interlace, height, &y, &step));
  ------------------
  |  Branch (533:11): [True: 1.98k, False: 19]
  ------------------
  534|       |
  535|     19|	return ret;
  536|    151|}
gif.c:gif__jump_data:
  430|  2.16k|{
  431|  2.16k|	uint32_t jump = (*skip < *available) ? *skip : *available;
  ------------------
  |  Branch (431:18): [True: 2.15k, False: 7]
  ------------------
  432|       |
  433|  2.16k|	*skip -= jump;
  434|  2.16k|	*available -= jump;
  435|  2.16k|	*pos += jump;
  436|  2.16k|}
gif.c:nsgif__next_row:
  388|  2.00k|{
  389|  2.00k|	if (!interlace) {
  ------------------
  |  Branch (389:6): [True: 1.53k, False: 464]
  ------------------
  390|  1.53k|		return (++*y != height);
  391|  1.53k|	} else {
  392|    464|		return nsgif__deinterlace(height, y, step);
  393|    464|	}
  394|  2.00k|}
gif.c:nsgif__deinterlace:
  358|    464|{
  359|    464|	*y += *step & 0xf;
  360|       |
  361|    464|	if (*y < height) return true;
  ------------------
  |  Branch (361:6): [True: 423, False: 41]
  ------------------
  362|       |
  363|     41|	switch (*step) {
  364|     19|	case 24: *y = 4; *step = 8; if (*y < height) return true;
  ------------------
  |  Branch (364:2): [True: 19, False: 22]
  |  Branch (364:34): [True: 15, False: 4]
  ------------------
  365|       |	         /* Fall through. */
  366|     15|	case  8: *y = 2; *step = 4; if (*y < height) return true;
  ------------------
  |  Branch (366:2): [True: 11, False: 30]
  |  Branch (366:34): [True: 13, False: 2]
  ------------------
  367|       |	         /* Fall through. */
  368|     10|	case  4: *y = 1; *step = 2; if (*y < height) return true;
  ------------------
  |  Branch (368:2): [True: 8, False: 33]
  |  Branch (368:34): [True: 9, False: 1]
  ------------------
  369|       |	         /* Fall through. */
  370|      4|	default:
  ------------------
  |  Branch (370:2): [True: 3, False: 38]
  ------------------
  371|      4|		break;
  372|     41|	}
  373|       |
  374|      4|	return false;
  375|     41|}
gif.c:nsgif__bitmap_modified:
  253|    345|{
  254|    345|	if (gif->bitmap.modified) {
  ------------------
  |  Branch (254:6): [True: 0, False: 345]
  ------------------
  255|      0|		gif->bitmap.modified(gif->frame_image);
  256|      0|	}
  257|    345|}
gif.c:nsgif__bitmap_get_opaque:
  285|    345|{
  286|    345|	if (gif->bitmap.test_opaque) {
  ------------------
  |  Branch (286:6): [True: 0, False: 345]
  ------------------
  287|      0|		return gif->bitmap.test_opaque(
  288|      0|				gif->frame_image);
  289|      0|	}
  290|       |
  291|    345|	return false;
  292|    345|}
gif.c:nsgif__bitmap_set_opaque:
  268|    345|{
  269|    345|	if (gif->bitmap.set_opaque) {
  ------------------
  |  Branch (269:6): [True: 0, False: 345]
  ------------------
  270|      0|		gif->bitmap.set_opaque(
  271|      0|				gif->frame_image, frame->opaque);
  272|      0|	}
  273|    345|}
gif.c:nsgif__colour_table_decode:
 1076|  6.51k|{
 1077|  6.51k|	uint8_t *entry = (uint8_t *)colour_table;
 1078|       |
 1079|   162k|	while (colour_table_entries--) {
  ------------------
  |  Branch (1079:9): [True: 156k, False: 6.51k]
  ------------------
 1080|       |		/* Gif colour map contents are r,g,b.
 1081|       |		 *
 1082|       |		 * We want to pack them bytewise into the colour table,
 1083|       |		 * according to the client colour layout.
 1084|       |		 */
 1085|       |
 1086|   156k|		entry[layout->r] = *data++;
 1087|   156k|		entry[layout->g] = *data++;
 1088|   156k|		entry[layout->b] = *data++;
 1089|   156k|		entry[layout->a] = 0xff;
 1090|       |
 1091|   156k|		entry += sizeof(uint32_t);
 1092|   156k|	}
 1093|  6.51k|}

lzw_context_create:
  101|    705|{
  102|    705|	struct lzw_ctx *c = malloc(sizeof(*c));
  103|    705|	if (c == NULL) {
  ------------------
  |  Branch (103:6): [True: 0, False: 705]
  ------------------
  104|      0|		return LZW_NO_MEM;
  105|      0|	}
  106|       |
  107|    705|	*ctx = c;
  108|    705|	return LZW_OK;
  109|    705|}
lzw_context_destroy:
  113|    748|{
  114|    748|	free(ctx);
  115|    748|}
lzw_decode_init:
  265|    299|{
  266|    299|	struct lzw_table_entry *table = ctx->table;
  267|    299|	lzw_result res;
  268|    299|	uint16_t code;
  269|       |
  270|    299|	if (minimum_code_size >= LZW_CODE_MAX) {
  ------------------
  |  |   21|    299|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (270:6): [True: 0, False: 299]
  ------------------
  271|      0|		return LZW_BAD_ICODE;
  272|      0|	}
  273|       |
  274|       |	/* Initialise the input reading context */
  275|    299|	ctx->input.data = input_data;
  276|    299|	ctx->input.data_len = input_length;
  277|    299|	ctx->input.data_sb_next = input_pos;
  278|       |
  279|    299|	ctx->input.sb_bit = 0;
  280|    299|	ctx->input.sb_bit_count = 0;
  281|       |
  282|       |	/* Initialise the table building context */
  283|    299|	ctx->initial_code_size = minimum_code_size + 1;
  284|       |
  285|    299|	ctx->clear_code = (1 << minimum_code_size) + 0;
  286|    299|	ctx->eoi_code   = (1 << minimum_code_size) + 1;
  287|       |
  288|    299|	ctx->output_left = 0;
  289|       |
  290|       |	/* Initialise the standard table entries */
  291|   147k|	for (uint16_t i = 0; i < ctx->clear_code; i++) {
  ------------------
  |  Branch (291:23): [True: 147k, False: 299]
  ------------------
  292|   147k|		table[i].first = i;
  293|   147k|		table[i].value = i;
  294|   147k|		table[i].count = 1;
  295|   147k|	}
  296|       |
  297|    299|	res = lzw__handle_clear(ctx, &code);
  298|    299|	if (res != LZW_OK) {
  ------------------
  |  Branch (298:6): [True: 56, False: 243]
  ------------------
  299|     56|		return res;
  300|     56|	}
  301|       |
  302|       |	/* Store details of this code as "previous code" to the context. */
  303|    243|	ctx->prev_code_first = ctx->table[code].first;
  304|    243|	ctx->prev_code_count = ctx->table[code].count;
  305|    243|	ctx->prev_code = code;
  306|       |
  307|       |	/* Add code to context for immediate output. */
  308|    243|	ctx->output_code = code;
  309|    243|	ctx->output_left = 1;
  310|       |
  311|    243|	ctx->has_transparency = false;
  312|    243|	ctx->transparency_idx = 0;
  313|    243|	ctx->colour_map = NULL;
  314|       |
  315|    243|	return LZW_OK;
  316|    299|}
lzw_decode_init_map:
  327|    115|{
  328|    115|	lzw_result res;
  329|       |
  330|    115|	if (colour_table == NULL) {
  ------------------
  |  Branch (330:6): [True: 0, False: 115]
  ------------------
  331|      0|		return LZW_BAD_PARAM;
  332|      0|	}
  333|       |
  334|    115|	res = lzw_decode_init(ctx, minimum_code_size,
  335|    115|			input_data, input_length, input_pos);
  336|    115|	if (res != LZW_OK) {
  ------------------
  |  Branch (336:6): [True: 23, False: 92]
  ------------------
  337|     23|		return res;
  338|     23|	}
  339|       |
  340|     92|	ctx->has_transparency = (transparency_idx <= 0xFF);
  341|     92|	ctx->transparency_idx = transparency_idx;
  342|     92|	ctx->colour_map = colour_table;
  343|       |
  344|     92|	return LZW_OK;
  345|    115|}
lzw_decode:
  499|    161|{
  500|    161|	const uint32_t output_length = sizeof(ctx->stack_base);
  501|       |
  502|    161|	*output_written = 0;
  503|    161|	*output_data = ctx->stack_base;
  504|       |
  505|    161|	if (ctx->output_left != 0) {
  ------------------
  |  Branch (505:6): [True: 158, False: 3]
  ------------------
  506|    158|		*output_written += lzw__write_fn(ctx,
  507|    158|				ctx->stack_base, output_length, *output_written,
  508|    158|				ctx->output_code, ctx->output_left);
  509|    158|	}
  510|       |
  511|  57.3k|	while (*output_written != output_length) {
  ------------------
  |  Branch (511:9): [True: 57.3k, False: 13]
  ------------------
  512|  57.3k|		lzw_result res = lzw__decode(ctx, lzw__write_fn,
  513|  57.3k|				ctx->stack_base, output_length, output_written);
  514|  57.3k|		if (res != LZW_OK) {
  ------------------
  |  Branch (514:7): [True: 148, False: 57.2k]
  ------------------
  515|    148|			return res;
  516|    148|		}
  517|  57.3k|	}
  518|       |
  519|     13|	return LZW_OK;
  520|    161|}
lzw_decode_map:
  591|     92|{
  592|     92|	*output_written = 0;
  593|       |
  594|     92|	if (ctx->colour_map == NULL) {
  ------------------
  |  Branch (594:6): [True: 0, False: 92]
  ------------------
  595|      0|		return LZW_NO_COLOUR;
  596|      0|	}
  597|       |
  598|     92|	if (ctx->output_left != 0) {
  ------------------
  |  Branch (598:6): [True: 92, False: 0]
  ------------------
  599|     92|		*output_written += lzw__map_write_fn(ctx,
  600|     92|				output_data, output_length, *output_written,
  601|     92|				ctx->output_code, ctx->output_left);
  602|     92|	}
  603|       |
  604|  23.7k|	while (*output_written != output_length) {
  ------------------
  |  Branch (604:9): [True: 23.7k, False: 13]
  ------------------
  605|  23.7k|		lzw_result res = lzw__decode(ctx, lzw__map_write_fn,
  606|  23.7k|				output_data, output_length, output_written);
  607|  23.7k|		if (res != LZW_OK) {
  ------------------
  |  Branch (607:7): [True: 79, False: 23.6k]
  ------------------
  608|     79|			return res;
  609|     79|		}
  610|  23.7k|	}
  611|       |
  612|     13|	return LZW_OK;
  613|     92|}
lzw.c:lzw__handle_clear:
  232|  6.90k|{
  233|  6.90k|	uint16_t code;
  234|       |
  235|       |	/* Reset table building context */
  236|  6.90k|	ctx->code_size = ctx->initial_code_size;
  237|  6.90k|	ctx->code_max = (1 << ctx->initial_code_size) - 1;
  238|  6.90k|	ctx->table_size = ctx->eoi_code + 1;
  239|       |
  240|       |	/* There might be a sequence of clear codes, so process them all */
  241|  13.8k|	do {
  242|  13.8k|		lzw_result res = lzw__read_code(&ctx->input,
  243|  13.8k|				ctx->code_size, &code);
  244|  13.8k|		if (res != LZW_OK) {
  ------------------
  |  Branch (244:7): [True: 68, False: 13.7k]
  ------------------
  245|     68|			return res;
  246|     68|		}
  247|  13.8k|	} while (code == ctx->clear_code);
  ------------------
  |  Branch (247:11): [True: 6.95k, False: 6.83k]
  ------------------
  248|       |
  249|       |	/* The initial code must be from the initial table. */
  250|  6.83k|	if (code > ctx->clear_code) {
  ------------------
  |  Branch (250:6): [True: 17, False: 6.81k]
  ------------------
  251|     17|		return LZW_BAD_ICODE;
  252|     17|	}
  253|       |
  254|  6.81k|	*code_out = code;
  255|  6.81k|	return LZW_OK;
  256|  6.83k|}
lzw.c:lzw__read_code:
  167|  94.9k|{
  168|  94.9k|	uint32_t code = 0;
  169|  94.9k|	uint32_t current_bit = ctx->sb_bit & 0x7;
  170|       |
  171|  94.9k|	if (ctx->sb_bit + 24 <= ctx->sb_bit_count) {
  ------------------
  |  Branch (171:6): [True: 84.1k, False: 10.8k]
  ------------------
  172|       |		/* Fast path: read three bytes from this sub-block */
  173|  84.1k|		const uint8_t *data = ctx->sb_data + (ctx->sb_bit >> 3);
  174|  84.1k|		code |= *data++ <<  0;
  175|  84.1k|		code |= *data++ <<  8;
  176|  84.1k|		code |= *data   << 16;
  177|  84.1k|		ctx->sb_bit += code_size;
  178|  84.1k|	} else {
  179|       |		/* Slow path: code spans sub-blocks */
  180|  10.8k|		uint8_t byte_advance = (current_bit + code_size) >> 3;
  181|  10.8k|		uint8_t byte = 0;
  182|  10.8k|		uint8_t bits_remaining_0 = (code_size < (8u - current_bit)) ?
  ------------------
  |  Branch (182:30): [True: 6.91k, False: 3.91k]
  ------------------
  183|  6.91k|				code_size : (8u - current_bit);
  184|  10.8k|		uint8_t bits_remaining_1 = code_size - bits_remaining_0;
  185|  10.8k|		uint8_t bits_used[3] = {
  186|  10.8k|			[0] = bits_remaining_0,
  187|  10.8k|			[1] = bits_remaining_1 < 8 ? bits_remaining_1 : 8,
  ------------------
  |  Branch (187:10): [True: 9.35k, False: 1.47k]
  ------------------
  188|  10.8k|			[2] = bits_remaining_1 - 8,
  189|  10.8k|		};
  190|       |
  191|  10.8k|		assert(byte_advance <= 2);
  192|       |
  193|  13.0k|		while (true) {
  194|  13.0k|			const uint8_t *data = ctx->sb_data;
  195|  13.0k|			lzw_result res;
  196|       |
  197|       |			/* Get any data from end of this sub-block */
  198|  29.0k|			while (byte <= byte_advance &&
  ------------------
  |  Branch (198:11): [True: 18.4k, False: 10.6k]
  ------------------
  199|  29.0k|					ctx->sb_bit < ctx->sb_bit_count) {
  ------------------
  |  Branch (199:6): [True: 16.0k, False: 2.39k]
  ------------------
  200|  16.0k|				code |= data[ctx->sb_bit >> 3] << (byte << 3);
  201|  16.0k|				ctx->sb_bit += bits_used[byte];
  202|  16.0k|				byte++;
  203|  16.0k|			}
  204|       |
  205|       |			/* Check if we have all we need */
  206|  13.0k|			if (byte > byte_advance) {
  ------------------
  |  Branch (206:8): [True: 10.6k, False: 2.39k]
  ------------------
  207|  10.6k|				break;
  208|  10.6k|			}
  209|       |
  210|       |			/* Move to next sub-block */
  211|  2.39k|			res = lzw__block_advance(ctx);
  212|  2.39k|			if (res != LZW_OK) {
  ------------------
  |  Branch (212:8): [True: 174, False: 2.22k]
  ------------------
  213|    174|				return res;
  214|    174|			}
  215|  2.39k|		}
  216|  10.8k|	}
  217|       |
  218|  94.7k|	*code_out = (code >> current_bit) & ((1 << code_size) - 1);
  219|  94.7k|	return LZW_OK;
  220|  94.9k|}
lzw.c:lzw__block_advance:
  124|  2.39k|{
  125|  2.39k|	size_t block_size;
  126|  2.39k|	size_t next_block_pos = ctx->data_sb_next;
  127|  2.39k|	const uint8_t *data_next = ctx->data + next_block_pos;
  128|       |
  129|  2.39k|	if (next_block_pos >= ctx->data_len) {
  ------------------
  |  Branch (129:6): [True: 0, False: 2.39k]
  ------------------
  130|      0|		return LZW_NO_DATA;
  131|      0|	}
  132|       |
  133|  2.39k|	block_size = *data_next;
  134|       |
  135|  2.39k|	if ((next_block_pos + block_size) >= ctx->data_len) {
  ------------------
  |  Branch (135:6): [True: 0, False: 2.39k]
  ------------------
  136|      0|		return LZW_NO_DATA;
  137|      0|	}
  138|       |
  139|  2.39k|	ctx->sb_bit = 0;
  140|  2.39k|	ctx->sb_bit_count = block_size * 8;
  141|       |
  142|  2.39k|	if (block_size == 0) {
  ------------------
  |  Branch (142:6): [True: 174, False: 2.22k]
  ------------------
  143|    174|		ctx->data_sb_next += 1;
  144|    174|		return LZW_OK_EOD;
  145|    174|	}
  146|       |
  147|  2.22k|	ctx->sb_data = data_next + 1;
  148|  2.22k|	ctx->data_sb_next += block_size + 1;
  149|       |
  150|  2.22k|	return LZW_OK;
  151|  2.39k|}
lzw.c:lzw__write_fn:
  463|  57.3k|{
  464|  57.3k|	uint8_t *restrict output_pos = (uint8_t *)output_data + output_used;
  465|  57.3k|	const struct lzw_table_entry * const table = ctx->table;
  466|  57.3k|	uint32_t space = output_length - output_used;
  467|  57.3k|	uint16_t count = left;
  468|       |
  469|  57.3k|	if (count > space) {
  ------------------
  |  Branch (469:6): [True: 7, False: 57.3k]
  ------------------
  470|      7|		left = count - space;
  471|      7|		count = space;
  472|  57.3k|	} else {
  473|  57.3k|		left = 0;
  474|  57.3k|	}
  475|       |
  476|  57.3k|	ctx->output_code = code;
  477|  57.3k|	ctx->output_left = left;
  478|       |
  479|       |	/* Skip over any values we don't have space for. */
  480|  57.4k|	for (unsigned i = left; i != 0; i--) {
  ------------------
  |  Branch (480:26): [True: 98, False: 57.3k]
  ------------------
  481|     98|		const struct lzw_table_entry *entry = table + code;
  482|     98|		code = entry->extends;
  483|     98|	}
  484|       |
  485|  57.3k|	output_pos += count;
  486|   156k|	for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (486:27): [True: 99.4k, False: 57.3k]
  ------------------
  487|  99.4k|		const struct lzw_table_entry *entry = table + code;
  488|  99.4k|		*--output_pos = entry->value;
  489|  99.4k|		code = entry->extends;
  490|  99.4k|	}
  491|       |
  492|  57.3k|	return count;
  493|  57.3k|}
lzw.c:lzw__decode:
  391|  81.0k|{
  392|  81.0k|	lzw_result res;
  393|  81.0k|	uint16_t code;
  394|       |
  395|       |	/* Get a new code from the input */
  396|  81.0k|	res = lzw__read_code(&ctx->input, ctx->code_size, &code);
  397|  81.0k|	if (res != LZW_OK) {
  ------------------
  |  Branch (397:6): [True: 106, False: 80.9k]
  ------------------
  398|    106|		return res;
  399|    106|	}
  400|       |
  401|       |	/* Handle the new code */
  402|  80.9k|	if (code == ctx->eoi_code) {
  ------------------
  |  Branch (402:6): [True: 8, False: 80.9k]
  ------------------
  403|       |		/* Got End of Information code */
  404|      8|		return LZW_EOI_CODE;
  405|       |
  406|  80.9k|	} else if (code > ctx->table_size) {
  ------------------
  |  Branch (406:13): [True: 84, False: 80.8k]
  ------------------
  407|       |		/* Code is invalid */
  408|     84|		return LZW_BAD_CODE;
  409|       |
  410|  80.8k|	} else if (code == ctx->clear_code) {
  ------------------
  |  Branch (410:13): [True: 6.60k, False: 74.2k]
  ------------------
  411|  6.60k|		res = lzw__handle_clear(ctx, &code);
  412|  6.60k|		if (res != LZW_OK) {
  ------------------
  |  Branch (412:7): [True: 29, False: 6.57k]
  ------------------
  413|     29|			return res;
  414|     29|		}
  415|       |
  416|  74.2k|	} else if (ctx->table_size < LZW_TABLE_ENTRY_MAX) {
  ------------------
  |  |   25|  74.2k|#define LZW_TABLE_ENTRY_MAX (1u << LZW_CODE_MAX)
  |  |  ------------------
  |  |  |  |   21|  74.2k|#define LZW_CODE_MAX 12
  |  |  ------------------
  ------------------
  |  Branch (416:13): [True: 73.8k, False: 412]
  ------------------
  417|  73.8k|		uint16_t size = ctx->table_size;
  418|  73.8k|		lzw__table_add_entry(ctx, (code < size) ?
  ------------------
  |  Branch (418:29): [True: 73.2k, False: 649]
  ------------------
  419|  73.2k|				ctx->table[code].first :
  420|  73.8k|				ctx->prev_code_first);
  421|       |
  422|       |		/* Ensure code size is increased, if needed. */
  423|  73.8k|		if (size == ctx->code_max && ctx->code_size < LZW_CODE_MAX) {
  ------------------
  |  |   21|    378|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (423:7): [True: 378, False: 73.4k]
  |  Branch (423:32): [True: 361, False: 17]
  ------------------
  424|    361|			ctx->code_size++;
  425|    361|			ctx->code_max = (1 << ctx->code_size) - 1;
  426|    361|		}
  427|  73.8k|	}
  428|       |
  429|  80.8k|	*output_written += write_fn(ctx,
  430|  80.8k|			output_data, output_length, *output_written,
  431|  80.8k|			code, ctx->table[code].count);
  432|       |
  433|       |	/* Store details of this code as "previous code" to the context. */
  434|  80.8k|	ctx->prev_code_first = ctx->table[code].first;
  435|  80.8k|	ctx->prev_code_count = ctx->table[code].count;
  436|  80.8k|	ctx->prev_code = code;
  437|       |
  438|  80.8k|	return LZW_OK;
  439|  80.9k|}
lzw.c:lzw__table_add_entry:
  356|  73.8k|{
  357|  73.8k|	struct lzw_table_entry *entry = &ctx->table[ctx->table_size];
  358|       |
  359|  73.8k|	entry->value = code;
  360|  73.8k|	entry->first = ctx->prev_code_first;
  361|  73.8k|	entry->count = ctx->prev_code_count + 1;
  362|  73.8k|	entry->extends = ctx->prev_code;
  363|       |
  364|  73.8k|	ctx->table_size++;
  365|  73.8k|}
lzw.c:lzw__map_write_fn:
  544|  23.7k|{
  545|  23.7k|	uint32_t *restrict output_pos = (uint32_t *)output_data + output_used;
  546|  23.7k|	const struct lzw_table_entry * const table = ctx->table;
  547|  23.7k|	uint32_t space = output_length - output_used;
  548|  23.7k|	uint16_t count = left;
  549|       |
  550|  23.7k|	if (count > space) {
  ------------------
  |  Branch (550:6): [True: 7, False: 23.7k]
  ------------------
  551|      7|		left = count - space;
  552|      7|		count = space;
  553|  23.7k|	} else {
  554|  23.7k|		left = 0;
  555|  23.7k|	}
  556|       |
  557|  23.7k|	ctx->output_code = code;
  558|  23.7k|	ctx->output_left = left;
  559|       |
  560|  23.7k|	for (unsigned i = left; i != 0; i--) {
  ------------------
  |  Branch (560:26): [True: 46, False: 23.7k]
  ------------------
  561|     46|		const struct lzw_table_entry *entry = table + code;
  562|     46|		code = entry->extends;
  563|     46|	}
  564|       |
  565|  23.7k|	output_pos += count;
  566|  23.7k|	if (ctx->has_transparency) {
  ------------------
  |  Branch (566:6): [True: 0, False: 23.7k]
  ------------------
  567|      0|		for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (567:28): [True: 0, False: 0]
  ------------------
  568|      0|			const struct lzw_table_entry *entry = table + code;
  569|      0|			--output_pos;
  570|      0|			if (entry->value != ctx->transparency_idx) {
  ------------------
  |  Branch (570:8): [True: 0, False: 0]
  ------------------
  571|      0|				*output_pos = ctx->colour_map[entry->value];
  572|      0|			}
  573|      0|			code = entry->extends;
  574|      0|		}
  575|  23.7k|	} else {
  576|  56.4k|		for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (576:28): [True: 32.6k, False: 23.7k]
  ------------------
  577|  32.6k|			const struct lzw_table_entry *entry = table + code;
  578|  32.6k|			*--output_pos = ctx->colour_map[entry->value];
  579|  32.6k|			code = entry->extends;
  580|  32.6k|		}
  581|  23.7k|	}
  582|       |
  583|  23.7k|	return count;
  584|  23.7k|}

matrixload.c:vips_foreign_load_matrix_class_init:
  265|      1|{
  266|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  268|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  269|       |
  270|      1|	gobject_class->dispose = vips_foreign_load_matrix_dispose;
  271|       |
  272|      1|	object_class->nickname = "matrixload_base";
  273|      1|	object_class->description = _("load matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|      1|	object_class->build = vips_foreign_load_matrix_build;
  275|       |
  276|      1|	load_class->get_flags = vips_foreign_load_matrix_get_flags;
  277|      1|	load_class->header = vips_foreign_load_matrix_header;
  278|      1|	load_class->load = vips_foreign_load_matrix_load;
  279|      1|}
matrixload.c:vips_foreign_load_matrix_file_class_init:
  355|      1|{
  356|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  358|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  359|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  360|       |
  361|      1|	gobject_class->set_property = vips_object_set_property;
  362|      1|	gobject_class->get_property = vips_object_get_property;
  363|       |
  364|      1|	object_class->nickname = "matrixload";
  365|      1|	object_class->build = vips_foreign_load_matrix_file_build;
  366|       |
  367|      1|	foreign_class->suffs = vips_foreign_load_matrix_suffs;
  368|       |
  369|      1|	load_class->is_a = vips_foreign_load_matrix_file_is_a;
  370|      1|	load_class->get_flags_filename =
  371|      1|		vips_foreign_load_matrix_file_get_flags_filename;
  372|       |
  373|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  374|      1|		_("Filename"),
  375|      1|		_("Filename to load from"),
  376|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  377|      1|		G_STRUCT_OFFSET(VipsForeignLoadMatrixFile, filename),
  378|      1|		NULL);
  379|      1|}
matrixload.c:vips_foreign_load_matrix_source_class_init:
  445|      1|{
  446|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  448|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  449|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  450|       |
  451|      1|	gobject_class->set_property = vips_object_set_property;
  452|      1|	gobject_class->get_property = vips_object_get_property;
  453|       |
  454|      1|	object_class->nickname = "matrixload_source";
  455|      1|	object_class->build = vips_foreign_load_matrix_source_build;
  456|       |
  457|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  458|       |
  459|      1|	load_class->is_a_source = vips_foreign_load_matrix_source_is_a_source;
  460|       |
  461|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  462|      1|		_("Source"),
  463|      1|		_("Source to load from"),
  464|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  465|      1|		G_STRUCT_OFFSET(VipsForeignLoadMatrixSource, source),
  466|      1|		VIPS_TYPE_SOURCE);
  467|      1|}

matrixsave.c:vips_foreign_save_matrix_class_init:
  166|      1|{
  167|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  169|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  170|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  171|       |
  172|      1|	gobject_class->dispose = vips_foreign_save_matrix_dispose;
  173|       |
  174|      1|	object_class->nickname = "matrixsave_base";
  175|      1|	object_class->description = _("save image to matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  176|      1|	object_class->build = vips_foreign_save_matrix_build;
  177|       |
  178|      1|	foreign_class->suffs = vips_foreign_save_matrix_suffs;
  179|       |
  180|      1|	save_class->saveable = VIPS_SAVEABLE_MONO;
  181|      1|	save_class->format_table = bandfmt_matrix;
  182|      1|}
matrixsave.c:vips_foreign_save_matrix_dispose:
   69|  15.5k|{
   70|  15.5k|	VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) gobject;
   71|       |
   72|  15.5k|	VIPS_UNREF(matrix->target);
  ------------------
  |  |   57|  15.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  15.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.5k|	{ \
  |  |  |  |   43|  15.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 15.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  15.5k|			(void) F((S)); \
  |  |  |  |   45|  15.5k|			(S) = 0; \
  |  |  |  |   46|  15.5k|		} \
  |  |  |  |   47|  15.5k|	} \
  |  |  |  |   48|  15.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|       |
   74|  15.5k|	G_OBJECT_CLASS(vips_foreign_save_matrix_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  15.5k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|  15.5k|}
matrixsave.c:vips_foreign_save_matrix_build:
  107|  15.5k|{
  108|  15.5k|	VipsForeignSave *save = (VipsForeignSave *) object;
  109|  15.5k|	VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object;
  110|  15.5k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  15.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  15.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  15.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|       |
  112|  15.5k|	double scale;
  113|  15.5k|	double offset;
  114|       |
  115|  15.5k|	if (VIPS_OBJECT_CLASS(vips_foreign_save_matrix_parent_class)->build(object))
  ------------------
  |  |  435|  15.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (115:6): [True: 0, False: 15.5k]
  ------------------
  116|      0|		return -1;
  117|       |
  118|  15.5k|	if (vips_check_mono(class->nickname, save->ready) ||
  ------------------
  |  Branch (118:6): [True: 712, False: 14.8k]
  ------------------
  119|  15.5k|		vips_check_uncoded(class->nickname, save->ready))
  ------------------
  |  Branch (119:3): [True: 0, False: 14.8k]
  ------------------
  120|    712|		return -1;
  121|       |
  122|  14.8k|	vips_target_writef(matrix->target, "%d %d",
  123|  14.8k|		save->ready->Xsize, save->ready->Ysize);
  124|  14.8k|	scale = vips_image_get_scale(save->ready);
  125|  14.8k|	offset = vips_image_get_offset(save->ready);
  126|  14.8k|	if (scale != 1.0 || offset != 0.0)
  ------------------
  |  Branch (126:6): [True: 0, False: 14.8k]
  |  Branch (126:22): [True: 0, False: 14.8k]
  ------------------
  127|      0|		vips_target_writef(matrix->target, " %g %g", scale, offset);
  128|  14.8k|	if (vips_target_writes(matrix->target, "\n"))
  ------------------
  |  Branch (128:6): [True: 0, False: 14.8k]
  ------------------
  129|      0|		return -1;
  130|       |
  131|  14.8k|	if (vips_sink_disc(save->ready,
  ------------------
  |  Branch (131:6): [True: 7.54k, False: 7.30k]
  ------------------
  132|  14.8k|			vips_foreign_save_matrix_block, matrix))
  133|  7.54k|		return -1;
  134|       |
  135|  7.30k|	if (vips_target_end(matrix->target))
  ------------------
  |  Branch (135:6): [True: 0, False: 7.30k]
  ------------------
  136|      0|		return -1;
  137|       |
  138|  7.30k|	return 0;
  139|  7.30k|}
matrixsave.c:vips_foreign_save_matrix_block:
   79|  7.30k|{
   80|  7.30k|	VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) a;
   81|       |
   82|  7.30k|	int x, y;
   83|       |
   84|   275k|	for (y = 0; y < area->height; y++) {
  ------------------
  |  Branch (84:14): [True: 268k, False: 7.30k]
  ------------------
   85|   268k|		double *p = (double *)
   86|   268k|			VIPS_REGION_ADDR(region, 0, area->top + y);
  ------------------
  |  |  227|   268k|	((R)->data + \
  |  |  228|   268k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   268k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   268k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   268k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   268k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   268k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|       |
   88|   268k|		char buf[G_ASCII_DTOSTR_BUF_SIZE];
   89|       |
   90|  14.8M|		for (x = 0; x < area->width; x++) {
  ------------------
  |  Branch (90:15): [True: 14.5M, False: 268k]
  ------------------
   91|  14.5M|			if (x > 0)
  ------------------
  |  Branch (91:8): [True: 14.3M, False: 268k]
  ------------------
   92|  14.3M|				vips_target_writes(matrix->target, " ");
   93|       |
   94|  14.5M|			g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, p[x]);
  ------------------
  |  |  163|  14.5M|#define G_ASCII_DTOSTR_BUF_SIZE (29 + 10)
  ------------------
   95|  14.5M|			vips_target_writes(matrix->target, buf);
   96|  14.5M|		}
   97|       |
   98|   268k|		if (vips_target_writes(matrix->target, "\n"))
  ------------------
  |  Branch (98:7): [True: 0, False: 268k]
  ------------------
   99|      0|			return -1;
  100|   268k|	}
  101|       |
  102|  7.30k|	return 0;
  103|  7.30k|}
matrixsave.c:vips_foreign_save_matrix_init:
  186|  15.5k|{
  187|  15.5k|}
matrixsave.c:vips_foreign_save_matrix_file_class_init:
  217|      1|{
  218|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  220|       |
  221|      1|	gobject_class->set_property = vips_object_set_property;
  222|      1|	gobject_class->get_property = vips_object_get_property;
  223|       |
  224|      1|	object_class->nickname = "matrixsave";
  225|      1|	object_class->build = vips_foreign_save_matrix_file_build;
  226|       |
  227|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  228|      1|		_("Filename"),
  229|      1|		_("Filename to save to"),
  230|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsForeignSaveMatrixFile, filename),
  232|      1|		NULL);
  233|      1|}
matrixsave.c:vips_foreign_save_matrix_target_class_init:
  270|      1|{
  271|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  273|       |
  274|      1|	gobject_class->set_property = vips_object_set_property;
  275|      1|	gobject_class->get_property = vips_object_get_property;
  276|       |
  277|      1|	object_class->nickname = "matrixsave_target";
  278|      1|	object_class->build = vips_foreign_save_matrix_target_build;
  279|       |
  280|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  281|      1|		_("Target"),
  282|      1|		_("Target to save to"),
  283|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsForeignSaveMatrixTarget, target),
  285|      1|		VIPS_TYPE_TARGET);
  286|      1|}
matrixsave.c:vips_foreign_save_matrix_target_build:
  253|  15.5k|{
  254|  15.5k|	VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object;
  255|  15.5k|	VipsForeignSaveMatrixTarget *target =
  256|  15.5k|		(VipsForeignSaveMatrixTarget *) object;
  257|       |
  258|  15.5k|	if (target->target) {
  ------------------
  |  Branch (258:6): [True: 15.5k, False: 0]
  ------------------
  259|  15.5k|		matrix->target = target->target;
  260|  15.5k|		g_object_ref(matrix->target);
  261|  15.5k|	}
  262|       |
  263|  15.5k|	return VIPS_OBJECT_CLASS(vips_foreign_save_matrix_target_parent_class)
  ------------------
  |  |  435|  15.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  15.5k|		->build(object);
  265|  15.5k|}
matrixsave.c:vips_foreign_save_matrix_target_init:
  290|  15.5k|{
  291|  15.5k|}
matrixsave.c:vips_foreign_print_matrix_class_init:
  319|      1|{
  320|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  321|       |
  322|      1|	object_class->nickname = "matrixprint";
  323|      1|	object_class->description = _("print matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  324|      1|	object_class->build = vips_foreign_print_matrix_build;
  325|      1|}

vips_foreign_load_nsgif_tile_height:
  543|    345|{
  544|    345|	int height = gif->info->height;
  545|       |
  546|    345|	int i;
  547|       |
  548|       |	/* First, check the perfect size.
  549|       |	 */
  550|    345|	if (height % 16 == 0)
  ------------------
  |  Branch (550:6): [True: 21, False: 324]
  ------------------
  551|     21|		return 16;
  552|       |
  553|       |	/* Next, check larger and smaller sizes.
  554|       |	 */
  555|  2.36k|	for (i = 1; i < 16; i++) {
  ------------------
  |  Branch (555:14): [True: 2.36k, False: 0]
  ------------------
  556|  2.36k|		if (height % (16 + i) == 0)
  ------------------
  |  Branch (556:7): [True: 51, False: 2.31k]
  ------------------
  557|     51|			return 16 + i;
  558|  2.31k|		if (height % (16 - i) == 0)
  ------------------
  |  Branch (558:7): [True: 273, False: 2.03k]
  ------------------
  559|    273|			return 16 - i;
  560|  2.31k|	}
  561|       |
  562|      0|	return 1;
  563|    324|}
nsgifload.c:vips_foreign_load_nsgif_class_init:
  596|      1|{
  597|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  599|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  600|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  601|       |
  602|      1|	gobject_class->dispose = vips_foreign_load_nsgif_dispose;
  603|      1|	gobject_class->set_property = vips_object_set_property;
  604|      1|	gobject_class->get_property = vips_object_get_property;
  605|       |
  606|      1|	object_class->nickname = "gifload_base";
  607|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  608|       |
  609|       |	/* High priority, so that we handle vipsheader etc.
  610|       |	 */
  611|      1|	foreign_class->priority = 50;
  612|       |
  613|      1|	load_class->get_flags_filename =
  614|      1|		vips_foreign_load_nsgif_get_flags_filename;
  615|      1|	load_class->get_flags = vips_foreign_load_nsgif_get_flags;
  616|      1|	load_class->header = vips_foreign_load_nsgif_header;
  617|      1|	load_class->load = vips_foreign_load_nsgif_load;
  618|       |
  619|      1|	VIPS_ARG_INT(class, "page", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  620|      1|		_("Page"),
  621|      1|		_("First page to load"),
  622|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  623|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgif, page),
  624|      1|		0, 100000, 0);
  625|       |
  626|      1|	VIPS_ARG_INT(class, "n", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  627|      1|		_("n"),
  628|      1|		_("Number of pages to load, -1 for all"),
  629|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  630|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgif, n),
  631|      1|		-1, 100000, 1);
  632|      1|}
nsgifload.c:vips_foreign_load_nsgif_dispose:
  172|    748|{
  173|    748|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) gobject;
  174|       |
  175|    748|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_dispose:\n");
  ------------------
  |  |   47|    748|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    748|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    748|	{ \
  |  |   49|    748|		; \
  |  |   50|    748|	} \
  |  |   51|    748|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    748|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|       |
  177|    748|	VIPS_FREEF(nsgif_destroy, gif->anim);
  ------------------
  |  |   41|    748|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    748|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    748|	{ \
  |  |   43|    748|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 748, False: 0]
  |  |  ------------------
  |  |   44|    748|			(void) F((S)); \
  |  |   45|    748|			(S) = 0; \
  |  |   46|    748|		} \
  |  |   47|    748|	} \
  |  |   48|    748|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    748|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|    748|	VIPS_UNREF(gif->source);
  ------------------
  |  |   57|    748|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    748|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    748|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    748|	{ \
  |  |  |  |   43|    748|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 748, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    748|			(void) F((S)); \
  |  |  |  |   45|    748|			(S) = 0; \
  |  |  |  |   46|    748|		} \
  |  |  |  |   47|    748|	} \
  |  |  |  |   48|    748|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    748|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|    748|	VIPS_FREE(gif->delay);
  ------------------
  |  |   50|    748|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    748|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    748|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    748|	{ \
  |  |  |  |   43|    748|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 411, False: 337]
  |  |  |  |  ------------------
  |  |  |  |   44|    411|			(void) F((S)); \
  |  |  |  |   45|    411|			(S) = 0; \
  |  |  |  |   46|    411|		} \
  |  |  |  |   47|    748|	} \
  |  |  |  |   48|    748|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    748|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|       |
  181|    748|	G_OBJECT_CLASS(vips_foreign_load_nsgif_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    748|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    748|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    748|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|    748|}
nsgifload.c:vips_foreign_load_nsgif_get_flags:
  192|    749|{
  193|    749|	return VIPS_FOREIGN_SEQUENTIAL;
  194|    749|}
nsgifload.c:vips_foreign_load_nsgif_header:
  365|    749|{
  366|    749|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|    749|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    749|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    749|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|    749|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load;
  368|       |
  369|    749|	const void *data;
  370|    749|	size_t size;
  371|    749|	nsgif_error result;
  372|    749|	int i;
  373|       |
  374|    749|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_header:\n");
  ------------------
  |  |   47|    749|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    749|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    749|	{ \
  |  |   49|    749|		; \
  |  |   50|    749|	} \
  |  |   51|    749|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    749|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|       |
  376|       |	/* Map the whole source into memory.
  377|       |	 */
  378|    749|	if (!(data = vips_source_map(gif->source, &size)))
  ------------------
  |  Branch (378:6): [True: 0, False: 749]
  ------------------
  379|      0|		return -1;
  380|       |
  381|       |	/* Treat errors from _scan() as warnings. If libnsgif really can't do
  382|       |	 * something it'll fail gracefully later when we try to read out
  383|       |	 * frame data.
  384|       |	 */
  385|    749|	result = nsgif_data_scan(gif->anim, size, (void *) data);
  386|    749|	VIPS_DEBUG_MSG("nsgif_data_scan() = %s\n", nsgif_strerror(result));
  ------------------
  |  |   47|    749|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    749|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    749|	{ \
  |  |   49|    749|		; \
  |  |   50|    749|	} \
  |  |   51|    749|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    749|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|    749|	switch (result) {
  388|    314|	case NSGIF_ERR_END_OF_DATA:
  ------------------
  |  Branch (388:2): [True: 314, False: 435]
  ------------------
  389|    314|		if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (389:7): [True: 0, False: 314]
  ------------------
  390|      0|			vips_foreign_load_nsgif_error(gif, result);
  391|      0|			return -1;
  392|      0|		}
  393|    314|		else
  394|    314|			g_warning("%s", nsgif_strerror(result));
  ------------------
  |  |  338|    314|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|    314|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|    314|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|    314|                               __VA_ARGS__)
  ------------------
  395|    314|		break;
  396|       |
  397|    314|	case NSGIF_OK:
  ------------------
  |  Branch (397:2): [True: 314, False: 435]
  ------------------
  398|    314|		break;
  399|       |
  400|    121|	default:
  ------------------
  |  Branch (400:2): [True: 121, False: 628]
  ------------------
  401|    121|		if (load->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (401:7): [True: 0, False: 121]
  ------------------
  402|      0|			vips_foreign_load_nsgif_error(gif, result);
  403|      0|			return -1;
  404|      0|		}
  405|    121|		else
  406|    121|			g_warning("%s", nsgif_strerror(result));
  ------------------
  |  |  338|    121|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|    121|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|    121|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|    121|                               __VA_ARGS__)
  ------------------
  407|    121|		break;
  408|    749|	}
  409|       |
  410|       |	/* Tell libnsgif that that's all the data we have. This will let us
  411|       |	 * read out any truncated final frames.
  412|       |	 */
  413|    749|	nsgif_data_complete(gif->anim);
  414|       |
  415|    749|	gif->info = nsgif_get_info(gif->anim);
  416|       |#ifdef VERBOSE
  417|       |	print_animation(gif->anim, gif->info);
  418|       |#endif /*VERBOSE*/
  419|    749|	if (!gif->info->frame_count) {
  ------------------
  |  Branch (419:6): [True: 337, False: 412]
  ------------------
  420|    337|		vips_error(class->nickname, "%s", _("no frames in GIF"));
  ------------------
  |  |   30|    337|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    337|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  421|    337|		return -1;
  422|    337|	}
  423|       |
  424|       |	/* Update our global struct based on the information in the
  425|       |	 * individual frames.
  426|       |	 */
  427|  10.8k|	for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (427:14): [True: 10.4k, False: 412]
  ------------------
  428|  10.4k|		const nsgif_frame_info_t *frame_info;
  429|       |
  430|  10.4k|		if ((frame_info = nsgif_get_frame_info(gif->anim, i))) {
  ------------------
  |  Branch (430:7): [True: 10.4k, False: 0]
  ------------------
  431|  10.4k|			if (frame_info->transparency)
  ------------------
  |  Branch (431:8): [True: 479, False: 9.98k]
  ------------------
  432|    479|				gif->has_transparency = TRUE;
  ------------------
  |  |  798|    479|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    479|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  433|  10.4k|			if (frame_info->interlaced)
  ------------------
  |  Branch (433:8): [True: 2.36k, False: 8.09k]
  ------------------
  434|  2.36k|				gif->interlaced = TRUE;
  ------------------
  |  |  798|  2.36k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.36k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  435|  10.4k|			if (frame_info->local_palette)
  ------------------
  |  Branch (435:8): [True: 3.24k, False: 7.21k]
  ------------------
  436|  3.24k|				gif->local_palette = TRUE;
  ------------------
  |  |  798|  3.24k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  3.24k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  437|  10.4k|		}
  438|  10.4k|	}
  439|       |
  440|    412|	if (gif->n == -1)
  ------------------
  |  Branch (440:6): [True: 0, False: 412]
  ------------------
  441|      0|		gif->gif_n = gif->info->frame_count - gif->page;
  442|    412|	else
  443|    412|		gif->gif_n = gif->n;
  444|       |
  445|    412|	if (gif->page < 0 ||
  ------------------
  |  Branch (445:6): [True: 0, False: 412]
  ------------------
  446|    412|		gif->gif_n <= 0 ||
  ------------------
  |  Branch (446:3): [True: 0, False: 412]
  ------------------
  447|    412|		gif->page + gif->gif_n > gif->info->frame_count) {
  ------------------
  |  Branch (447:3): [True: 0, False: 412]
  ------------------
  448|      0|		vips_error(class->nickname, "%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  449|      0|		return -1;
  450|      0|	}
  451|       |
  452|       |	/* In ms, frame_delay in cs.
  453|       |	 */
  454|    412|	VIPS_FREE(gif->delay);
  ------------------
  |  |   50|    412|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    412|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    412|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    412|	{ \
  |  |  |  |   43|    412|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 412]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|    412|	} \
  |  |  |  |   48|    412|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    412|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|    412|	if (!(gif->delay = VIPS_ARRAY(NULL,
  ------------------
  |  |   72|    412|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    412|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    412|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    412|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    412|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (455:6): [True: 0, False: 412]
  ------------------
  456|    412|			  gif->info->frame_count, int)))
  457|      0|		return -1;
  458|  10.8k|	for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (458:14): [True: 10.4k, False: 412]
  ------------------
  459|  10.4k|		const nsgif_frame_info_t *frame_info;
  460|       |
  461|  10.4k|		frame_info = nsgif_get_frame_info(gif->anim, i);
  462|  10.4k|		if (frame_info == NULL) {
  ------------------
  |  Branch (462:7): [True: 0, False: 10.4k]
  ------------------
  463|      0|			vips_error(class->nickname, "%s", _("bad frame"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  464|      0|			return -1;
  465|      0|		}
  466|  10.4k|		gif->delay[i] = 10 * frame_info->delay;
  467|  10.4k|	}
  468|       |
  469|    412|	gif->gif_delay = gif->delay[0] / 10;
  470|       |
  471|    412|	vips_foreign_load_nsgif_set_header(gif, load->out);
  472|       |
  473|    412|	return 0;
  474|    412|}
nsgifload.c:vips_foreign_load_nsgif_error:
  164|    100|{
  165|    100|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif);
  ------------------
  |  |  441|    100|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    100|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    100|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|       |
  167|    100|	vips_error(class->nickname, "%s", nsgif_strerror(result));
  168|    100|}
nsgifload.c:vips_foreign_load_nsgif_set_header:
  260|    757|{
  261|    757|	double array[3];
  262|    757|	const uint8_t *bg;
  263|    757|	size_t entries;
  264|    757|	uint32_t table[NSGIF_MAX_COLOURS];
  265|    757|	int colours;
  266|       |
  267|    757|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_set_header:\n");
  ------------------
  |  |   47|    757|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    757|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    757|	{ \
  |  |   49|    757|		; \
  |  |   50|    757|	} \
  |  |   51|    757|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    757|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|       |
  269|    757|	vips_image_init_fields(image,
  270|    757|		gif->info->width, gif->info->height * gif->gif_n,
  271|    757|		gif->has_transparency ? 4 : 3,
  ------------------
  |  Branch (271:3): [True: 30, False: 727]
  ------------------
  272|    757|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  273|    757|		VIPS_INTERPRETATION_sRGB, 1.0, 1.0);
  274|    757|	vips_image_pipelinev(image, VIPS_DEMAND_STYLE_FATSTRIP, NULL);
  275|       |
  276|       |	/* Only set page-height if we have more than one page, or this could
  277|       |	 * accidentally turn into an animated image later.
  278|       |	 */
  279|    757|	if (gif->gif_n > 1)
  ------------------
  |  Branch (279:6): [True: 0, False: 757]
  ------------------
  280|      0|		vips_image_set_int(image, VIPS_META_PAGE_HEIGHT, gif->info->height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  281|    757|	vips_image_set_int(image, VIPS_META_N_PAGES,
  ------------------
  |  |  165|    757|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  282|    757|		gif->info->frame_count);
  283|    757|	vips_image_set_int(image, "loop", gif->info->loop_max);
  284|       |
  285|    757|	vips_image_set_array_int(image, "delay",
  286|    757|		gif->delay, gif->info->frame_count);
  287|       |
  288|    757|	bg = (uint8_t *) &gif->info->background;
  289|    757|	array[0] = bg[0];
  290|    757|	array[1] = bg[1];
  291|    757|	array[2] = bg[2];
  292|       |
  293|    757|	vips_image_set_array_double(image, "background", array, 3);
  294|       |
  295|    757|	VIPS_SETSTR(image->filename,
  ------------------
  |  |   53|    757|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    757|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|    757|	{ \
  |  |   55|    757|		const char *sst = (V); \
  |  |   56|    757|		\
  |  |   57|    757|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 757, False: 0]
  |  |  ------------------
  |  |   58|    757|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 757]
  |  |  |  Branch (58:16): [True: 757, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|    757|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|    757|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    757|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|    757|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    757|	{ \
  |  |  |  |  |  |   43|    757|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 757, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    757|			(void) F((S)); \
  |  |  |  |  |  |   45|    757|			(S) = 0; \
  |  |  |  |  |  |   46|    757|		} \
  |  |  |  |  |  |   47|    757|	} \
  |  |  |  |  |  |   48|    757|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|    757|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    757|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 757]
  |  |  ------------------
  |  |   61|    757|					(S) = g_strdup(sst); \
  |  |   62|    757|			} \
  |  |   63|    757|		} \
  |  |   64|    757|	} \
  |  |   65|    757|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    757|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    757|		vips_connection_filename(VIPS_CONNECTION(gif->source)));
  297|       |
  298|       |	/* DEPRECATED "gif-loop"
  299|       |	 *
  300|       |	 * Not the correct behavior as loop=1 became gif-loop=0
  301|       |	 * but we want to keep the old behavior untouched!
  302|       |	 */
  303|    757|	vips_image_set_int(image, "gif-loop",
  304|    757|		gif->info->loop_max == 0
  ------------------
  |  Branch (304:3): [True: 9, False: 748]
  ------------------
  305|    757|			? 0
  306|    757|			: gif->info->loop_max - 1);
  307|       |
  308|       |	/* The deprecated gif-delay field is in centiseconds.
  309|       |	 */
  310|    757|	vips_image_set_int(image, "gif-delay", gif->gif_delay);
  311|       |
  312|       |	/* If there are no local palettes, we can attach the global palette as
  313|       |	 * metadata.
  314|       |	 */
  315|    757|	if (!gif->local_palette) {
  ------------------
  |  Branch (315:6): [True: 636, False: 121]
  ------------------
  316|    636|		nsgif_global_palette(gif->anim, table, &entries);
  317|    636|		vips_image_set_array_int(image, "gif-palette",
  318|    636|			(const int *) table, entries);
  319|       |
  320|    636|		colours = entries;
  321|    636|	}
  322|    121|	else {
  323|    121|		int i;
  324|       |
  325|    121|		colours = 0;
  326|       |
  327|    121|		if (gif->info->global_palette) {
  ------------------
  |  Branch (327:7): [True: 14, False: 107]
  ------------------
  328|     14|			nsgif_global_palette(gif->anim, table, &entries);
  329|     14|			colours = entries;
  330|     14|		}
  331|       |
  332|  18.6k|		for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (332:15): [True: 18.5k, False: 121]
  ------------------
  333|  18.5k|			if (nsgif_local_palette(gif->anim, i, table,
  ------------------
  |  Branch (333:8): [True: 6.36k, False: 12.1k]
  ------------------
  334|  18.5k|					&entries))
  335|  6.36k|				colours = VIPS_MAX(colours, entries);
  ------------------
  |  |   54|  6.36k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 4.42k, False: 1.94k]
  |  |  ------------------
  ------------------
  336|  18.5k|		}
  337|    121|	}
  338|       |
  339|    757|	vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|    757|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  340|    757|		ceil(log2(colours)));
  341|       |
  342|       |	/* Deprecated "palette-bit-depth" use "bits-per-sample" instead.
  343|       |	 */
  344|    757|	vips_image_set_int(image, "palette-bit-depth",
  345|    757|		ceil(log2(colours)));
  346|       |
  347|    757|	vips_image_set_int(image, VIPS_META_PALETTE, 1);
  ------------------
  |  |  107|    757|#define VIPS_META_PALETTE "palette"
  ------------------
  348|       |
  349|       |	/* Let our caller know if the GIF is interlaced.
  350|       |	 */
  351|    757|	if (gif->interlaced)
  ------------------
  |  Branch (351:6): [True: 160, False: 597]
  ------------------
  352|    160|		vips_image_set_int(image, "interlaced", 1);
  353|       |
  354|    757|	return 0;
  355|    757|}
nsgifload.c:vips_foreign_load_nsgif_load:
  567|    345|{
  568|    345|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load;
  569|    345|	VipsImage **t = (VipsImage **)
  570|    345|		vips_object_local_array(VIPS_OBJECT(load), 2);
  ------------------
  |  |  433|    345|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    345|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    345|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|       |
  572|    345|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_load:\n");
  ------------------
  |  |   47|    345|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    345|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    345|	{ \
  |  |   49|    345|		; \
  |  |   50|    345|	} \
  |  |   51|    345|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    345|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|       |
  574|       |	/* Make the output pipeline.
  575|       |	 */
  576|    345|	t[0] = vips_image_new();
  577|    345|	if (vips_foreign_load_nsgif_set_header(gif, t[0]))
  ------------------
  |  Branch (577:6): [True: 0, False: 345]
  ------------------
  578|      0|		return -1;
  579|       |
  580|       |	/* Strips 8 pixels high to avoid too many tiny regions.
  581|       |	 */
  582|    345|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (582:6): [True: 0, False: 345]
  ------------------
  583|    345|			NULL, vips_foreign_load_nsgif_generate, NULL, gif, NULL) ||
  584|    345|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (584:3): [True: 0, False: 345]
  ------------------
  585|    345|			"tile_height",
  586|    345|			vips_foreign_load_nsgif_tile_height(gif),
  587|    345|			NULL) ||
  588|    345|		vips_image_write(t[1], load->real))
  ------------------
  |  Branch (588:3): [True: 100, False: 245]
  ------------------
  589|    100|		return -1;
  590|       |
  591|    245|	return 0;
  592|    345|}
nsgifload.c:vips_foreign_load_nsgif_generate:
  479|  4.24k|{
  480|  4.24k|	VipsRect *r = &out_region->valid;
  481|  4.24k|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) a;
  482|       |
  483|  4.24k|	int y;
  484|       |
  485|       |#ifdef VERBOSE
  486|       |	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_generate: "
  487|       |				   "top = %d, height = %d\n",
  488|       |		r->top, r->height);
  489|       |#endif /*VERBOSE*/
  490|       |
  491|  14.8k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (491:14): [True: 10.6k, False: 4.14k]
  ------------------
  492|       |		/* The page for this output line, and the line number in page.
  493|       |		 */
  494|  10.6k|		int page = (r->top + y) / gif->info->height + gif->page;
  495|  10.6k|		int line = (r->top + y) % gif->info->height;
  496|       |
  497|  10.6k|		nsgif_error result;
  498|  10.6k|		VipsPel *p, *q;
  499|       |
  500|  10.6k|		g_assert(line >= 0 && line < gif->info->height);
  ------------------
  |  |  166|  10.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|  10.6k|		g_assert(page >= 0 && page < gif->info->frame_count);
  ------------------
  |  |  166|  10.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|       |
  503|  10.6k|		if (gif->frame_number != page) {
  ------------------
  |  Branch (503:7): [True: 345, False: 10.3k]
  ------------------
  504|    345|			result = nsgif_frame_decode(gif->anim,
  505|    345|				page, &gif->bitmap);
  506|    345|			VIPS_DEBUG_MSG("  nsgif_frame_decode(%d) = %d\n",
  ------------------
  |  |   47|    345|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    345|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    345|	{ \
  |  |   49|    345|		; \
  |  |   50|    345|	} \
  |  |   51|    345|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    345|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|    345|				page, result);
  508|    345|			if (result != NSGIF_OK) {
  ------------------
  |  Branch (508:8): [True: 100, False: 245]
  ------------------
  509|    100|				vips_foreign_load_nsgif_error(gif, result);
  510|    100|				return -1;
  511|    100|			}
  512|       |
  513|       |#ifdef VERBOSE
  514|       |			print_frame(nsgif_get_frame_info(gif->anim, page));
  515|       |#endif /*VERBOSE*/
  516|       |
  517|    245|			gif->frame_number = page;
  518|    245|		}
  519|       |
  520|  10.5k|		p = (VipsPel *) gif->bitmap + line * gif->info->width * sizeof(int);
  521|  10.5k|		q = VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  10.5k|	((R)->data + \
  |  |  228|  10.5k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  10.5k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  10.5k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  10.5k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  10.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  10.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|  10.5k|		if (gif->has_transparency)
  ------------------
  |  Branch (522:7): [True: 0, False: 10.5k]
  ------------------
  523|      0|			memcpy(q, p, VIPS_REGION_SIZEOF_LINE(out_region));
  ------------------
  |  |  203|      0|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|  10.5k|		else {
  525|  10.5k|			int i;
  526|       |
  527|   466k|			for (i = 0; i < r->width; i++) {
  ------------------
  |  Branch (527:16): [True: 455k, False: 10.5k]
  ------------------
  528|   455k|				q[0] = p[0];
  529|   455k|				q[1] = p[1];
  530|   455k|				q[2] = p[2];
  531|       |
  532|   455k|				q += 3;
  533|   455k|				p += 4;
  534|   455k|			}
  535|  10.5k|		}
  536|  10.5k|	}
  537|       |
  538|  4.14k|	return 0;
  539|  4.24k|}
nsgifload.c:vips_foreign_load_nsgif_init:
  674|    749|{
  675|    749|	nsgif_error result = nsgif_create(
  676|    749|		&vips_foreign_load_nsgif_bitmap_callbacks,
  677|    749|		NSGIF_BITMAP_FMT_R8G8B8A8,
  678|    749|		&gif->anim);
  679|    749|	if (result != NSGIF_OK) {
  ------------------
  |  Branch (679:6): [True: 0, False: 749]
  ------------------
  680|      0|		VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif);
  ------------------
  |  |  441|      0|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|       |
  682|      0|		vips_error(class->nickname, "%s",
  683|      0|			nsgif_strerror(result));
  684|      0|		return;
  685|      0|	}
  686|       |
  687|    749|	gif->n = 1;
  688|    749|	gif->gif_n = 1;
  689|    749|	gif->frame_number = -1;
  690|    749|	gif->bitmap = NULL;
  691|    749|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_create:
  636|    345|{
  637|       |	/* GIF has a limit of 64k per axis -- double-check this.
  638|       |	 */
  639|    345|	if (width <= 0 ||
  ------------------
  |  Branch (639:6): [True: 0, False: 345]
  ------------------
  640|    345|		width > 65536 ||
  ------------------
  |  Branch (640:3): [True: 0, False: 345]
  ------------------
  641|    345|		height <= 0 ||
  ------------------
  |  Branch (641:3): [True: 0, False: 345]
  ------------------
  642|    345|		height > 65536) {
  ------------------
  |  Branch (642:3): [True: 0, False: 345]
  ------------------
  643|      0|		vips_error("gifload",
  644|      0|			"%s", _("bad image dimensions"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  645|      0|		return NULL;
  646|      0|	}
  647|       |
  648|    345|	return g_malloc0((gsize) width * height * 4);
  649|    345|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_destroy:
  661|    345|{
  662|    345|	g_assert(bitmap);
  ------------------
  |  |  166|    345|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    345|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    345|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|    345|	g_free(bitmap);
  664|    345|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_get_buffer:
  653|    346|{
  654|    346|	g_assert(bitmap);
  ------------------
  |  |  166|    346|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    346|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    346|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|       |
  656|    346|	return bitmap;
  657|    346|}
nsgifload.c:vips_foreign_load_nsgif_file_class_init:
  747|      1|{
  748|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  750|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  751|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  752|       |
  753|      1|	gobject_class->set_property = vips_object_set_property;
  754|      1|	gobject_class->get_property = vips_object_get_property;
  755|       |
  756|      1|	object_class->nickname = "gifload";
  757|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  758|      1|	object_class->build = vips_foreign_load_gif_file_build;
  759|       |
  760|      1|	foreign_class->suffs = vips_foreign_nsgif_suffs;
  761|       |
  762|      1|	load_class->is_a = vips_foreign_load_nsgif_file_is_a;
  763|       |
  764|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  765|      1|		_("Filename"),
  766|      1|		_("Filename to load from"),
  767|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  768|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifFile, filename),
  769|      1|		NULL);
  770|      1|}
nsgifload.c:vips_foreign_load_nsgif_is_a_source:
  198|  28.3k|{
  199|  28.3k|	const unsigned char *data;
  200|       |
  201|  28.3k|	if ((data = vips_source_sniff(source, 4)) &&
  ------------------
  |  Branch (201:6): [True: 28.2k, False: 66]
  ------------------
  202|  28.3k|		data[0] == 'G' &&
  ------------------
  |  Branch (202:3): [True: 783, False: 27.4k]
  ------------------
  203|  28.3k|		data[1] == 'I' &&
  ------------------
  |  Branch (203:3): [True: 770, False: 13]
  ------------------
  204|  28.3k|		data[2] == 'F' &&
  ------------------
  |  Branch (204:3): [True: 758, False: 12]
  ------------------
  205|  28.3k|		data[3] == '8')
  ------------------
  |  Branch (205:3): [True: 749, False: 9]
  ------------------
  206|    749|		return TRUE;
  ------------------
  |  |  798|    749|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    749|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  207|       |
  208|  27.5k|	return FALSE;
  ------------------
  |  |  794|  27.5k|#define	FALSE	(0)
  ------------------
  209|  28.3k|}
nsgifload.c:vips_foreign_load_nsgif_buffer_class_init:
  828|      1|{
  829|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  831|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  832|       |
  833|      1|	gobject_class->set_property = vips_object_set_property;
  834|      1|	gobject_class->get_property = vips_object_get_property;
  835|       |
  836|      1|	object_class->nickname = "gifload_buffer";
  837|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  838|      1|	object_class->build = vips_foreign_load_nsgif_buffer_build;
  839|       |
  840|      1|	load_class->is_a_buffer = vips_foreign_load_nsgif_buffer_is_a_buffer;
  841|       |
  842|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  843|      1|		_("Buffer"),
  844|      1|		_("Buffer to load from"),
  845|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  846|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifBuffer, blob),
  847|      1|		VIPS_TYPE_BLOB);
  848|      1|}
nsgifload.c:vips_foreign_load_nsgif_buffer_build:
  793|    749|{
  794|    749|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) object;
  795|    749|	VipsForeignLoadNsgifBuffer *buffer =
  796|    749|		(VipsForeignLoadNsgifBuffer *) object;
  797|       |
  798|    749|	if (buffer->blob &&
  ------------------
  |  Branch (798:6): [True: 749, False: 0]
  ------------------
  799|    749|		!(gif->source = vips_source_new_from_memory(
  ------------------
  |  Branch (799:3): [True: 0, False: 749]
  ------------------
  800|    749|			  buffer->blob->data,
  801|    749|			  buffer->blob->length)))
  802|      0|		return -1;
  803|       |
  804|    749|	if (VIPS_OBJECT_CLASS(vips_foreign_load_nsgif_buffer_parent_class)
  ------------------
  |  |  435|    749|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    749|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    749|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (804:6): [True: 337, False: 412]
  ------------------
  805|    749|			->build(object))
  806|    337|		return -1;
  807|       |
  808|    412|	return 0;
  809|    749|}
nsgifload.c:vips_foreign_load_nsgif_buffer_is_a_buffer:
  813|  28.3k|{
  814|  28.3k|	VipsSource *source;
  815|  28.3k|	gboolean result;
  816|       |
  817|  28.3k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (817:6): [True: 0, False: 28.3k]
  ------------------
  818|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  819|  28.3k|	result = vips_foreign_load_nsgif_is_a_source(source);
  820|  28.3k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  28.3k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  28.3k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  28.3k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  28.3k|	{ \
  |  |  |  |   43|  28.3k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 28.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  28.3k|			(void) F((S)); \
  |  |  |  |   45|  28.3k|			(S) = 0; \
  |  |  |  |   46|  28.3k|		} \
  |  |  |  |   47|  28.3k|	} \
  |  |  |  |   48|  28.3k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  28.3k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  821|       |
  822|  28.3k|	return result;
  823|  28.3k|}
nsgifload.c:vips_foreign_load_nsgif_buffer_init:
  852|    749|{
  853|    749|}
nsgifload.c:vips_foreign_load_nsgif_source_class_init:
  891|      1|{
  892|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  893|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  894|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  895|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  896|       |
  897|      1|	gobject_class->set_property = vips_object_set_property;
  898|      1|	gobject_class->get_property = vips_object_get_property;
  899|       |
  900|      1|	object_class->nickname = "gifload_source";
  901|      1|	object_class->description = _("load gif from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  902|      1|	object_class->build = vips_foreign_load_nsgif_source_build;
  903|       |
  904|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  905|       |
  906|      1|	load_class->is_a_source = vips_foreign_load_nsgif_is_a_source;
  907|       |
  908|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  909|      1|		_("Source"),
  910|      1|		_("Source to load from"),
  911|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  912|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifSource, source),
  913|      1|		VIPS_TYPE_SOURCE);
  914|      1|}

vips__pdf_is_a_buffer:
   56|  12.8k|{
   57|  12.8k|	const char *str = (const char *) buf;
   58|       |
   59|  12.8k|	if (len < 4)
  ------------------
  |  Branch (59:6): [True: 58, False: 12.7k]
  ------------------
   60|     58|		return FALSE;
  ------------------
  |  |  794|     58|#define	FALSE	(0)
  ------------------
   61|       |
   62|  39.3M|	for (size_t i = 0; i < len - 4; i++)
  ------------------
  |  Branch (62:21): [True: 39.3M, False: 12.6k]
  ------------------
   63|  39.3M|		if (vips_isprefix("%PDF", str + i))
  ------------------
  |  Branch (63:7): [True: 113, False: 39.3M]
  ------------------
   64|    113|			return TRUE;
  ------------------
  |  |  798|  12.9k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    113|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   65|       |
   66|  12.6k|	return FALSE;
  ------------------
  |  |  794|  12.6k|#define	FALSE	(0)
  ------------------
   67|  12.7k|}

pdfiumload.c:vips_foreign_load_pdf_class_init:
  675|      1|{
  676|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  678|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  679|       |
  680|      1|	gobject_class->dispose = vips_foreign_load_pdf_dispose;
  681|      1|	gobject_class->set_property = vips_object_set_property;
  682|      1|	gobject_class->get_property = vips_object_get_property;
  683|       |
  684|      1|	object_class->nickname = "pdfload_base";
  685|      1|	object_class->description = _("load PDF with PDFium");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  686|      1|	object_class->build = vips_foreign_load_pdf_build;
  687|       |
  688|      1|	load_class->get_flags_filename =
  689|      1|		vips_foreign_load_pdf_get_flags_filename;
  690|      1|	load_class->get_flags = vips_foreign_load_pdf_get_flags;
  691|      1|	load_class->header = vips_foreign_load_pdf_header;
  692|      1|	load_class->load = vips_foreign_load_pdf_load;
  693|       |
  694|      1|	VIPS_ARG_INT(class, "page", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  695|      1|		_("Page"),
  696|      1|		_("First page to load"),
  697|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  698|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, page_no),
  699|      1|		0, 100000, 0);
  700|       |
  701|      1|	VIPS_ARG_INT(class, "n", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  702|      1|		_("n"),
  703|      1|		_("Number of pages to load, -1 for all"),
  704|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  705|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, n),
  706|      1|		-1, 100000, 1);
  707|       |
  708|      1|	VIPS_ARG_DOUBLE(class, "dpi", 12,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  709|      1|		_("DPI"),
  710|      1|		_("DPI to render at"),
  711|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  712|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, dpi),
  713|      1|		0.001, 100000.0, 72.0);
  714|       |
  715|      1|	VIPS_ARG_DOUBLE(class, "scale", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  716|      1|		_("Scale"),
  717|      1|		_("Factor to scale by"),
  718|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  719|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, scale),
  720|      1|		0.0, 100000.0, 1.0);
  721|       |
  722|      1|	VIPS_ARG_BOXED(class, "background", 14,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  723|      1|		_("Background"),
  724|      1|		_("Background colour"),
  725|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  726|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, background),
  727|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  728|       |
  729|      1|	VIPS_ARG_STRING(class, "password", 25,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  730|      1|		_("Password"),
  731|      1|		_("Password to decrypt with"),
  732|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  733|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, password),
  734|      1|		NULL);
  735|      1|}
pdfiumload.c:vips_foreign_load_pdf_dispose:
  214|    111|{
  215|    111|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) gobject;
  216|       |
  217|    111|	vips_foreign_load_pdf_close(pdf);
  218|       |
  219|    111|	G_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    111|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    111|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    111|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|    111|}
pdfiumload.c:vips_foreign_load_pdf_close:
  201|    111|{
  202|    111|	g_mutex_lock(&vips_pdfium_mutex);
  203|       |
  204|    111|	VIPS_FREEF(FPDF_ClosePage, pdf->page);
  ------------------
  |  |   41|    111|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    111|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    111|	{ \
  |  |   43|    111|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 29, False: 82]
  |  |  ------------------
  |  |   44|     29|			(void) F((S)); \
  |  |   45|     29|			(S) = 0; \
  |  |   46|     29|		} \
  |  |   47|    111|	} \
  |  |   48|    111|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    111|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    111|	VIPS_FREEF(FPDFDOC_ExitFormFillEnvironment, pdf->form);
  ------------------
  |  |   41|    111|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    111|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    111|	{ \
  |  |   43|    111|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 32, False: 79]
  |  |  ------------------
  |  |   44|     32|			(void) F((S)); \
  |  |   45|     32|			(S) = 0; \
  |  |   46|     32|		} \
  |  |   47|    111|	} \
  |  |   48|    111|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    111|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|    111|	VIPS_FREEF(FPDF_CloseDocument, pdf->doc);
  ------------------
  |  |   41|    111|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    111|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    111|	{ \
  |  |   43|    111|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 32, False: 79]
  |  |  ------------------
  |  |   44|     32|			(void) F((S)); \
  |  |   45|     32|			(S) = 0; \
  |  |   46|     32|		} \
  |  |   47|    111|	} \
  |  |   48|    111|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    111|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|    111|	VIPS_UNREF(pdf->source);
  ------------------
  |  |   57|    111|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    111|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    111|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    111|	{ \
  |  |  |  |   43|    111|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    111|			(void) F((S)); \
  |  |  |  |   45|    111|			(S) = 0; \
  |  |  |  |   46|    111|		} \
  |  |  |  |   47|    111|	} \
  |  |  |  |   48|    111|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    111|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|       |
  209|    111|	g_mutex_unlock(&vips_pdfium_mutex);
  210|    111|}
pdfiumload.c:vips_foreign_load_pdf_build:
  269|    113|{
  270|    113|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|    113|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  271|       |
  272|    113|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object;
  273|    113|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf);
  ------------------
  |  |  441|    113|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    113|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    113|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|       |
  275|    113|	gint64 length;
  276|       |
  277|    113|	VIPS_ONCE(&once, vips_pdfium_init_cb, NULL);
  ------------------
  |  |   93|    113|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    113|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|    113|	{ \
  |  |   95|    113|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|    113|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|    113| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|    113|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|    113|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|    113|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 112]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|    113|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|    113|   else                                         \
  |  |  |  |  |  |  931|    113|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|    113|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|    113|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|    113|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|    113|	} \
  |  |   98|    113|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    113|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|       |
  279|    113|	if (!vips_object_argument_isset(object, "scale"))
  ------------------
  |  Branch (279:6): [True: 113, False: 0]
  ------------------
  280|    113|		pdf->scale = pdf->dpi / 72.0; // FIXME: Invalidates operation cache
  281|       |
  282|    113|	pdf->form_callbacks.version = 2;
  283|       |
  284|       |	/* pdfium must know the file length, unfortunately.
  285|       |	 */
  286|    113|	if (pdf->source) {
  ------------------
  |  Branch (286:6): [True: 113, False: 0]
  ------------------
  287|    113|		if ((length = vips_source_length(pdf->source)) <= 0)
  ------------------
  |  Branch (287:7): [True: 0, False: 113]
  ------------------
  288|      0|			return -1;
  289|    113|		if (length > 1 << 30) {
  ------------------
  |  Branch (289:7): [True: 0, False: 113]
  ------------------
  290|      0|			vips_error(class->nickname,
  291|      0|				_("%s: too large for pdfium"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  292|      0|				vips_connection_nick(
  293|      0|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  294|      0|			return -1;
  295|      0|		}
  296|    113|		pdf->file_access.m_FileLen = length;
  297|    113|		pdf->file_access.m_GetBlock = vips_pdfium_GetBlock;
  298|    113|		pdf->file_access.m_Param = pdf;
  299|       |
  300|    113|		g_mutex_lock(&vips_pdfium_mutex);
  301|       |
  302|    113|		if (!(pdf->doc = FPDF_LoadCustomDocument(&pdf->file_access,
  ------------------
  |  Branch (302:7): [True: 79, False: 34]
  ------------------
  303|    113|				  pdf->password))) {
  304|     79|			g_mutex_unlock(&vips_pdfium_mutex);
  305|     79|			vips_pdfium_error();
  306|     79|			vips_error("pdfload",
  307|     79|				_("%s: unable to load"),
  ------------------
  |  |   30|     79|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     79|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  308|     79|				vips_connection_nick(
  309|     79|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|     79|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     79|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     79|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|     79|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  310|     79|			return -1;
  311|     79|		}
  312|       |
  313|     34|		if (!(pdf->form = FPDFDOC_InitFormFillEnvironment(pdf->doc,
  ------------------
  |  Branch (313:7): [True: 0, False: 34]
  ------------------
  314|     34|				  &pdf->form_callbacks))) {
  315|      0|			g_mutex_unlock(&vips_pdfium_mutex);
  316|      0|			vips_pdfium_error();
  317|      0|			vips_error("pdfload",
  318|      0|				_("%s: unable to initialize form fill environment"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  319|      0|				vips_connection_nick(
  320|      0|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  321|      0|			return -1;
  322|      0|		}
  323|       |
  324|     34|		g_mutex_unlock(&vips_pdfium_mutex);
  325|     34|	}
  326|       |
  327|     34|	if (VIPS_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->build(object))
  ------------------
  |  |  435|     34|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     34|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     34|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (327:6): [True: 7, False: 27]
  ------------------
  328|      7|		return -1;
  329|       |
  330|     27|	return 0;
  331|     34|}
pdfiumload.c:vips_pdfium_init_cb:
  224|      1|{
  225|      1|	FPDF_LIBRARY_CONFIG config;
  226|       |
  227|      1|	config.version = 2;
  228|      1|	config.m_pUserFontPaths = NULL;
  229|      1|	config.m_pIsolate = NULL;
  230|      1|	config.m_v8EmbedderSlot = 0;
  231|       |
  232|      1|	FPDF_InitLibraryWithConfig(&config);
  233|       |
  234|      1|	return NULL;
  235|      1|}
pdfiumload.c:vips_pdfium_GetBlock:
  242|  42.5k|{
  243|  42.5k|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) param;
  244|       |
  245|       |	/* PDFium guarantees these.
  246|       |	 */
  247|  42.5k|	g_assert(size > 0);
  ------------------
  |  |  166|  42.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  42.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  42.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|  42.5k|	g_assert(position >= 0);
  ------------------
  |  |  166|  42.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  42.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  42.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|  42.5k|	g_assert(position + size <= pdf->file_access.m_FileLen);
  ------------------
  |  |  166|  42.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  42.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  42.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|       |
  251|  42.5k|	if (vips_source_seek(pdf->source, position, SEEK_SET) < 0)
  ------------------
  |  Branch (251:6): [True: 0, False: 42.5k]
  ------------------
  252|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  253|       |
  254|  85.1k|	while (size > 0) {
  ------------------
  |  Branch (254:9): [True: 42.5k, False: 42.5k]
  ------------------
  255|  42.5k|		gint64 bytes_read;
  256|       |
  257|  42.5k|		if ((bytes_read =
  ------------------
  |  Branch (257:7): [True: 0, False: 42.5k]
  ------------------
  258|  42.5k|					vips_source_read(pdf->source, pBuf, size)) < 0)
  259|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  260|  42.5k|		pBuf += bytes_read;
  261|  42.5k|		size -= bytes_read;
  262|  42.5k|	}
  263|       |
  264|  42.5k|	return TRUE;
  ------------------
  |  |  798|  42.5k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  42.5k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  265|  42.5k|}
pdfiumload.c:vips_pdfium_error:
  189|     81|{
  190|     81|	int err = FPDF_GetLastError();
  191|       |
  192|     81|	if (err >= 0 &&
  ------------------
  |  Branch (192:6): [True: 81, False: 0]
  ------------------
  193|     81|		err < VIPS_NUMBER(vips_pdfium_errors))
  ------------------
  |  |   60|     81|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (193:3): [True: 81, False: 0]
  ------------------
  194|     81|		vips_error("pdfload", "%s", _(vips_pdfium_errors[err]));
  ------------------
  |  |   30|     81|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     81|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  195|      0|	else
  196|      0|		vips_error("pdfload", "%s", _("unknown error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  197|     81|}
pdfiumload.c:vips_foreign_load_pdf_get_flags:
  343|     34|{
  344|     34|	return VIPS_FOREIGN_PARTIAL;
  345|     34|}
pdfiumload.c:vips_foreign_load_pdf_header:
  455|     34|{
  456|     34|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|     34|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     34|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     34|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|     34|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load;
  458|       |
  459|     34|	int top;
  460|     34|	int i;
  461|       |
  462|       |#ifdef DEBUG
  463|       |	printf("vips_foreign_load_pdf_header: %p\n", pdf);
  464|       |#endif /*DEBUG*/
  465|       |
  466|     34|	g_mutex_lock(&vips_pdfium_mutex);
  467|     34|	pdf->n_pages = FPDF_GetPageCount(pdf->doc);
  468|     34|	g_mutex_unlock(&vips_pdfium_mutex);
  469|       |
  470|       |	/* @n == -1 means until the end of the doc.
  471|       |	 */
  472|     34|	if (pdf->n == -1)
  ------------------
  |  Branch (472:6): [True: 0, False: 34]
  ------------------
  473|      0|		pdf->n = pdf->n_pages - pdf->page_no; // FIXME: Invalidates operation cache
  474|       |
  475|     34|	if (pdf->page_no + pdf->n > pdf->n_pages ||
  ------------------
  |  Branch (475:6): [True: 1, False: 33]
  ------------------
  476|     34|		pdf->page_no < 0 ||
  ------------------
  |  Branch (476:3): [True: 0, False: 33]
  ------------------
  477|     34|		pdf->n <= 0) {
  ------------------
  |  Branch (477:3): [True: 0, False: 33]
  ------------------
  478|      1|		vips_error(class->nickname, "%s", _("pages out of range"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  479|      1|		return -1;
  480|      1|	}
  481|       |
  482|       |	/* Lay out the pages in our output image.
  483|       |	 */
  484|     33|	if (!(pdf->pages = VIPS_ARRAY(pdf, pdf->n, VipsRect)))
  ------------------
  |  |   72|     33|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     33|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     33|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     33|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     33|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (484:6): [True: 0, False: 33]
  ------------------
  485|      0|		return -1;
  486|       |
  487|     33|	top = 0;
  488|     33|	pdf->image.left = 0;
  489|     33|	pdf->image.top = 0;
  490|     33|	pdf->image.width = 0;
  491|     33|	pdf->image.height = 0;
  492|     60|	for (i = 0; i < pdf->n; i++) {
  ------------------
  |  Branch (492:14): [True: 33, False: 27]
  ------------------
  493|     33|		if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i))
  ------------------
  |  Branch (493:7): [True: 2, False: 31]
  ------------------
  494|      2|			return -1;
  495|     31|		pdf->pages[i].left = 0;
  496|     31|		pdf->pages[i].top = top;
  497|       |		/* We do round to nearest, in the same way that vips_resize()
  498|       |		 * does round to nearest. Without this, things like
  499|       |		 * shrink-on-load will break.
  500|       |		 */
  501|     31|		pdf->pages[i].width = VIPS_RINT(
  ------------------
  |  |   74|     31|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  502|     31|			FPDF_GetPageWidth(pdf->page) * pdf->scale);
  503|     31|		pdf->pages[i].height = VIPS_RINT(
  ------------------
  |  |   74|     31|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  504|     31|			FPDF_GetPageHeight(pdf->page) * pdf->scale);
  505|       |
  506|       |		/* PDFium allows page width or height to be less than 1 (!!).
  507|       |		 */
  508|     31|		if (pdf->pages[i].width < 1 ||
  ------------------
  |  Branch (508:7): [True: 1, False: 30]
  ------------------
  509|     31|			pdf->pages[i].height < 1 ||
  ------------------
  |  Branch (509:4): [True: 0, False: 30]
  ------------------
  510|     31|			pdf->pages[i].width > VIPS_MAX_COORD ||
  ------------------
  |  |   69|     61|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (510:4): [True: 3, False: 27]
  ------------------
  511|     31|			pdf->pages[i].height > VIPS_MAX_COORD) {
  ------------------
  |  |   69|     27|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (511:4): [True: 0, False: 27]
  ------------------
  512|      4|			vips_error(class->nickname,
  513|      4|				"%s", _("page size out of range"));
  ------------------
  |  |   30|      4|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      4|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  514|      4|			return -1;
  515|      4|		}
  516|       |
  517|     27|		if (pdf->pages[i].width > pdf->image.width)
  ------------------
  |  Branch (517:7): [True: 27, False: 0]
  ------------------
  518|     27|			pdf->image.width = pdf->pages[i].width;
  519|     27|		pdf->image.height += pdf->pages[i].height;
  520|       |
  521|     27|		top += pdf->pages[i].height;
  522|     27|	}
  523|       |
  524|       |	/* If all pages are the same height, we can tag this as a toilet roll
  525|       |	 * image.
  526|       |	 */
  527|     27|	for (i = 1; i < pdf->n; i++)
  ------------------
  |  Branch (527:14): [True: 0, False: 27]
  ------------------
  528|      0|		if (pdf->pages[i].height != pdf->pages[0].height)
  ------------------
  |  Branch (528:7): [True: 0, False: 0]
  ------------------
  529|      0|			break;
  530|       |
  531|       |	/* Only set page-height if we have more than one page, or this could
  532|       |	 * accidentally turn into an animated image later.
  533|       |	 */
  534|     27|	if (pdf->n > 1)
  ------------------
  |  Branch (534:6): [True: 0, False: 27]
  ------------------
  535|      0|		vips_image_set_int(load->out,
  536|      0|			VIPS_META_PAGE_HEIGHT, pdf->pages[0].height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  537|       |
  538|     27|	vips_foreign_load_pdf_set_image(pdf, load->out);
  539|       |
  540|       |	/* Convert the background to the image format.
  541|       |	 */
  542|     27|	if (!(pdf->ink = vips__vector_to_ink(class->nickname,
  ------------------
  |  Branch (542:6): [True: 0, False: 27]
  ------------------
  543|     27|			  load->out,
  544|     27|			  VIPS_AREA(pdf->background)->data, NULL,
  ------------------
  |  |  137|     27|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  545|     27|			  VIPS_AREA(pdf->background)->n)))
  ------------------
  |  |  137|     27|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  546|      0|		return -1;
  547|     27|	vips__bgra2rgba((guint32 *) pdf->ink, 1);
  548|       |
  549|     27|	return 0;
  550|     27|}
pdfiumload.c:vips_foreign_load_pdf_get_page:
  349|     33|{
  350|     33|	if (pdf->current_page != page_no) {
  ------------------
  |  Branch (350:6): [True: 33, False: 0]
  ------------------
  351|     33|		VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf);
  ------------------
  |  |  441|     33|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     33|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     33|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|       |
  353|     33|		g_mutex_lock(&vips_pdfium_mutex);
  354|       |
  355|     33|		VIPS_FREEF(FPDF_ClosePage, pdf->page);
  ------------------
  |  |   41|     33|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     33|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|     33|	{ \
  |  |   43|     33|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 33]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|     33|	} \
  |  |   48|     33|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     33|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|     33|		pdf->current_page = -1;
  357|       |
  358|       |#ifdef DEBUG
  359|       |		printf("vips_foreign_load_pdf_get_page: %d\n", page_no);
  360|       |#endif /*DEBUG*/
  361|       |
  362|     33|		if (!(pdf->page = FPDF_LoadPage(pdf->doc, page_no))) {
  ------------------
  |  Branch (362:7): [True: 2, False: 31]
  ------------------
  363|      2|			g_mutex_unlock(&vips_pdfium_mutex);
  364|      2|			vips_pdfium_error();
  365|      2|			vips_error(class->nickname,
  366|      2|				_("unable to load page %d"), page_no);
  ------------------
  |  |   30|      2|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  367|      2|			return -1;
  368|      2|		}
  369|     31|		pdf->current_page = page_no;
  370|       |
  371|     31|		g_mutex_unlock(&vips_pdfium_mutex);
  372|     31|	}
  373|       |
  374|     31|	return 0;
  375|     33|}
pdfiumload.c:vips_foreign_load_pdf_set_image:
  397|     27|{
  398|     27|	int i;
  399|     27|	double res;
  400|       |
  401|       |#ifdef DEBUG
  402|       |	printf("vips_foreign_load_pdf_set_image: %p\n", pdf);
  403|       |#endif /*DEBUG*/
  404|       |
  405|       |	/* We render to a tilecache, so it has to be SMALLTILE.
  406|       |	 */
  407|     27|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL))
  ------------------
  |  Branch (407:6): [True: 0, False: 27]
  ------------------
  408|      0|		return -1;
  409|       |
  410|       |	/* Extract and attach metadata. Set the old name too for compat.
  411|       |	 */
  412|     27|	vips_image_set_int(out, "pdf-n_pages", pdf->n_pages);
  413|     27|	vips_image_set_int(out, VIPS_META_N_PAGES, pdf->n_pages);
  ------------------
  |  |  165|     27|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  414|       |
  415|     27|	g_mutex_lock(&vips_pdfium_mutex);
  416|       |
  417|    189|	for (i = 0; i < n_metadata; i++) {
  ------------------
  |  Branch (417:14): [True: 162, False: 27]
  ------------------
  418|    162|		VipsForeignLoadPdfMetadata *metadata =
  419|    162|			&vips_foreign_load_pdf_metadata[i];
  420|       |
  421|    162|		char text[1024];
  422|    162|		int len;
  423|       |
  424|    162|		len = FPDF_GetMetaText(pdf->doc, metadata->tag, text, 1024);
  425|    162|		if (len > 0) {
  ------------------
  |  Branch (425:7): [True: 84, False: 78]
  ------------------
  426|     84|			char *str;
  427|       |
  428|       |			/* Silently ignore coding errors.
  429|       |			 */
  430|     84|			if ((str = g_utf16_to_utf8((gunichar2 *) text, len,
  ------------------
  |  Branch (430:8): [True: 84, False: 0]
  ------------------
  431|     84|					 NULL, NULL, NULL))) {
  432|     84|				vips_image_set_string(out,
  433|     84|					metadata->field, str);
  434|     84|				g_free(str);
  435|     84|			}
  436|     84|		}
  437|    162|	}
  438|       |
  439|     27|	g_mutex_unlock(&vips_pdfium_mutex);
  440|       |
  441|       |	/* We need pixels/mm for vips.
  442|       |	 */
  443|     27|	res = pdf->dpi / 25.4;
  444|       |
  445|     27|	vips_image_init_fields(out,
  446|     27|		pdf->image.width, pdf->image.height,
  447|     27|		4, VIPS_FORMAT_UCHAR,
  448|     27|		VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res);
  449|       |
  450|     27|	return 0;
  451|     27|}
pdfiumload.c:vips_foreign_load_pdf_init:
  739|    113|{
  740|    113|	pdf->dpi = 72.0;
  741|    113|	pdf->scale = 1.0;
  742|    113|	pdf->n = 1;
  743|    113|	pdf->current_page = -1;
  744|    113|	pdf->background = vips_array_double_newv(1, 255.0);
  745|    113|}
pdfiumload.c:vips_foreign_load_pdf_file_class_init:
  793|      1|{
  794|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  796|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  797|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  798|       |
  799|      1|	gobject_class->set_property = vips_object_set_property;
  800|      1|	gobject_class->get_property = vips_object_get_property;
  801|       |
  802|      1|	object_class->nickname = "pdfload";
  803|      1|	object_class->description = _("load PDF from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  804|      1|	object_class->build = vips_foreign_load_pdf_file_build;
  805|       |
  806|      1|	foreign_class->suffs = vips__pdf_suffs;
  807|       |
  808|      1|	load_class->is_a = vips__pdf_is_a_file;
  809|      1|	load_class->header = vips_foreign_load_pdf_file_header;
  810|       |
  811|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  812|      1|		_("Filename"),
  813|      1|		_("Filename to load from"),
  814|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  815|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfFile, filename),
  816|      1|		NULL);
  817|      1|}
pdfiumload.c:vips_foreign_load_pdf_buffer_class_init:
  857|      1|{
  858|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  860|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  861|       |
  862|      1|	gobject_class->set_property = vips_object_set_property;
  863|      1|	gobject_class->get_property = vips_object_get_property;
  864|       |
  865|      1|	object_class->nickname = "pdfload_buffer";
  866|      1|	object_class->description = _("load PDF from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  867|      1|	object_class->build = vips_foreign_load_pdf_buffer_build;
  868|       |
  869|      1|	load_class->is_a_buffer = vips__pdf_is_a_buffer;
  870|       |
  871|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  872|      1|		_("Buffer"),
  873|      1|		_("Buffer to load from"),
  874|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  875|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfBuffer, buf),
  876|      1|		VIPS_TYPE_BLOB);
  877|      1|}
pdfiumload.c:vips_foreign_load_pdf_buffer_build:
  840|    113|{
  841|    113|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object;
  842|    113|	VipsForeignLoadPdfBuffer *buffer = (VipsForeignLoadPdfBuffer *) pdf;
  843|       |
  844|    113|	if (buffer->buf &&
  ------------------
  |  Branch (844:6): [True: 113, False: 0]
  ------------------
  845|    113|		!(pdf->source = vips_source_new_from_memory(
  ------------------
  |  Branch (845:3): [True: 0, False: 113]
  ------------------
  846|    113|			  VIPS_AREA(buffer->buf)->data,
  ------------------
  |  |  137|    113|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  847|    113|			  VIPS_AREA(buffer->buf)->length)))
  ------------------
  |  |  137|    113|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  848|      0|		return -1;
  849|       |
  850|    113|	return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_buffer_parent_class)
  ------------------
  |  |  435|    113|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    113|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    113|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|    113|		->build(object);
  852|    113|}
pdfiumload.c:vips_foreign_load_pdf_buffer_init:
  881|    113|{
  882|    113|}
pdfiumload.c:vips_foreign_load_pdf_source_class_init:
  914|      1|{
  915|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  917|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  918|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  919|       |
  920|      1|	gobject_class->set_property = vips_object_set_property;
  921|      1|	gobject_class->get_property = vips_object_get_property;
  922|       |
  923|      1|	object_class->nickname = "pdfload_source";
  924|      1|	object_class->description = _("load PDF from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  925|      1|	object_class->build = vips_foreign_load_pdf_source_build;
  926|       |
  927|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  928|       |
  929|      1|	load_class->is_a_source = vips__pdf_is_a_source;
  930|       |
  931|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  932|      1|		_("Source"),
  933|      1|		_("Source to load from"),
  934|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  935|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfSource, source),
  936|      1|		VIPS_TYPE_SOURCE);
  937|      1|}

ppmload.c:vips_foreign_load_ppm_class_init:
  734|      1|{
  735|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  736|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  737|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  738|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  739|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  740|       |
  741|      1|	gobject_class->dispose = vips_foreign_load_ppm_dispose;
  742|      1|	gobject_class->set_property = vips_object_set_property;
  743|      1|	gobject_class->get_property = vips_object_get_property;
  744|       |
  745|      1|	object_class->nickname = "ppmload_base";
  746|      1|	object_class->description = _("load ppm base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  747|      1|	object_class->build = vips_foreign_load_ppm_build;
  748|       |
  749|       |	/* You're unlikely to want to use this on untrusted files.
  750|       |	 */
  751|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  752|       |
  753|      1|	foreign_class->suffs = vips__ppm_suffs;
  754|       |
  755|       |	/* We are fast at is_a(), so high priority.
  756|       |	 */
  757|      1|	foreign_class->priority = 200;
  758|       |
  759|      1|	load_class->get_flags = vips_foreign_load_ppm_get_flags;
  760|      1|	load_class->header = vips_foreign_load_ppm_header;
  761|      1|	load_class->load = vips_foreign_load_ppm_load;
  762|      1|}
ppmload.c:vips_foreign_load_ppm_file_class_init:
  814|      1|{
  815|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  817|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  818|       |
  819|      1|	gobject_class->set_property = vips_object_set_property;
  820|      1|	gobject_class->get_property = vips_object_get_property;
  821|       |
  822|      1|	object_class->nickname = "ppmload";
  823|      1|	object_class->description = _("load ppm from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  824|      1|	object_class->build = vips_foreign_load_ppm_file_build;
  825|       |
  826|      1|	load_class->is_a = vips_foreign_load_ppm_file_is_a;
  827|       |
  828|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  829|      1|		_("Filename"),
  830|      1|		_("Filename to load from"),
  831|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  832|      1|		G_STRUCT_OFFSET(VipsForeignLoadPpmFile, filename),
  833|      1|		NULL);
  834|      1|}
ppmload.c:vips_foreign_load_ppm_source_class_init:
  873|      1|{
  874|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  876|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  877|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  878|       |
  879|      1|	gobject_class->set_property = vips_object_set_property;
  880|      1|	gobject_class->get_property = vips_object_get_property;
  881|       |
  882|      1|	object_class->nickname = "ppmload_source";
  883|      1|	object_class->build = vips_foreign_load_ppm_source_build;
  884|       |
  885|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  886|       |
  887|      1|	load_class->is_a_source = vips_foreign_load_ppm_is_a_source;
  888|       |
  889|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  890|      1|		_("Source"),
  891|      1|		_("Source to load from"),
  892|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  893|      1|		G_STRUCT_OFFSET(VipsForeignLoadPpmSource, source),
  894|      1|		VIPS_TYPE_SOURCE);
  895|      1|}

ppmsave.c:vips_foreign_save_ppm_class_init:
  490|      1|{
  491|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  493|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  494|       |
  495|      1|	gobject_class->dispose = vips_foreign_save_ppm_dispose;
  496|      1|	gobject_class->set_property = vips_object_set_property;
  497|      1|	gobject_class->get_property = vips_object_get_property;
  498|       |
  499|      1|	object_class->nickname = "ppmsave_base";
  500|      1|	object_class->description = _("save to ppm");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  501|      1|	object_class->build = vips_foreign_save_ppm_build;
  502|       |
  503|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  504|      1|	save_class->format_table = bandfmt_ppm;
  505|       |
  506|      1|	VIPS_ARG_ENUM(class, "format", 2,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  507|      1|		_("Format"),
  508|      1|		_("Format to save in"),
  509|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  510|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, format),
  511|      1|		VIPS_TYPE_FOREIGN_PPM_FORMAT,
  512|      1|		VIPS_FOREIGN_PPM_FORMAT_PPM);
  513|       |
  514|      1|	VIPS_ARG_BOOL(class, "ascii", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  515|      1|		_("ASCII"),
  516|      1|		_("Save as ascii"),
  517|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  518|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, ascii),
  519|      1|		FALSE);
  520|       |
  521|      1|	VIPS_ARG_INT(class, "bitdepth", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  522|      1|		_("Bit depth"),
  523|      1|		_("Set to 1 to write as a 1 bit image"),
  524|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  525|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, bitdepth),
  526|      1|		0, 1, 0);
  527|       |
  528|      1|	VIPS_ARG_BOOL(class, "squash", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  529|      1|		_("Squash"),
  530|      1|		_("Save as one bit"),
  531|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  532|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, squash),
  533|      1|		FALSE);
  534|      1|}
ppmsave.c:vips_foreign_save_ppm_file_class_init:
  578|      1|{
  579|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  581|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  582|       |
  583|      1|	gobject_class->set_property = vips_object_set_property;
  584|      1|	gobject_class->get_property = vips_object_get_property;
  585|       |
  586|      1|	object_class->nickname = "ppmsave";
  587|      1|	object_class->description = _("save image to ppm file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  588|      1|	object_class->build = vips_foreign_save_ppm_file_build;
  589|       |
  590|      1|	foreign_class->suffs = vips__ppm_suffs;
  591|       |
  592|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  593|      1|		_("Filename"),
  594|      1|		_("Filename to save to"),
  595|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsForeignSavePpmFile, filename),
  597|      1|		NULL);
  598|      1|}
ppmsave.c:vips_foreign_save_ppm_target_class_init:
  635|      1|{
  636|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  638|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  639|       |
  640|      1|	gobject_class->set_property = vips_object_set_property;
  641|      1|	gobject_class->get_property = vips_object_get_property;
  642|       |
  643|      1|	object_class->nickname = "ppmsave_target";
  644|      1|	object_class->build = vips_foreign_save_ppm_target_build;
  645|       |
  646|      1|	foreign_class->suffs = vips__save_ppm_suffs;
  647|       |
  648|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  649|      1|		_("Target"),
  650|      1|		_("Target to save to"),
  651|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  652|      1|		G_STRUCT_OFFSET(VipsForeignSavePpmTarget, target),
  653|      1|		VIPS_TYPE_TARGET);
  654|      1|}
ppmsave.c:vips_foreign_save_pbm_target_class_init:
  670|      1|{
  671|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  672|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  673|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  674|       |
  675|      1|	object_class->nickname = "pbmsave_target";
  676|      1|	object_class->description = _("save image in pbm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  677|       |
  678|      1|	foreign_class->suffs = vips__save_pbm_suffs;
  679|       |
  680|       |	/* Hide from UI.
  681|       |	 */
  682|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  683|      1|}
ppmsave.c:vips_foreign_save_pgm_target_class_init:
  702|      1|{
  703|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  704|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  705|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  706|       |
  707|      1|	object_class->nickname = "pgmsave_target";
  708|      1|	object_class->description = _("save image in pgm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  709|       |
  710|      1|	foreign_class->suffs = vips__save_pgm_suffs;
  711|       |
  712|       |	/* Hide from UI.
  713|       |	 */
  714|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  715|      1|}
ppmsave.c:vips_foreign_save_pfm_target_class_init:
  734|      1|{
  735|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  736|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  737|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  738|       |
  739|      1|	object_class->nickname = "pfmsave_target";
  740|      1|	object_class->description = _("save image in pfm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  741|       |
  742|      1|	foreign_class->suffs = vips__save_pfm_suffs;
  743|       |
  744|       |	/* Hide from UI.
  745|       |	 */
  746|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  747|      1|}
ppmsave.c:vips_foreign_save_pnm_target_class_init:
  766|      1|{
  767|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  768|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  769|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  770|       |
  771|      1|	object_class->nickname = "pnmsave_target";
  772|      1|	object_class->description = _("save image in pnm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  773|       |
  774|      1|	foreign_class->suffs = vips__save_pnm_suffs;
  775|       |
  776|       |	/* Hide from UI.
  777|       |	 */
  778|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  779|      1|}

vips__rad_israd:
  568|  7.84k|{
  569|  7.84k|	VipsSbuf *sbuf;
  570|  7.84k|	const char *line;
  571|  7.84k|	int result;
  572|       |
  573|       |	/* Just test that the first line is the magic string.
  574|       |	 */
  575|  7.84k|	sbuf = vips_sbuf_new_from_source(source);
  576|  7.84k|	result = (line = vips_sbuf_get_line(sbuf)) &&
  ------------------
  |  Branch (576:11): [True: 7.84k, False: 0]
  ------------------
  577|  7.84k|		strcmp(line, "#?RADIANCE") == 0;
  ------------------
  |  Branch (577:3): [True: 683, False: 7.16k]
  ------------------
  578|  7.84k|	VIPS_UNREF(sbuf);
  ------------------
  |  |   57|  7.84k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  7.84k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  7.84k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  7.84k|	{ \
  |  |  |  |   43|  7.84k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 7.84k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  7.84k|			(void) F((S)); \
  |  |  |  |   45|  7.84k|			(S) = 0; \
  |  |  |  |   46|  7.84k|		} \
  |  |  |  |   47|  7.84k|	} \
  |  |  |  |   48|  7.84k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  7.84k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|       |
  580|  7.84k|	return result;
  581|  7.84k|}
vips__rad_header:
  740|    683|{
  741|    683|	Read *read;
  742|       |
  743|    683|	if (!(read = read_new(source, out)))
  ------------------
  |  Branch (743:6): [True: 0, False: 683]
  ------------------
  744|      0|		return -1;
  745|    683|	if (rad2vips_get_header(read, read->out))
  ------------------
  |  Branch (745:6): [True: 417, False: 266]
  ------------------
  746|    417|		return -1;
  747|    266|	vips_source_minimise(source);
  748|       |
  749|    266|	return 0;
  750|    683|}
vips__rad_load:
  787|    248|{
  788|    248|	VipsImage **t = (VipsImage **)
  789|    248|		vips_object_local_array(VIPS_OBJECT(out), 3);
  ------------------
  |  |  433|    248|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    248|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    248|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|       |
  791|    248|	Read *read;
  792|       |
  793|       |#ifdef DEBUG
  794|       |	printf("rad2vips: reading \"%s\"\n",
  795|       |		vips_connection_nick(VIPS_CONNECTION(source)));
  796|       |#endif /*DEBUG*/
  797|       |
  798|    248|	if (!(read = read_new(source, out)))
  ------------------
  |  Branch (798:6): [True: 0, False: 248]
  ------------------
  799|      0|		return -1;
  800|       |
  801|    248|	t[0] = vips_image_new();
  802|    248|	if (rad2vips_get_header(read, t[0]))
  ------------------
  |  Branch (802:6): [True: 0, False: 248]
  ------------------
  803|      0|		return -1;
  804|       |
  805|    248|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (805:6): [True: 0, False: 248]
  ------------------
  806|    248|			NULL, rad2vips_generate, NULL, read, NULL) ||
  807|    248|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (807:3): [True: 0, False: 248]
  ------------------
  808|    248|			"tile_height", VIPS__FATSTRIP_HEIGHT,
  ------------------
  |  |  161|    248|#define VIPS__FATSTRIP_HEIGHT (16)
  ------------------
  809|    248|			NULL) ||
  810|    248|		vips_image_write(t[1], out))
  ------------------
  |  Branch (810:3): [True: 206, False: 42]
  ------------------
  811|    206|		return -1;
  812|       |
  813|     42|	if (vips_source_decode(source))
  ------------------
  |  Branch (813:6): [True: 0, False: 42]
  ------------------
  814|      0|		return -1;
  815|       |
  816|     42|	return 0;
  817|     42|}
radiance.c:read_new:
  598|    931|{
  599|    931|	Read *read;
  600|    931|	int i;
  601|       |
  602|    931|	if (vips_source_rewind(source))
  ------------------
  |  Branch (602:6): [True: 0, False: 931]
  ------------------
  603|      0|		return NULL;
  604|       |
  605|    931|	if (!(read = VIPS_NEW(out, Read)))
  ------------------
  |  |   70|    931|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    931|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    931|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    931|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    931|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (605:6): [True: 0, False: 931]
  ------------------
  606|      0|		return NULL;
  607|       |
  608|    931|	read->sbuf = vips_sbuf_new_from_source(source);
  609|    931|	read->out = out;
  610|    931|	strcpy(read->format, COLRFMT);
  ------------------
  |  |  202|    931|#define COLRFMT "32-bit_rle_rgbe"
  ------------------
  611|    931|	read->expos = 1.0;
  612|  3.72k|	for (i = 0; i < 3; i++)
  ------------------
  |  Branch (612:14): [True: 2.79k, False: 931]
  ------------------
  613|  2.79k|		read->colcor[i] = 1.0;
  614|    931|	read->aspect = 1.0;
  615|    931|	read->prims[0][0] = CIE_x_r;
  ------------------
  |  |  192|    931|#define CIE_x_r 0.640 /* nominal CRT primaries */
  ------------------
  616|    931|	read->prims[0][1] = CIE_y_r;
  ------------------
  |  |  193|    931|#define CIE_y_r 0.330
  ------------------
  617|    931|	read->prims[1][0] = CIE_x_g;
  ------------------
  |  |  194|    931|#define CIE_x_g 0.290
  ------------------
  618|    931|	read->prims[1][1] = CIE_y_g;
  ------------------
  |  |  195|    931|#define CIE_y_g 0.600
  ------------------
  619|    931|	read->prims[2][0] = CIE_x_b;
  ------------------
  |  |  196|    931|#define CIE_x_b 0.150
  ------------------
  620|    931|	read->prims[2][1] = CIE_y_b;
  ------------------
  |  |  197|    931|#define CIE_y_b 0.060
  ------------------
  621|    931|	read->prims[3][0] = CIE_x_w;
  ------------------
  |  |  198|    931|#define CIE_x_w (1. / 3.) /* use EE white */
  ------------------
  622|    931|	read->prims[3][1] = CIE_y_w;
  ------------------
  |  |  199|    931|#define CIE_y_w (1. / 3.)
  ------------------
  623|       |
  624|    931|	g_signal_connect(out, "close",
  ------------------
  |  |  491|    931|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  625|    931|		G_CALLBACK(read_destroy), read);
  626|    931|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|    931|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  627|    931|		G_CALLBACK(read_minimise_cb), read);
  628|       |
  629|    931|	return read;
  630|    931|}
radiance.c:read_destroy:
  585|    931|{
  586|    931|	VIPS_UNREF(read->sbuf);
  ------------------
  |  |   57|    931|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    931|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    931|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    931|	{ \
  |  |  |  |   43|    931|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 931, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    931|			(void) F((S)); \
  |  |  |  |   45|    931|			(S) = 0; \
  |  |  |  |   46|    931|		} \
  |  |  |  |   47|    931|	} \
  |  |  |  |   48|    931|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    931|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|    931|}
radiance.c:read_minimise_cb:
  591|  1.07k|{
  592|  1.07k|	if (read->sbuf)
  ------------------
  |  Branch (592:6): [True: 1.07k, False: 0]
  ------------------
  593|  1.07k|		vips_source_minimise(read->sbuf->source);
  594|  1.07k|}
radiance.c:rad2vips_get_header:
  675|    931|{
  676|    931|	VipsInterpretation interpretation;
  677|    931|	const char *line;
  678|    931|	int width;
  679|    931|	int height;
  680|    931|	int i, j;
  681|       |
  682|    931|	if (getheader(read->sbuf,
  ------------------
  |  Branch (682:6): [True: 304, False: 627]
  ------------------
  683|    931|			(gethfunc *) rad2vips_process_line, read) ||
  684|    931|		!(line = vips_sbuf_get_line(read->sbuf)) ||
  ------------------
  |  Branch (684:3): [True: 2, False: 625]
  ------------------
  685|    931|		!str2resolu(&read->rs, (char *) line)) {
  ------------------
  |  Branch (685:3): [True: 84, False: 541]
  ------------------
  686|    390|		vips_error("rad2vips", "%s",
  687|    390|			_("error reading radiance header"));
  ------------------
  |  |   30|    390|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    390|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  688|    390|		return -1;
  689|    390|	}
  690|       |
  691|    541|	if (strcmp(read->format, COLRFMT) == 0)
  ------------------
  |  |  202|    541|#define COLRFMT "32-bit_rle_rgbe"
  ------------------
  |  Branch (691:6): [True: 541, False: 0]
  ------------------
  692|    541|		interpretation = VIPS_INTERPRETATION_scRGB;
  693|      0|	else if (strcmp(read->format, CIEFMT) == 0)
  ------------------
  |  |  203|      0|#define CIEFMT "32-bit_rle_xyze"
  ------------------
  |  Branch (693:11): [True: 0, False: 0]
  ------------------
  694|      0|		interpretation = VIPS_INTERPRETATION_XYZ;
  695|      0|	else
  696|      0|		interpretation = VIPS_INTERPRETATION_MULTIBAND;
  697|       |
  698|    541|	width = scanlen(&read->rs);
  ------------------
  |  |  251|    541|#define scanlen(rs) ((rs)->rt & YMAJOR ? (rs)->xr : (rs)->yr)
  |  |  ------------------
  |  |  |  |  242|    541|#define YMAJOR 4
  |  |  ------------------
  |  |  |  Branch (251:22): [True: 6, False: 535]
  |  |  ------------------
  ------------------
  699|    541|	height = numscans(&read->rs);
  ------------------
  |  |  252|    541|#define numscans(rs) ((rs)->rt & YMAJOR ? (rs)->yr : (rs)->xr)
  |  |  ------------------
  |  |  |  |  242|    541|#define YMAJOR 4
  |  |  ------------------
  |  |  |  Branch (252:23): [True: 6, False: 535]
  |  |  ------------------
  ------------------
  700|    541|	if (width <= 0 ||
  ------------------
  |  Branch (700:6): [True: 0, False: 541]
  ------------------
  701|    541|		width >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  1.08k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (701:3): [True: 18, False: 523]
  ------------------
  702|    541|		height <= 0 ||
  ------------------
  |  Branch (702:3): [True: 0, False: 523]
  ------------------
  703|    541|		height >= VIPS_MAX_COORD) {
  ------------------
  |  |   69|    523|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (703:3): [True: 9, False: 514]
  ------------------
  704|     27|		vips_error("rad2vips", "%s", _("image size out of bounds"));
  ------------------
  |  |   30|     27|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     27|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  705|     27|		return -1;
  706|     27|	}
  707|       |
  708|    514|	vips_image_init_fields(out, width, height, 4,
  709|    514|		VIPS_FORMAT_UCHAR, VIPS_CODING_RAD,
  710|    514|		interpretation,
  711|    514|		1, read->aspect);
  712|       |
  713|    514|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|    514|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    514|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|    514|	{ \
  |  |   55|    514|		const char *sst = (V); \
  |  |   56|    514|		\
  |  |   57|    514|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 514, False: 0]
  |  |  ------------------
  |  |   58|    514|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 514]
  |  |  |  Branch (58:16): [True: 514, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|    514|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|    514|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    514|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|    514|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    514|	{ \
  |  |  |  |  |  |   43|    514|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 514, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    514|			(void) F((S)); \
  |  |  |  |  |  |   45|    514|			(S) = 0; \
  |  |  |  |  |  |   46|    514|		} \
  |  |  |  |  |  |   47|    514|	} \
  |  |  |  |  |  |   48|    514|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|    514|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    514|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 514]
  |  |  ------------------
  |  |   61|    514|					(S) = g_strdup(sst); \
  |  |   62|    514|			} \
  |  |   63|    514|		} \
  |  |   64|    514|	} \
  |  |   65|    514|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    514|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|    514|		vips_connection_filename(
  715|    514|			VIPS_CONNECTION(read->sbuf->source)));
  716|       |
  717|    514|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (717:6): [True: 0, False: 514]
  ------------------
  718|      0|		return -1;
  719|       |
  720|    514|	vips_image_set_string(out, "rad-format", read->format);
  721|       |
  722|    514|	vips_image_set_double(out, "rad-expos", read->expos);
  723|       |
  724|  2.05k|	for (i = 0; i < 3; i++)
  ------------------
  |  Branch (724:14): [True: 1.54k, False: 514]
  ------------------
  725|  1.54k|		vips_image_set_double(out,
  726|  1.54k|			colcor_name[i], read->colcor[i]);
  727|       |
  728|    514|	vips_image_set_double(out, "rad-aspect", read->aspect);
  729|       |
  730|  2.57k|	for (i = 0; i < 4; i++)
  ------------------
  |  Branch (730:14): [True: 2.05k, False: 514]
  ------------------
  731|  6.16k|		for (j = 0; j < 2; j++)
  ------------------
  |  Branch (731:15): [True: 4.11k, False: 2.05k]
  ------------------
  732|  4.11k|			vips_image_set_double(out,
  733|  4.11k|				prims_name[i][j], read->prims[i][j]);
  734|       |
  735|    514|	return 0;
  736|    514|}
radiance.c:getheader:
  343|    931|{
  344|  6.22k|	for (;;) {
  345|  6.22k|		const char *line;
  346|       |
  347|  6.22k|		if (!(line = vips_sbuf_get_line(sbuf)))
  ------------------
  |  Branch (347:7): [True: 304, False: 5.92k]
  ------------------
  348|    304|			return -1;
  349|  5.92k|		if (strcmp(line, "") == 0)
  ------------------
  |  Branch (349:7): [True: 627, False: 5.29k]
  ------------------
  350|       |			/* Blank line. We've parsed the header successfully.
  351|       |			 */
  352|    627|			break;
  353|       |
  354|  5.29k|		if (f != NULL &&
  ------------------
  |  Branch (354:7): [True: 5.29k, False: 0]
  ------------------
  355|  5.29k|			(*f)((char *) line, p) < 0)
  ------------------
  |  Branch (355:4): [True: 0, False: 5.29k]
  ------------------
  356|      0|			return -1;
  357|  5.29k|	}
  358|       |
  359|    627|	return 0;
  360|    931|}
radiance.c:rad2vips_process_line:
  634|  5.29k|{
  635|  5.29k|	if (isformat(line)) {
  ------------------
  |  |  259|  5.29k|#define isformat(s) formatval(NULL, s)
  |  |  ------------------
  |  |  |  Branch (259:21): [True: 0, False: 5.29k]
  |  |  ------------------
  ------------------
  636|      0|		if (formatval(line, read->format))
  ------------------
  |  Branch (636:7): [True: 0, False: 0]
  ------------------
  637|      0|			return -1;
  638|      0|	}
  639|  5.29k|	else if (isexpos(line)) {
  ------------------
  |  |  208|  5.29k|#define isexpos(hl) (!strncmp(hl, EXPOSSTR, LEXPOSSTR))
  |  |  ------------------
  |  |  |  |  206|  5.29k|#define EXPOSSTR "EXPOSURE="
  |  |  ------------------
  |  |               #define isexpos(hl) (!strncmp(hl, EXPOSSTR, LEXPOSSTR))
  |  |  ------------------
  |  |  |  |  207|  5.29k|#define LEXPOSSTR 9
  |  |  ------------------
  |  |  |  Branch (208:21): [True: 201, False: 5.09k]
  |  |  ------------------
  ------------------
  640|    201|		read->expos *= exposval(line);
  ------------------
  |  |  209|    201|#define exposval(hl) atof((hl) + LEXPOSSTR)
  |  |  ------------------
  |  |  |  |  207|    201|#define LEXPOSSTR 9
  |  |  ------------------
  ------------------
  641|    201|	}
  642|  5.09k|	else if (iscolcor(line)) {
  ------------------
  |  |  231|  5.09k|#define iscolcor(hl) (!strncmp(hl, COLCORSTR, LCOLCORSTR))
  |  |  ------------------
  |  |  |  |  229|  5.09k|#define COLCORSTR "COLORCORR="
  |  |  ------------------
  |  |               #define iscolcor(hl) (!strncmp(hl, COLCORSTR, LCOLCORSTR))
  |  |  ------------------
  |  |  |  |  230|  5.09k|#define LCOLCORSTR 10
  |  |  ------------------
  |  |  |  Branch (231:22): [True: 727, False: 4.36k]
  |  |  ------------------
  ------------------
  643|    727|		COLOR cc;
  644|    727|		int i;
  645|       |
  646|    727|		(void) colcorval(cc, line);
  ------------------
  |  |  232|    727|#define colcorval(cc, hl) sscanf((hl) + LCOLCORSTR, "%f %f %f", \
  |  |  ------------------
  |  |  |  |  230|    727|#define LCOLCORSTR 10
  |  |  ------------------
  |  |  233|    727|	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  174|    727|#define RED 0
  |  |  ------------------
  |  |               	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  175|    727|#define GRN 1
  |  |  ------------------
  |  |               	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  176|    727|#define BLU 2
  |  |  ------------------
  ------------------
  647|  2.90k|		for (i = 0; i < 3; i++)
  ------------------
  |  Branch (647:15): [True: 2.18k, False: 727]
  ------------------
  648|  2.18k|			read->colcor[i] *= cc[i];
  649|    727|	}
  650|  4.36k|	else if (isaspect(line)) {
  ------------------
  |  |  214|  4.36k|#define isaspect(hl) (!strncmp(hl, ASPECTSTR, LASPECTSTR))
  |  |  ------------------
  |  |  |  |  212|  4.36k|#define ASPECTSTR "PIXASPECT="
  |  |  ------------------
  |  |               #define isaspect(hl) (!strncmp(hl, ASPECTSTR, LASPECTSTR))
  |  |  ------------------
  |  |  |  |  213|  4.36k|#define LASPECTSTR 10
  |  |  ------------------
  |  |  |  Branch (214:22): [True: 197, False: 4.17k]
  |  |  ------------------
  ------------------
  651|    197|		read->aspect *= aspectval(line);
  ------------------
  |  |  215|    197|#define aspectval(hl) atof((hl) + LASPECTSTR)
  |  |  ------------------
  |  |  |  |  213|    197|#define LASPECTSTR 10
  |  |  ------------------
  ------------------
  652|    197|	}
  653|  4.17k|	else if (isprims(line)) {
  ------------------
  |  |  220|  4.17k|#define isprims(hl) (!strncmp(hl, PRIMARYSTR, LPRIMARYSTR))
  |  |  ------------------
  |  |  |  |  218|  4.17k|#define PRIMARYSTR "PRIMARIES="
  |  |  ------------------
  |  |               #define isprims(hl) (!strncmp(hl, PRIMARYSTR, LPRIMARYSTR))
  |  |  ------------------
  |  |  |  |  219|  4.17k|#define LPRIMARYSTR 10
  |  |  ------------------
  |  |  |  Branch (220:21): [True: 305, False: 3.86k]
  |  |  ------------------
  ------------------
  654|    305|		(void) primsval(read->prims, line);
  ------------------
  |  |  221|    305|#define primsval(p, hl) (sscanf((hl) + LPRIMARYSTR, \
  |  |  ------------------
  |  |  |  |  219|    305|#define LPRIMARYSTR 10
  |  |  ------------------
  |  |  222|    305|							 "%f %f %f %f %f %f %f %f", \
  |  |  223|    305|							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  174|    305|#define RED 0
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  177|    305|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  174|    305|#define RED 0
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  178|    305|#define CIEY 1
  |  |  ------------------
  |  |  224|    305|							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  175|    305|#define GRN 1
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  177|    305|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  175|    305|#define GRN 1
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  178|    305|#define CIEY 1
  |  |  ------------------
  |  |  225|    305|							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  176|    305|#define BLU 2
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  177|    305|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  176|    305|#define BLU 2
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  178|    305|#define CIEY 1
  |  |  ------------------
  |  |  226|    305|							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  181|    305|#define WHT 3	  /* used for RGBPRIMS type */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  177|    305|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  181|    305|#define WHT 3	  /* used for RGBPRIMS type */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  178|    305|#define CIEY 1
  |  |  ------------------
  ------------------
  655|    305|	}
  656|       |
  657|  5.29k|	return 0;
  658|  5.29k|}
radiance.c:formatval:
  315|  5.29k|{
  316|  5.29k|	const char *cp = FMTSTR;
  317|  5.29k|	char *r = fmt;
  318|       |	/* check against format string */
  319|  5.82k|	while (*cp)
  ------------------
  |  Branch (319:9): [True: 5.82k, False: 0]
  ------------------
  320|  5.82k|		if (*cp++ != *s++)
  ------------------
  |  Branch (320:7): [True: 5.29k, False: 525]
  ------------------
  321|  5.29k|			return 0;
  322|      0|	while (g_ascii_isspace(*s))
  ------------------
  |  |   81|      0|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  323|      0|		s++;
  324|      0|	if (!*s)
  ------------------
  |  Branch (324:6): [True: 0, False: 0]
  ------------------
  325|      0|		return 0;
  326|      0|	if (r == NULL) /* just checking if format? */
  ------------------
  |  Branch (326:6): [True: 0, False: 0]
  ------------------
  327|      0|		return 1;
  328|      0|	do /* copy format ID */
  329|      0|		*r++ = *s++;
  330|      0|	while (*s && r - fmt < MAXFMTLEN - 1);
  ------------------
  |  |  309|      0|#define MAXFMTLEN 64
  ------------------
  |  Branch (330:9): [True: 0, False: 0]
  |  Branch (330:15): [True: 0, False: 0]
  ------------------
  331|       |
  332|      0|	do /* remove trailing white space */
  333|      0|		*r-- = '\0';
  334|      0|	while (r > fmt && g_ascii_isspace(*r));
  ------------------
  |  |   81|      0|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (334:9): [True: 0, False: 0]
  ------------------
  335|       |
  336|      0|	return 1;
  337|      0|}
radiance.c:str2resolu:
  281|    625|{
  282|    625|	register char *xndx, *yndx;
  283|    625|	register char *cp;
  284|       |
  285|    625|	if (buf == NULL)
  ------------------
  |  Branch (285:6): [True: 0, False: 625]
  ------------------
  286|      0|		return 0;
  287|    625|	xndx = yndx = NULL;
  288|  9.55k|	for (cp = buf; *cp; cp++)
  ------------------
  |  Branch (288:17): [True: 8.92k, False: 625]
  ------------------
  289|  8.92k|		if (*cp == 'X')
  ------------------
  |  Branch (289:7): [True: 1.04k, False: 7.88k]
  ------------------
  290|  1.04k|			xndx = cp;
  291|  7.88k|		else if (*cp == 'Y')
  ------------------
  |  Branch (291:12): [True: 999, False: 6.88k]
  ------------------
  292|    999|			yndx = cp;
  293|    625|	if (xndx == NULL || yndx == NULL)
  ------------------
  |  Branch (293:6): [True: 12, False: 613]
  |  Branch (293:22): [True: 8, False: 605]
  ------------------
  294|     20|		return 0;
  295|    605|	rp->rt = 0;
  296|    605|	if (xndx > yndx)
  ------------------
  |  Branch (296:6): [True: 9, False: 596]
  ------------------
  297|      9|		rp->rt |= YMAJOR;
  ------------------
  |  |  242|      9|#define YMAJOR 4
  ------------------
  298|    605|	if (xndx[-1] == '-')
  ------------------
  |  Branch (298:6): [True: 10, False: 595]
  ------------------
  299|     10|		rp->rt |= XDECR;
  ------------------
  |  |  240|     10|#define XDECR 1
  ------------------
  300|    605|	if (yndx[-1] == '-')
  ------------------
  |  Branch (300:6): [True: 11, False: 594]
  ------------------
  301|     11|		rp->rt |= YDECR;
  ------------------
  |  |  241|     11|#define YDECR 2
  ------------------
  302|    605|	if ((rp->xr = atoi(xndx + 1)) <= 0)
  ------------------
  |  Branch (302:6): [True: 31, False: 574]
  ------------------
  303|     31|		return 0;
  304|    574|	if ((rp->yr = atoi(yndx + 1)) <= 0)
  ------------------
  |  Branch (304:6): [True: 33, False: 541]
  ------------------
  305|     33|		return 0;
  306|    541|	return 1;
  307|    574|}
radiance.c:rad2vips_generate:
  755|    319|{
  756|    319|	VipsRect *r = &out_region->valid;
  757|    319|	Read *read = (Read *) a;
  758|       |
  759|    319|	int y;
  760|       |
  761|       |#ifdef DEBUG
  762|       |	printf("rad2vips_generate: line %d, %d rows\n",
  763|       |		r->top, r->height);
  764|       |#endif /*DEBUG*/
  765|       |
  766|    319|	VIPS_GATE_START("rad2vips_generate: work");
  ------------------
  |  |   41|    319|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    319|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    319|	{ \
  |  |   43|    319|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 319]
  |  |  ------------------
  |  |   44|    319|			vips__thread_gate_start(NAME); \
  |  |   45|    319|	} \
  |  |   46|    319|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    319|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  767|       |
  768|  2.04k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (768:14): [True: 1.93k, False: 113]
  ------------------
  769|  1.93k|		COLR *buf = (COLR *)
  770|  1.93k|			VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  1.93k|	((R)->data + \
  |  |  228|  1.93k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.93k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.93k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.93k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.93k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.93k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|       |
  772|  1.93k|		if (scanline_read(read->sbuf, buf, out_region->im->Xsize)) {
  ------------------
  |  Branch (772:7): [True: 206, False: 1.72k]
  ------------------
  773|    206|			vips_error("rad2vips",
  774|    206|				_("read error line %d"), r->top + y);
  ------------------
  |  |   30|    206|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    206|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  775|    206|			VIPS_GATE_STOP("rad2vips_generate: work");
  ------------------
  |  |   49|    206|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    206|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    206|	{ \
  |  |   51|    206|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 206]
  |  |  ------------------
  |  |   52|    206|			vips__thread_gate_stop(NAME); \
  |  |   53|    206|	} \
  |  |   54|    206|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    206|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  776|    206|			return -1;
  777|    206|		}
  778|  1.93k|	}
  779|       |
  780|    319|	VIPS_GATE_STOP("rad2vips_generate: work");
  ------------------
  |  |   49|    113|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    113|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    113|	{ \
  |  |   51|    113|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 113]
  |  |  ------------------
  |  |   52|    113|			vips__thread_gate_stop(NAME); \
  |  |   53|    113|	} \
  |  |   54|    319|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    319|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  781|       |
  782|    113|	return 0;
  783|    319|}
radiance.c:scanline_read:
  413|  1.93k|{
  414|  1.93k|	int i, j;
  415|       |
  416|       |	/* Detect old-style scanlines.
  417|       |	 */
  418|  1.93k|	if (width < MINELEN ||
  ------------------
  |  |  235|  3.86k|#define MINELEN 8	   /* minimum scanline length for encoding */
  ------------------
  |  Branch (418:6): [True: 573, False: 1.35k]
  ------------------
  419|  1.93k|		width > MAXELEN)
  ------------------
  |  |  236|  1.35k|#define MAXELEN 0x7fff /* maximum scanline length for encoding */
  ------------------
  |  Branch (419:3): [True: 0, False: 1.35k]
  ------------------
  420|    573|		return scanline_read_old(sbuf, scanline, width);
  421|       |
  422|  1.35k|	if (VIPS_SBUF_REQUIRE(sbuf, 4))
  ------------------
  |  |  123|  1.35k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 35, False: 1.32k]
  |  |  ------------------
  |  |  124|  1.35k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 1.31k, False: 41]
  |  |  ------------------
  |  |  125|  1.35k|		? 0 \
  |  |  126|  1.35k|		: vips_sbuf_require((S), (R)))
  ------------------
  423|     35|		return -1;
  424|       |
  425|  1.32k|	if (VIPS_SBUF_PEEK(sbuf)[0] != 2)
  ------------------
  |  |  127|  1.32k|#define VIPS_SBUF_PEEK(S) ((S)->input_buffer + (S)->read_point)
  ------------------
  |  Branch (425:6): [True: 1.12k, False: 200]
  ------------------
  426|  1.12k|		return scanline_read_old(sbuf, scanline, width);
  427|       |
  428|    200|	scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  174|    200|#define RED 0
  ------------------
              	scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    200|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  429|    200|	scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  175|    200|#define GRN 1
  ------------------
              	scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    200|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  430|    200|	scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  176|    200|#define BLU 2
  ------------------
              	scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    200|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  431|    200|	scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  179|    200|#define EXP 3	  /* exponent same for either format */
  ------------------
              	scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    200|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  432|    200|	if (scanline[0][GRN] != 2 ||
  ------------------
  |  |  175|    200|#define GRN 1
  ------------------
  |  Branch (432:6): [True: 115, False: 85]
  ------------------
  433|    200|		scanline[0][BLU] & 128)
  ------------------
  |  |  176|     85|#define BLU 2
  ------------------
  |  Branch (433:3): [True: 23, False: 62]
  ------------------
  434|    138|		return scanline_read_old(sbuf,
  435|    138|			scanline + 1, width - 1);
  436|       |
  437|     62|	if (((scanline[0][BLU] << 8) | scanline[0][EXP]) != width) {
  ------------------
  |  |  176|     62|#define BLU 2
  ------------------
              	if (((scanline[0][BLU] << 8) | scanline[0][EXP]) != width) {
  ------------------
  |  |  179|     62|#define EXP 3	  /* exponent same for either format */
  ------------------
  |  Branch (437:6): [True: 5, False: 57]
  ------------------
  438|      5|		vips_error("rad2vips", "%s", _("scanline length mismatch"));
  ------------------
  |  |   30|      5|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      5|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  439|      5|		return -1;
  440|      5|	}
  441|       |
  442|    145|	for (i = 0; i < 4; i++)
  ------------------
  |  Branch (442:14): [True: 129, False: 16]
  ------------------
  443|  1.75M|		for (j = 0; j < width;) {
  ------------------
  |  Branch (443:15): [True: 1.75M, False: 88]
  ------------------
  444|  1.75M|			int code, len;
  445|  1.75M|			gboolean run;
  446|       |
  447|  1.75M|			if (VIPS_SBUF_REQUIRE(sbuf, 2))
  ------------------
  |  |  123|  1.75M|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 21, False: 1.75M]
  |  |  ------------------
  |  |  124|  1.75M|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 1.75M, False: 446]
  |  |  ------------------
  |  |  125|  1.75M|		? 0 \
  |  |  126|  1.75M|		: vips_sbuf_require((S), (R)))
  ------------------
  448|     21|				return -1;
  449|       |
  450|  1.75M|			code = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  1.75M|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  451|  1.75M|			run = code > 128;
  452|  1.75M|			len = run ? code & 127 : code;
  ------------------
  |  Branch (452:10): [True: 96, False: 1.75M]
  ------------------
  453|       |
  454|  1.75M|			if (j + len > width) {
  ------------------
  |  Branch (454:8): [True: 18, False: 1.75M]
  ------------------
  455|     18|				vips_error("rad2vips", "%s", _("overrun"));
  ------------------
  |  |   30|     18|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     18|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  456|     18|				return -1;
  457|     18|			}
  458|       |
  459|  1.75M|			if (run) {
  ------------------
  |  Branch (459:8): [True: 89, False: 1.75M]
  ------------------
  460|     89|				int val;
  461|       |
  462|     89|				val = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|     89|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  463|    274|				while (len--)
  ------------------
  |  Branch (463:12): [True: 185, False: 89]
  ------------------
  464|    185|					scanline[j++][i] = val;
  465|     89|			}
  466|  1.75M|			else {
  467|  1.75M|				if (VIPS_SBUF_REQUIRE(sbuf, len))
  ------------------
  |  |  123|  1.75M|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 2, False: 1.75M]
  |  |  ------------------
  |  |  124|  1.75M|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 1.75M, False: 3]
  |  |  ------------------
  |  |  125|  1.75M|		? 0 \
  |  |  126|  1.75M|		: vips_sbuf_require((S), (R)))
  ------------------
  468|      2|					return -1;
  469|  1.75M|				while (len--)
  ------------------
  |  Branch (469:12): [True: 634, False: 1.75M]
  ------------------
  470|    634|					scanline[j++][i] =
  471|    634|						VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  1.75M|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  472|  1.75M|			}
  473|  1.75M|		}
  474|       |
  475|     16|	return 0;
  476|     57|}
radiance.c:scanline_read_old:
  366|  1.83k|{
  367|  1.83k|	int rshift;
  368|       |
  369|  1.83k|	rshift = 0;
  370|       |
  371|  51.0k|	while (width > 0) {
  ------------------
  |  Branch (371:9): [True: 49.3k, False: 1.71k]
  ------------------
  372|  49.3k|		if (VIPS_SBUF_REQUIRE(sbuf, 4))
  ------------------
  |  |  123|  49.3k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 124, False: 49.1k]
  |  |  ------------------
  |  |  124|  49.3k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 49.1k, False: 161]
  |  |  ------------------
  |  |  125|  49.3k|		? 0 \
  |  |  126|  49.3k|		: vips_sbuf_require((S), (R)))
  ------------------
  373|    124|			return -1;
  374|       |
  375|  49.1k|		scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  174|  49.1k|#define RED 0
  ------------------
              		scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  49.1k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  376|  49.1k|		scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  175|  49.1k|#define GRN 1
  ------------------
              		scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  49.1k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  377|  49.1k|		scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  176|  49.1k|#define BLU 2
  ------------------
              		scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  49.1k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  378|  49.1k|		scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  179|  49.1k|#define EXP 3	  /* exponent same for either format */
  ------------------
              		scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  49.1k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  379|       |
  380|  49.1k|		if (scanline[0][RED] == 1 &&
  ------------------
  |  |  174|  49.1k|#define RED 0
  ------------------
  |  Branch (380:7): [True: 4.17k, False: 45.0k]
  ------------------
  381|  49.1k|			scanline[0][GRN] == 1 &&
  ------------------
  |  |  175|  4.17k|#define GRN 1
  ------------------
  |  Branch (381:4): [True: 1.57k, False: 2.60k]
  ------------------
  382|  49.1k|			scanline[0][BLU] == 1) {
  ------------------
  |  |  176|  1.57k|#define BLU 2
  ------------------
  |  Branch (382:4): [True: 1.19k, False: 381]
  ------------------
  383|  1.19k|			guint i;
  384|       |
  385|  1.19k|			for (i = ((guint32) scanline[0][EXP] << rshift);
  ------------------
  |  |  179|  1.19k|#define EXP 3	  /* exponent same for either format */
  ------------------
  386|  20.0k|				 i > 0 && width > 0; i--) {
  ------------------
  |  Branch (386:6): [True: 19.1k, False: 819]
  |  Branch (386:15): [True: 18.8k, False: 372]
  ------------------
  387|  18.8k|				copycolr(scanline[0], scanline[-1]);
  ------------------
  |  |  189|  18.8k|#define copycolr(c1, c2) (c1[0] = c2[0], c1[1] = c2[1], \
  |  |  190|  18.8k|	c1[2] = c2[2], c1[3] = c2[3])
  ------------------
  388|  18.8k|				scanline += 1;
  389|  18.8k|				width -= 1;
  390|  18.8k|			}
  391|       |
  392|  1.19k|			rshift += 8;
  393|       |
  394|       |			/* This can happen with badly-formed input files.
  395|       |			 */
  396|  1.19k|			if (rshift > 24)
  ------------------
  |  Branch (396:8): [True: 1, False: 1.19k]
  ------------------
  397|      1|				return -1;
  398|  1.19k|		}
  399|  47.9k|		else {
  400|  47.9k|			scanline += 1;
  401|  47.9k|			width -= 1;
  402|  47.9k|			rshift = 0;
  403|  47.9k|		}
  404|  49.1k|	}
  405|       |
  406|  1.71k|	return 0;
  407|  1.83k|}

radload.c:vips_foreign_load_rad_class_init:
  115|      1|{
  116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  118|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  119|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  120|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  121|       |
  122|      1|	gobject_class->dispose = vips_foreign_load_rad_dispose;
  123|       |
  124|      1|	object_class->nickname = "radload_base";
  125|      1|	object_class->description = _("load rad base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  126|       |
  127|       |	/* You're unlikely to want to use this on untrusted files.
  128|       |	 */
  129|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  130|       |
  131|       |	/* is_a() is not that quick ... lower the priority.
  132|       |	 */
  133|      1|	foreign_class->priority = -50;
  134|       |
  135|      1|	load_class->get_flags_filename =
  136|      1|		vips_foreign_load_rad_get_flags_filename;
  137|      1|	load_class->get_flags = vips_foreign_load_rad_get_flags;
  138|      1|	load_class->header = vips_foreign_load_rad_header;
  139|      1|	load_class->load = vips_foreign_load_rad_load;
  140|      1|}
radload.c:vips_foreign_load_rad_dispose:
   71|    683|{
   72|    683|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) gobject;
   73|       |
   74|    683|	VIPS_UNREF(rad->source);
  ------------------
  |  |   57|    683|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    683|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    683|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    683|	{ \
  |  |  |  |   43|    683|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 683, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    683|			(void) F((S)); \
  |  |  |  |   45|    683|			(S) = 0; \
  |  |  |  |   46|    683|		} \
  |  |  |  |   47|    683|	} \
  |  |  |  |   48|    683|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    683|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|       |
   76|    683|	G_OBJECT_CLASS(vips_foreign_load_rad_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    683|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    683|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    683|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|    683|}
radload.c:vips_foreign_load_rad_get_flags:
   81|    683|{
   82|    683|	return VIPS_FOREIGN_SEQUENTIAL;
   83|    683|}
radload.c:vips_foreign_load_rad_header:
   93|    683|{
   94|    683|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load;
   95|       |
   96|    683|	if (vips__rad_header(rad->source, load->out))
  ------------------
  |  Branch (96:6): [True: 417, False: 266]
  ------------------
   97|    417|		return -1;
   98|       |
   99|    266|	return 0;
  100|    683|}
radload.c:vips_foreign_load_rad_load:
  104|    248|{
  105|    248|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load;
  106|       |
  107|    248|	if (vips__rad_load(rad->source, load->real))
  ------------------
  |  Branch (107:6): [True: 206, False: 42]
  ------------------
  108|    206|		return -1;
  109|       |
  110|     42|	return 0;
  111|    248|}
radload.c:vips_foreign_load_rad_init:
  144|    683|{
  145|    683|}
radload.c:vips_foreign_load_rad_source_class_init:
  187|      1|{
  188|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  190|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  191|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	object_class->nickname = "radload_source";
  197|      1|	object_class->description = _("load rad from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|      1|	object_class->build = vips_foreign_load_rad_source_build;
  199|       |
  200|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  201|       |
  202|      1|	load_class->is_a_source = vips_foreign_load_rad_source_is_a_source;
  203|       |
  204|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  205|      1|		_("Source"),
  206|      1|		_("Source to load from"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadSource, source),
  209|      1|		VIPS_TYPE_SOURCE);
  210|      1|}
radload.c:vips_foreign_load_rad_source_is_a_source:
  181|  7.84k|{
  182|  7.84k|	return vips__rad_israd(source);
  183|  7.84k|}
radload.c:vips_foreign_load_rad_file_class_init:
  263|      1|{
  264|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  266|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  267|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  268|       |
  269|      1|	gobject_class->set_property = vips_object_set_property;
  270|      1|	gobject_class->get_property = vips_object_get_property;
  271|       |
  272|      1|	object_class->nickname = "radload";
  273|      1|	object_class->description = _("load a Radiance image from a file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|      1|	object_class->build = vips_foreign_load_rad_file_build;
  275|       |
  276|      1|	foreign_class->suffs = vips__rad_suffs;
  277|       |
  278|      1|	load_class->is_a = vips_foreign_load_rad_file_is_a;
  279|       |
  280|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  281|      1|		_("Filename"),
  282|      1|		_("Filename to load from"),
  283|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadFile, filename),
  285|      1|		NULL);
  286|      1|}
radload.c:vips_foreign_load_rad_buffer_class_init:
  341|      1|{
  342|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  344|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  345|       |
  346|      1|	gobject_class->set_property = vips_object_set_property;
  347|      1|	gobject_class->get_property = vips_object_get_property;
  348|       |
  349|      1|	object_class->nickname = "radload_buffer";
  350|      1|	object_class->description = _("load rad from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  351|      1|	object_class->build = vips_foreign_load_rad_buffer_build;
  352|       |
  353|      1|	load_class->is_a_buffer = vips_foreign_load_rad_buffer_is_a_buffer;
  354|       |
  355|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  356|      1|		_("Buffer"),
  357|      1|		_("Buffer to load from"),
  358|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  359|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadBuffer, blob),
  360|      1|		VIPS_TYPE_BLOB);
  361|      1|}
radload.c:vips_foreign_load_rad_buffer_build:
  309|    683|{
  310|    683|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) object;
  311|    683|	VipsForeignLoadRadBuffer *buffer = (VipsForeignLoadRadBuffer *) object;
  312|       |
  313|    683|	if (buffer->blob &&
  ------------------
  |  Branch (313:6): [True: 683, False: 0]
  ------------------
  314|    683|		!(rad->source = vips_source_new_from_memory(
  ------------------
  |  Branch (314:3): [True: 0, False: 683]
  ------------------
  315|    683|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|    683|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  316|    683|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|    683|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  317|      0|		return -1;
  318|       |
  319|    683|	if (VIPS_OBJECT_CLASS(vips_foreign_load_rad_file_parent_class)->build(object))
  ------------------
  |  |  435|    683|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    683|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    683|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (319:6): [True: 417, False: 266]
  ------------------
  320|    417|		return -1;
  321|       |
  322|    266|	return 0;
  323|    683|}
radload.c:vips_foreign_load_rad_buffer_is_a_buffer:
  327|  7.84k|{
  328|  7.84k|	VipsSource *source;
  329|  7.84k|	gboolean result;
  330|       |
  331|  7.84k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (331:6): [True: 0, False: 7.84k]
  ------------------
  332|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  333|  7.84k|	result = vips_foreign_load_rad_source_is_a_source(source);
  334|  7.84k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  7.84k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  7.84k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  7.84k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  7.84k|	{ \
  |  |  |  |   43|  7.84k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 7.84k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  7.84k|			(void) F((S)); \
  |  |  |  |   45|  7.84k|			(S) = 0; \
  |  |  |  |   46|  7.84k|		} \
  |  |  |  |   47|  7.84k|	} \
  |  |  |  |   48|  7.84k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  7.84k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|       |
  336|  7.84k|	return result;
  337|  7.84k|}
radload.c:vips_foreign_load_rad_buffer_init:
  365|    683|{
  366|    683|}

radsave.c:vips_foreign_save_rad_class_init:
   86|      1|{
   87|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   88|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
   89|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
   90|       |
   91|      1|	object_class->nickname = "radsave_base";
   92|      1|	object_class->description = _("save Radiance");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   93|       |
   94|      1|	foreign_class->suffs = vips__rad_suffs;
   95|       |
   96|      1|	save_class->saveable = VIPS_SAVEABLE_RGB;
   97|      1|	save_class->format_table = vips_foreign_save_rad_format_table;
   98|      1|	save_class->coding[VIPS_CODING_NONE] = FALSE;
  ------------------
  |  |  794|      1|#define	FALSE	(0)
  ------------------
   99|      1|	save_class->coding[VIPS_CODING_RAD] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  100|      1|}
radsave.c:vips_foreign_save_rad_file_class_init:
  142|      1|{
  143|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  145|       |
  146|      1|	gobject_class->set_property = vips_object_set_property;
  147|      1|	gobject_class->get_property = vips_object_get_property;
  148|       |
  149|      1|	object_class->nickname = "radsave";
  150|      1|	object_class->description = _("save image to Radiance file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  151|      1|	object_class->build = vips_foreign_save_rad_file_build;
  152|       |
  153|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  154|      1|		_("Filename"),
  155|      1|		_("Filename to save to"),
  156|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadFile, filename),
  158|      1|		NULL);
  159|      1|}
radsave.c:vips_foreign_save_rad_target_class_init:
  195|      1|{
  196|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  198|       |
  199|      1|	gobject_class->set_property = vips_object_set_property;
  200|      1|	gobject_class->get_property = vips_object_get_property;
  201|       |
  202|      1|	object_class->nickname = "radsave_target";
  203|      1|	object_class->description = _("save image to Radiance target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      1|	object_class->build = vips_foreign_save_rad_target_build;
  205|       |
  206|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  207|      1|		_("Target"),
  208|      1|		_("Target to save to"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadTarget, target),
  211|      1|		VIPS_TYPE_TARGET);
  212|      1|}
radsave.c:vips_foreign_save_rad_buffer_class_init:
  261|      1|{
  262|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  264|       |
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	object_class->nickname = "radsave_buffer";
  269|      1|	object_class->description = _("save image to Radiance buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	object_class->build = vips_foreign_save_rad_buffer_build;
  271|       |
  272|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  273|      1|		_("Buffer"),
  274|      1|		_("Buffer to save to"),
  275|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  276|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadBuffer, buf),
  277|      1|		VIPS_TYPE_BLOB);
  278|      1|}

rawload.c:vips_foreign_load_raw_class_init:
  117|      1|{
  118|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  120|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  121|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  122|       |
  123|      1|	gobject_class->set_property = vips_object_set_property;
  124|      1|	gobject_class->get_property = vips_object_get_property;
  125|       |
  126|       |	/* You're unlikely to want to use this on untrusted files.
  127|       |	 */
  128|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  129|       |
  130|      1|	object_class->nickname = "rawload";
  131|      1|	object_class->description = _("load raw data from a file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  132|       |
  133|      1|	load_class->get_flags = vips_foreign_load_raw_get_flags;
  134|      1|	load_class->get_flags_filename =
  135|      1|		vips_foreign_load_raw_get_flags_filename;
  136|      1|	load_class->header = vips_foreign_load_raw_header;
  137|       |
  138|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  139|      1|		_("Filename"),
  140|      1|		_("Filename to load from"),
  141|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  142|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, filename),
  143|      1|		NULL);
  144|       |
  145|      1|	VIPS_ARG_INT(class, "width", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  146|      1|		_("Width"),
  147|      1|		_("Image width in pixels"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  149|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, width),
  150|      1|		0, VIPS_MAX_COORD, 0);
  151|       |
  152|      1|	VIPS_ARG_INT(class, "height", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  153|      1|		_("Height"),
  154|      1|		_("Image height in pixels"),
  155|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  156|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, height),
  157|      1|		0, VIPS_MAX_COORD, 0);
  158|       |
  159|      1|	VIPS_ARG_INT(class, "bands", 22,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  160|      1|		_("Bands"),
  161|      1|		_("Number of bands in image"),
  162|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  163|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, bands),
  164|      1|		0, VIPS_MAX_COORD, 0);
  165|       |
  166|      1|	VIPS_ARG_UINT64(class, "offset", 23,
  ------------------
  |  |  198|      1|	{ \
  |  |  199|      1|		GParamSpec *pspec; \
  |  |  200|      1|\
  |  |  201|      1|		pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
  |  |  202|      1|			(MIN), (MAX), (VALUE), \
  |  |  203|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  204|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  205|      1|			vips_argument_get_id(), pspec); \
  |  |  206|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  208|      1|	}
  ------------------
  167|      1|		_("Size of header"),
  168|      1|		_("Offset in bytes from start of file"),
  169|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, offset),
  171|      1|		0, 100000000000, 0);
  172|       |
  173|      1|	VIPS_ARG_ENUM(class, "format", 24,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  174|      1|		_("Format"),
  175|      1|		_("Pixel format in image"),
  176|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  177|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, format),
  178|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  179|       |
  180|      1|	VIPS_ARG_ENUM(class, "interpretation", 25,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  181|      1|		_("Interpretation"),
  182|      1|		_("Pixel interpretation"),
  183|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, interpretation),
  185|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
  186|      1|}

rawsave.c:vips_foreign_save_raw_class_init:
  128|      1|{
  129|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  131|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  132|       |
  133|      1|	gobject_class->dispose = vips_foreign_save_raw_dispose;
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	object_class->nickname = "rawsave_base";
  138|      1|	object_class->description = _("save image to raw");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  139|      1|	object_class->build = vips_foreign_save_raw_build;
  140|       |
  141|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  142|      1|}
rawsave.c:vips_foreign_save_raw_file_class_init:
  181|      1|{
  182|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  184|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  185|       |
  186|      1|	gobject_class->set_property = vips_object_set_property;
  187|      1|	gobject_class->get_property = vips_object_get_property;
  188|       |
  189|      1|	object_class->nickname = "rawsave";
  190|      1|	object_class->description = _("save image to raw file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  191|      1|	object_class->build = vips_foreign_save_raw_file_build;
  192|       |
  193|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  194|       |
  195|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  196|      1|		_("Filename"),
  197|      1|		_("Filename to save to"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawFile, filename),
  200|      1|		NULL);
  201|      1|}
rawsave.c:vips_foreign_save_raw_target_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  240|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  241|       |
  242|      1|	gobject_class->set_property = vips_object_set_property;
  243|      1|	gobject_class->get_property = vips_object_get_property;
  244|       |
  245|      1|	object_class->nickname = "rawsave_target";
  246|      1|	object_class->description = _("write raw image to target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  247|      1|	object_class->build = vips_foreign_save_raw_target_build;
  248|       |
  249|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  250|       |
  251|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  252|      1|		_("Target"),
  253|      1|		_("Target to save to"),
  254|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  255|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawTarget, target),
  256|      1|		VIPS_TYPE_TARGET);
  257|      1|}
rawsave.c:vips_foreign_save_raw_buffer_class_init:
  299|      1|{
  300|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  302|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  303|       |
  304|      1|	gobject_class->set_property = vips_object_set_property;
  305|      1|	gobject_class->get_property = vips_object_get_property;
  306|       |
  307|      1|	object_class->nickname = "rawsave_buffer";
  308|      1|	object_class->description = _("write raw image to buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  309|      1|	object_class->build = vips_foreign_save_raw_buffer_build;
  310|       |
  311|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  312|       |
  313|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  314|      1|		_("Buffer"),
  315|      1|		_("Buffer to save to"),
  316|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  317|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawBuffer, buf),
  318|      1|		VIPS_TYPE_BLOB);
  319|      1|}

spngload.c:vips_foreign_load_png_class_init:
  653|      1|{
  654|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  656|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  657|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  658|       |
  659|      1|	gobject_class->dispose = vips_foreign_load_png_dispose;
  660|      1|	gobject_class->set_property = vips_object_set_property;
  661|      1|	gobject_class->get_property = vips_object_get_property;
  662|       |
  663|      1|	object_class->nickname = "pngload_base";
  664|      1|	object_class->description = _("load png base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  665|       |
  666|       |	/* We are fast at is_a(), so high priority.
  667|       |	 */
  668|      1|	foreign_class->priority = 200;
  669|       |
  670|      1|	load_class->get_flags_filename =
  671|      1|		vips_foreign_load_png_get_flags_filename;
  672|      1|	load_class->get_flags = vips_foreign_load_png_get_flags;
  673|      1|	load_class->header = vips_foreign_load_png_header;
  674|      1|	load_class->load = vips_foreign_load_png_load;
  675|       |
  676|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  677|       |	VIPS_ARG_BOOL(class, "unlimited", 23,
  678|       |		_("Unlimited"),
  679|       |		_("Remove all denial of service limits"),
  680|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  681|       |		G_STRUCT_OFFSET(VipsForeignLoadPng, unlimited),
  682|       |		FALSE);
  683|       |#endif
  684|      1|}
spngload.c:vips_foreign_load_png_dispose:
   90|  2.75k|{
   91|  2.75k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) gobject;
   92|       |
   93|  2.75k|	VIPS_FREEF(spng_ctx_free, png->ctx);
  ------------------
  |  |   41|  2.75k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.75k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.75k|	{ \
  |  |   43|  2.75k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 2.75k, False: 0]
  |  |  ------------------
  |  |   44|  2.75k|			(void) F((S)); \
  |  |   45|  2.75k|			(S) = 0; \
  |  |   46|  2.75k|		} \
  |  |   47|  2.75k|	} \
  |  |   48|  2.75k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.75k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|  2.75k|	VIPS_UNREF(png->source);
  ------------------
  |  |   57|  2.75k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  2.75k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.75k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.75k|	{ \
  |  |  |  |   43|  2.75k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.75k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.75k|			(void) F((S)); \
  |  |  |  |   45|  2.75k|			(S) = 0; \
  |  |  |  |   46|  2.75k|		} \
  |  |  |  |   47|  2.75k|	} \
  |  |  |  |   48|  2.75k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.75k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|       |
   96|  2.75k|	G_OBJECT_CLASS(vips_foreign_load_png_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  2.75k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.75k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.75k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|  2.75k|}
spngload.c:vips_foreign_load_png_get_flags_source:
  123|  2.75k|{
  124|  2.75k|	spng_ctx *ctx;
  125|  2.75k|	struct spng_ihdr ihdr;
  126|  2.75k|	VipsForeignFlags flags;
  127|       |
  128|  2.75k|	ctx = spng_ctx_new(SPNG_CTX_IGNORE_ADLER32);
  129|  2.75k|	spng_set_crc_action(ctx, SPNG_CRC_USE, SPNG_CRC_USE);
  130|  2.75k|	if (vips_source_rewind(source))
  ------------------
  |  Branch (130:6): [True: 0, False: 2.75k]
  ------------------
  131|      0|		return 0;
  132|  2.75k|	spng_set_png_stream(ctx,
  133|  2.75k|		vips_foreign_load_png_stream, source);
  134|  2.75k|	if (spng_get_ihdr(ctx, &ihdr)) {
  ------------------
  |  Branch (134:6): [True: 176, False: 2.57k]
  ------------------
  135|    176|		spng_ctx_free(ctx);
  136|    176|		return 0;
  137|    176|	}
  138|  2.57k|	spng_ctx_free(ctx);
  139|       |
  140|  2.57k|	flags = 0;
  141|  2.57k|	if (ihdr.interlace_method != SPNG_INTERLACE_NONE)
  ------------------
  |  Branch (141:6): [True: 625, False: 1.95k]
  ------------------
  142|    625|		flags |= VIPS_FOREIGN_PARTIAL;
  143|  1.95k|	else
  144|  1.95k|		flags |= VIPS_FOREIGN_SEQUENTIAL;
  145|       |
  146|  2.57k|	return flags;
  147|  2.75k|}
spngload.c:vips_foreign_load_png_stream:
  102|  66.0k|{
  103|  66.0k|	VipsSource *source = VIPS_SOURCE(user);
  ------------------
  |  |  106|  66.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  66.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  66.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  66.0k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  104|       |
  105|   124k|	while (length > 0) {
  ------------------
  |  Branch (105:9): [True: 67.4k, False: 56.9k]
  ------------------
  106|  67.4k|		gint64 bytes_read;
  107|       |
  108|  67.4k|		bytes_read = vips_source_read(source, dest, length);
  109|  67.4k|		if (bytes_read < 0)
  ------------------
  |  Branch (109:7): [True: 0, False: 67.4k]
  ------------------
  110|      0|			return SPNG_IO_ERROR;
  111|  67.4k|		if (bytes_read == 0)
  ------------------
  |  Branch (111:7): [True: 9.10k, False: 58.3k]
  ------------------
  112|  9.10k|			return SPNG_IO_EOF;
  113|       |
  114|  58.3k|		dest = (char *) dest + bytes_read;
  115|  58.3k|		length -= bytes_read;
  116|  58.3k|	}
  117|       |
  118|  56.9k|	return 0;
  119|  66.0k|}
spngload.c:vips_foreign_load_png_get_flags:
  151|  2.75k|{
  152|  2.75k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  153|       |
  154|  2.75k|	return vips_foreign_load_png_get_flags_source(png->source);
  155|  2.75k|}
spngload.c:vips_foreign_load_png_header:
  332|  2.75k|{
  333|  2.75k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|  2.75k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.75k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.75k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  2.75k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  335|       |
  336|  2.75k|	int flags;
  337|  2.75k|	int error;
  338|  2.75k|	struct spng_trns trns;
  339|       |
  340|       |	/* In non-fail mode, ignore CRC errors.
  341|       |	 */
  342|  2.75k|	flags = 0;
  343|  2.75k|	if (load->fail_on < VIPS_FAIL_ON_ERROR)
  ------------------
  |  Branch (343:6): [True: 2.75k, False: 0]
  ------------------
  344|  2.75k|		flags |= SPNG_CTX_IGNORE_ADLER32;
  345|  2.75k|	png->ctx = spng_ctx_new(flags);
  346|  2.75k|	if (load->fail_on < VIPS_FAIL_ON_ERROR)
  ------------------
  |  Branch (346:6): [True: 2.75k, False: 0]
  ------------------
  347|       |		/* Ignore and don't calculate checksums.
  348|       |		 */
  349|  2.75k|		spng_set_crc_action(png->ctx, SPNG_CRC_USE, SPNG_CRC_USE);
  350|       |
  351|       |	/* Set limits to avoid decompression bombs. Set chunk limits to 60mb
  352|       |	 * -- we've seen 50mb XMP blocks in the wild.
  353|       |	 *
  354|       |	 * No need to test the decoded image size -- the user can do that if
  355|       |	 * they wish.
  356|       |	 */
  357|  2.75k|	if (!png->unlimited) {
  ------------------
  |  Branch (357:6): [True: 2.75k, False: 0]
  ------------------
  358|  2.75k|		spng_set_image_limits(png->ctx,
  359|  2.75k|			VIPS_MAX_COORD, VIPS_MAX_COORD);
  ------------------
  |  |   69|  2.75k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
              			VIPS_MAX_COORD, VIPS_MAX_COORD);
  ------------------
  |  |   69|  2.75k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  360|  2.75k|		spng_set_chunk_limits(png->ctx,
  361|  2.75k|			60 * 1024 * 1024, 60 * 1024 * 1024);
  362|  2.75k|	}
  363|       |
  364|  2.75k|	if (vips_source_rewind(png->source))
  ------------------
  |  Branch (364:6): [True: 0, False: 2.75k]
  ------------------
  365|      0|		return -1;
  366|  2.75k|	spng_set_png_stream(png->ctx,
  367|  2.75k|		vips_foreign_load_png_stream, png->source);
  368|  2.75k|	if ((error = spng_get_ihdr(png->ctx, &png->ihdr))) {
  ------------------
  |  Branch (368:6): [True: 204, False: 2.55k]
  ------------------
  369|    204|		vips_error(class->nickname, "%s", spng_strerror(error));
  370|    204|		return -1;
  371|    204|	}
  372|       |
  373|       |#ifdef DEBUG
  374|       |	printf("width: %d\nheight: %d\nbit depth: %d\ncolor type: %d\n",
  375|       |		png->ihdr.width, png->ihdr.height,
  376|       |		png->ihdr.bit_depth, png->ihdr.color_type);
  377|       |	printf("compression method: %d\nfilter method: %d\n"
  378|       |		   "interlace method: %d\n",
  379|       |		png->ihdr.compression_method, png->ihdr.filter_method,
  380|       |		png->ihdr.interlace_method);
  381|       |#endif /*DEBUG*/
  382|       |
  383|       |	/* Just convert to host-endian if nothing else applies.
  384|       |	 */
  385|  2.55k|	png->fmt = SPNG_FMT_PNG;
  386|       |
  387|  2.55k|	switch (png->ihdr.color_type) {
  388|    920|	case SPNG_COLOR_TYPE_INDEXED:
  ------------------
  |  Branch (388:2): [True: 920, False: 1.63k]
  ------------------
  389|    920|		png->bands = 3;
  390|    920|		break;
  391|       |
  392|    171|	case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA:
  ------------------
  |  Branch (392:2): [True: 171, False: 2.38k]
  ------------------
  393|  1.13k|	case SPNG_COLOR_TYPE_GRAYSCALE:
  ------------------
  |  Branch (393:2): [True: 966, False: 1.58k]
  ------------------
  394|  1.13k|		png->bands = 1;
  395|  1.13k|		break;
  396|       |
  397|    377|	case SPNG_COLOR_TYPE_TRUECOLOR:
  ------------------
  |  Branch (397:2): [True: 377, False: 2.17k]
  ------------------
  398|    494|	case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA:
  ------------------
  |  Branch (398:2): [True: 117, False: 2.43k]
  ------------------
  399|    494|		png->bands = 3;
  400|    494|		break;
  401|       |
  402|      0|	default:
  ------------------
  |  Branch (402:2): [True: 0, False: 2.55k]
  ------------------
  403|      0|		vips_error(class->nickname, "%s", _("unknown color type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  404|      0|		return -1;
  405|  2.55k|	}
  406|       |
  407|       |	/* Set libvips format and interpretation.
  408|       |	 */
  409|  2.55k|	if (png->ihdr.bit_depth > 8) {
  ------------------
  |  Branch (409:6): [True: 870, False: 1.68k]
  ------------------
  410|    870|		if (png->bands < 3)
  ------------------
  |  Branch (410:7): [True: 664, False: 206]
  ------------------
  411|    664|			png->interpretation = VIPS_INTERPRETATION_GREY16;
  412|    206|		else
  413|    206|			png->interpretation = VIPS_INTERPRETATION_RGB16;
  414|       |
  415|    870|		png->format = VIPS_FORMAT_USHORT;
  416|    870|	}
  417|  1.68k|	else {
  418|  1.68k|		if (png->bands < 3)
  ------------------
  |  Branch (418:7): [True: 473, False: 1.20k]
  ------------------
  419|    473|			png->interpretation = VIPS_INTERPRETATION_B_W;
  420|  1.20k|		else
  421|  1.20k|			png->interpretation = VIPS_INTERPRETATION_sRGB;
  422|       |
  423|  1.68k|		png->format = VIPS_FORMAT_UCHAR;
  424|  1.68k|	}
  425|       |
  426|       |	/* Expand palette images.
  427|       |	 */
  428|  2.55k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED)
  ------------------
  |  Branch (428:6): [True: 920, False: 1.63k]
  ------------------
  429|    920|		png->fmt = SPNG_FMT_RGB8;
  430|       |
  431|       |	/* Expand <8 bit images to full bytes.
  432|       |	 */
  433|  2.55k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE &&
  ------------------
  |  Branch (433:6): [True: 966, False: 1.58k]
  ------------------
  434|  2.55k|		png->ihdr.bit_depth < 8)
  ------------------
  |  Branch (434:3): [True: 448, False: 518]
  ------------------
  435|    448|		png->fmt = SPNG_FMT_G8;
  436|       |
  437|       |	/* Try reading the optional transparency chunk. This will cause all
  438|       |	 * chunks up to the first IDAT to be read in, so it can fail if any
  439|       |	 * chunk has an error.
  440|       |	 */
  441|  2.55k|	error = spng_get_trns(png->ctx, &trns);
  442|  2.55k|	if (error &&
  ------------------
  |  Branch (442:6): [True: 2.54k, False: 5]
  ------------------
  443|  2.55k|		error != SPNG_ECHUNKAVAIL) {
  ------------------
  |  Branch (443:3): [True: 1.88k, False: 664]
  ------------------
  444|  1.88k|		vips_error(class->nickname, "%s", spng_strerror(error));
  445|  1.88k|		return -1;
  446|  1.88k|	}
  447|       |
  448|       |	/* Expand transparency.
  449|       |	 *
  450|       |	 * The _ALPHA types should not have the optional trns chunk (they
  451|       |	 * always have a transparent band), see
  452|       |	 * https://www.w3.org/TR/2003/REC-PNG-20031110/#11tRNS
  453|       |	 *
  454|       |	 * It's quick and safe to call spng_get_trns() again, and we now know
  455|       |	 * it will only fail for no transparency chunk.
  456|       |	 */
  457|    669|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE_ALPHA ||
  ------------------
  |  Branch (457:6): [True: 103, False: 566]
  ------------------
  458|    669|		png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR_ALPHA)
  ------------------
  |  Branch (458:3): [True: 2, False: 564]
  ------------------
  459|    105|		png->bands += 1;
  460|    564|	else if (!spng_get_trns(png->ctx, &trns)) {
  ------------------
  |  Branch (460:11): [True: 5, False: 559]
  ------------------
  461|      5|		png->bands += 1;
  462|       |
  463|      5|		if (png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR) {
  ------------------
  |  Branch (463:7): [True: 2, False: 3]
  ------------------
  464|      2|			if (png->ihdr.bit_depth == 16)
  ------------------
  |  Branch (464:8): [True: 1, False: 1]
  ------------------
  465|      1|				png->fmt = SPNG_FMT_RGBA16;
  466|      1|			else
  467|      1|				png->fmt = SPNG_FMT_RGBA8;
  468|      2|		}
  469|      3|		else if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED)
  ------------------
  |  Branch (469:12): [True: 1, False: 2]
  ------------------
  470|      1|			png->fmt = SPNG_FMT_RGBA8;
  471|      2|		else if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE) {
  ------------------
  |  Branch (471:12): [True: 2, False: 0]
  ------------------
  472|      2|			if (png->ihdr.bit_depth == 16)
  ------------------
  |  Branch (472:8): [True: 0, False: 2]
  ------------------
  473|      0|				png->fmt = SPNG_FMT_GA16;
  474|      2|			else
  475|      2|				png->fmt = SPNG_FMT_GA8;
  476|      2|		}
  477|      5|	}
  478|       |
  479|    669|	vips_source_minimise(png->source);
  480|       |
  481|    669|	if (vips_foreign_load_png_set_header(png, load->out))
  ------------------
  |  Branch (481:6): [True: 0, False: 669]
  ------------------
  482|      0|		return -1;
  483|       |
  484|    669|	return 0;
  485|    669|}
spngload.c:vips_foreign_load_png_set_header:
  207|  1.31k|{
  208|  1.31k|	double xres, yres;
  209|  1.31k|	struct spng_iccp iccp;
  210|  1.31k|	struct spng_exif exif;
  211|  1.31k|	struct spng_phys phys;
  212|  1.31k|	struct spng_bkgd bkgd;
  213|  1.31k|	guint32 n_text;
  214|       |
  215|       |	/* Get resolution. Default to 72 pixels per inch.
  216|       |	 */
  217|  1.31k|	xres = 72.0 / 25.4;
  218|  1.31k|	yres = 72.0 / 25.4;
  219|  1.31k|	if (!spng_get_phys(png->ctx, &phys)) {
  ------------------
  |  Branch (219:6): [True: 116, False: 1.20k]
  ------------------
  220|       |		/* unit 1 means pixels per metre, otherwise unspecified.
  221|       |		 */
  222|    116|		xres = phys.unit_specifier == 1
  ------------------
  |  Branch (222:10): [True: 103, False: 13]
  ------------------
  223|    116|			? phys.ppu_x / 1000.0
  224|    116|			: phys.ppu_x;
  225|    116|		yres = phys.unit_specifier == 1
  ------------------
  |  Branch (225:10): [True: 103, False: 13]
  ------------------
  226|    116|			? phys.ppu_y / 1000.0
  227|    116|			: phys.ppu_y;
  228|    116|	}
  229|       |
  230|  1.31k|	vips_image_init_fields(image,
  231|  1.31k|		png->ihdr.width, png->ihdr.height, png->bands,
  232|  1.31k|		png->format, VIPS_CODING_NONE, png->interpretation,
  233|  1.31k|		xres, yres);
  234|       |
  235|  1.31k|	VIPS_SETSTR(image->filename,
  ------------------
  |  |   53|  1.31k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.31k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  1.31k|	{ \
  |  |   55|  1.31k|		const char *sst = (V); \
  |  |   56|  1.31k|		\
  |  |   57|  1.31k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 1.31k, False: 0]
  |  |  ------------------
  |  |   58|  1.31k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 1.31k]
  |  |  |  Branch (58:16): [True: 1.31k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  1.31k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  1.31k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  1.31k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  1.31k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.31k|	{ \
  |  |  |  |  |  |   43|  1.31k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 1.31k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  1.31k|			(void) F((S)); \
  |  |  |  |  |  |   45|  1.31k|			(S) = 0; \
  |  |  |  |  |  |   46|  1.31k|		} \
  |  |  |  |  |  |   47|  1.31k|	} \
  |  |  |  |  |  |   48|  1.31k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  1.31k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  1.31k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 1.31k]
  |  |  ------------------
  |  |   61|  1.31k|					(S) = g_strdup(sst); \
  |  |   62|  1.31k|			} \
  |  |   63|  1.31k|		} \
  |  |   64|  1.31k|	} \
  |  |   65|  1.31k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.31k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|  1.31k|		vips_connection_filename(VIPS_CONNECTION(png->source)));
  237|       |
  238|  1.31k|	if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (238:6): [True: 0, False: 1.31k]
  ------------------
  239|      0|		return -1;
  240|       |
  241|  1.31k|	if (!spng_get_iccp(png->ctx, &iccp))
  ------------------
  |  Branch (241:6): [True: 173, False: 1.14k]
  ------------------
  242|    173|		vips_image_set_blob_copy(image,
  243|    173|			VIPS_META_ICC_NAME, iccp.profile, iccp.profile_len);
  ------------------
  |  |   78|    173|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  244|       |
  245|  1.31k|	if (!spng_get_text(png->ctx, NULL, &n_text)) {
  ------------------
  |  Branch (245:6): [True: 11, False: 1.30k]
  ------------------
  246|     11|		struct spng_text *text;
  247|       |
  248|       |		/* Very large numbers of text chunks are used in DoS
  249|       |		 * attacks.
  250|       |		 */
  251|     11|		if (!png->unlimited && n_text > MAX_PNG_TEXT_CHUNKS) {
  ------------------
  |  |   40|     11|#define MAX_PNG_TEXT_CHUNKS 50
  ------------------
  |  Branch (251:7): [True: 11, False: 0]
  |  Branch (251:26): [True: 0, False: 11]
  ------------------
  252|      0|			g_warning(_("%d text chunks, only %d text chunks will be loaded"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  253|      0|				n_text, MAX_PNG_TEXT_CHUNKS);
  254|      0|			n_text = MAX_PNG_TEXT_CHUNKS;
  ------------------
  |  |   40|      0|#define MAX_PNG_TEXT_CHUNKS 50
  ------------------
  255|      0|		}
  256|       |
  257|     11|		text = VIPS_ARRAY(VIPS_OBJECT(png),
  ------------------
  |  |   72|     11|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     11|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     11|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     11|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     11|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|     11|			n_text, struct spng_text);
  259|     11|		if (!spng_get_text(png->ctx, text, &n_text)) {
  ------------------
  |  Branch (259:7): [True: 11, False: 0]
  ------------------
  260|     11|			guint32 i;
  261|       |
  262|     42|			for (i = 0; i < n_text; i++)
  ------------------
  |  Branch (262:16): [True: 31, False: 11]
  ------------------
  263|       |				/* .text is always a null-terminated C string.
  264|       |				 */
  265|     31|				vips_foreign_load_png_set_text(image,
  266|     31|					i, text[i].keyword, text[i].text);
  267|     11|		}
  268|     11|	}
  269|       |
  270|  1.31k|	if (!spng_get_exif(png->ctx, &exif))
  ------------------
  |  Branch (270:6): [True: 3, False: 1.31k]
  ------------------
  271|      3|		vips_image_set_blob_copy(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|      3|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  272|      3|			exif.data, exif.length);
  273|       |
  274|  1.31k|	vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|  1.31k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  275|  1.31k|		png->ihdr.bit_depth);
  276|       |
  277|  1.31k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED) {
  ------------------
  |  Branch (277:6): [True: 167, False: 1.15k]
  ------------------
  278|       |		/* Deprecated "palette-bit-depth" use "bits-per-sample" instead.
  279|       |		 */
  280|    167|		vips_image_set_int(image,
  281|    167|			"palette-bit-depth", png->ihdr.bit_depth);
  282|       |
  283|    167|		vips_image_set_int(image, VIPS_META_PALETTE, 1);
  ------------------
  |  |  107|    167|#define VIPS_META_PALETTE "palette"
  ------------------
  284|    167|	}
  285|       |
  286|       |	/* Let our caller know. These are very expensive to decode.
  287|       |	 */
  288|  1.31k|	if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE)
  ------------------
  |  Branch (288:6): [True: 401, False: 918]
  ------------------
  289|    401|		vips_image_set_int(image, "interlaced", 1);
  290|       |
  291|  1.31k|	if (!spng_get_bkgd(png->ctx, &bkgd)) {
  ------------------
  |  Branch (291:6): [True: 65, False: 1.25k]
  ------------------
  292|     65|		const int scale =
  293|     65|			image->BandFmt == VIPS_FORMAT_UCHAR ? 1 : 256;
  ------------------
  |  Branch (293:4): [True: 65, False: 0]
  ------------------
  294|       |
  295|     65|		double array[3];
  296|     65|		int n;
  297|       |
  298|     65|		switch (png->ihdr.color_type) {
  299|      0|		case SPNG_COLOR_TYPE_GRAYSCALE:
  ------------------
  |  Branch (299:3): [True: 0, False: 65]
  ------------------
  300|      0|		case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA:
  ------------------
  |  Branch (300:3): [True: 0, False: 65]
  ------------------
  301|      0|			array[0] = bkgd.gray / scale;
  302|      0|			n = 1;
  303|      0|			break;
  304|       |
  305|      0|		case SPNG_COLOR_TYPE_TRUECOLOR:
  ------------------
  |  Branch (305:3): [True: 0, False: 65]
  ------------------
  306|      0|		case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA:
  ------------------
  |  Branch (306:3): [True: 0, False: 65]
  ------------------
  307|      0|			array[0] = bkgd.red / scale;
  308|      0|			array[1] = bkgd.green / scale;
  309|      0|			array[2] = bkgd.blue / scale;
  310|      0|			n = 3;
  311|      0|			break;
  312|       |
  313|     65|		case SPNG_COLOR_TYPE_INDEXED:
  ------------------
  |  Branch (313:3): [True: 65, False: 0]
  ------------------
  314|     65|		default:
  ------------------
  |  Branch (314:3): [True: 0, False: 65]
  ------------------
  315|       |			/* Not sure what to do here. I suppose we should read
  316|       |			 * the palette.
  317|       |			 */
  318|     65|			n = 0;
  319|     65|			break;
  320|     65|		}
  321|       |
  322|     65|		if (n > 0)
  ------------------
  |  Branch (322:7): [True: 0, False: 65]
  ------------------
  323|      0|			vips_image_set_array_double(image, "background",
  324|      0|				array, n);
  325|     65|	}
  326|       |
  327|  1.31k|	return 0;
  328|  1.31k|}
spngload.c:vips_foreign_load_png_set_text:
  177|     31|{
  178|       |#ifdef DEBUG
  179|       |	printf("vips_foreign_load_png_set_text: key %s, value %s\n",
  180|       |		key, value);
  181|       |#endif /*DEBUG*/
  182|       |
  183|     31|	if (strcmp(key, "XML:com.adobe.xmp") == 0) {
  ------------------
  |  Branch (183:6): [True: 0, False: 31]
  ------------------
  184|       |		/* Save as an XMP tag. This must be a BLOB, for compatibility
  185|       |		 * for things like the XMP blob that the tiff loader adds.
  186|       |		 *
  187|       |		 * Note that this will remove the null-termination from the
  188|       |		 * string. We must carefully reattach this.
  189|       |		 */
  190|      0|		vips_image_set_blob_copy(out,
  191|      0|			VIPS_META_XMP_NAME, value, strlen(value));
  ------------------
  |  |   53|      0|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  192|      0|	}
  193|     31|	else {
  194|     31|		char name[256];
  195|       |
  196|       |		/* Save as a string comment. Some PNGs have EXIF data as
  197|       |		 * text segments, unfortunately.
  198|       |		 */
  199|     31|		g_snprintf(name, 256, "png-comment-%d-%s", i, key);
  200|       |
  201|     31|		vips_image_set_string(out, name, value);
  202|     31|	}
  203|     31|}
spngload.c:vips_foreign_load_png_load:
  575|    650|{
  576|    650|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|    650|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    650|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    650|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  577|    650|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  578|    650|	VipsImage **t = (VipsImage **)
  579|    650|		vips_object_local_array(VIPS_OBJECT(load), 3);
  ------------------
  |  |  433|    650|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    650|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    650|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|       |
  581|    650|	enum spng_decode_flags flags;
  582|    650|	int error;
  583|       |
  584|    650|	if (vips_source_decode(png->source))
  ------------------
  |  Branch (584:6): [True: 0, False: 650]
  ------------------
  585|      0|		return -1;
  586|       |
  587|       |	/* Decode transparency, if available.
  588|       |	 */
  589|    650|	flags = SPNG_DECODE_TRNS;
  590|       |
  591|    650|	if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE) {
  ------------------
  |  Branch (591:6): [True: 197, False: 453]
  ------------------
  592|       |		/* Arg awful interlaced image. We have to load to a huge mem
  593|       |		 * buffer, then copy to out.
  594|       |		 */
  595|    197|		t[0] = vips_image_new_memory();
  596|    197|		if (vips_foreign_load_png_set_header(png, t[0]) ||
  ------------------
  |  Branch (596:7): [True: 0, False: 197]
  ------------------
  597|    197|			vips_image_write_prepare(t[0]))
  ------------------
  |  Branch (597:4): [True: 0, False: 197]
  ------------------
  598|      0|			return -1;
  599|       |
  600|    197|		if ((error = spng_decode_image(png->ctx,
  ------------------
  |  Branch (600:7): [True: 178, False: 19]
  ------------------
  601|    197|				 VIPS_IMAGE_ADDR(t[0], 0, 0),
  ------------------
  |  |  418|    197|	((I)->data + \
  |  |  419|    197|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    197|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    197|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    197|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    197|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    197|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    197|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|    197|				 VIPS_IMAGE_SIZEOF_IMAGE(t[0]),
  ------------------
  |  |  388|    197|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|    197|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    197|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    197|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|    197|				 png->fmt, flags))) {
  604|    178|			vips_error(class->nickname,
  605|    178|				"%s", spng_strerror(error));
  606|    178|			return -1;
  607|    178|		}
  608|       |
  609|       |		/* We've now finished reading the file.
  610|       |		 */
  611|     19|		vips_source_minimise(png->source);
  612|       |
  613|     19|		if (vips_image_write(t[0], load->real))
  ------------------
  |  Branch (613:7): [True: 0, False: 19]
  ------------------
  614|      0|			return -1;
  615|     19|	}
  616|    453|	else {
  617|    453|		t[0] = vips_image_new();
  618|       |
  619|    453|		if (vips_foreign_load_png_set_header(png, t[0]))
  ------------------
  |  Branch (619:7): [True: 0, False: 453]
  ------------------
  620|      0|			return -1;
  621|       |
  622|       |		/* We can decode these progressively.
  623|       |		 */
  624|    453|		flags |= SPNG_DECODE_PROGRESSIVE;
  625|       |
  626|    453|		if ((error = spng_decode_image(png->ctx, NULL, 0,
  ------------------
  |  Branch (626:7): [True: 117, False: 336]
  ------------------
  627|    453|				 png->fmt, flags))) {
  628|    117|			vips_error(class->nickname,
  629|    117|				"%s", spng_strerror(error));
  630|    117|			return -1;
  631|    117|		}
  632|       |
  633|       |		/* Close input immediately at end of read.
  634|       |		 */
  635|    336|		g_signal_connect(t[0], "minimise",
  ------------------
  |  |  491|    336|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  636|    336|			G_CALLBACK(vips_foreign_load_png_minimise), png);
  637|       |
  638|    336|		if (vips_image_generate(t[0],
  ------------------
  |  Branch (638:7): [True: 0, False: 336]
  ------------------
  639|    336|				NULL, vips_foreign_load_png_generate, NULL,
  640|    336|				png, NULL) ||
  641|    336|			vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (641:4): [True: 0, False: 336]
  ------------------
  642|    336|				"tile_height", VIPS__FATSTRIP_HEIGHT,
  ------------------
  |  |  161|    336|#define VIPS__FATSTRIP_HEIGHT (16)
  ------------------
  643|    336|				NULL) ||
  644|    336|			vips_image_write(t[1], load->real))
  ------------------
  |  Branch (644:4): [True: 0, False: 336]
  ------------------
  645|      0|			return -1;
  646|    336|	}
  647|       |
  648|    355|	return 0;
  649|    650|}
spngload.c:vips_foreign_load_png_minimise:
  489|    672|{
  490|    672|	vips_source_minimise(png->source);
  491|    672|}
spngload.c:vips_foreign_load_png_generate:
  496|    919|{
  497|    919|	VipsRect *r = &out_region->valid;
  498|    919|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(a);
  ------------------
  |  |  133|    919|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    919|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    919|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|    919|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  499|    919|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  500|    919|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(png);
  ------------------
  |  |  441|    919|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    919|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    919|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|       |
  502|    919|	int y;
  503|    919|	int error;
  504|       |
  505|       |#ifdef DEBUG
  506|       |	printf("vips_foreign_load_png_generate: line %d, %d rows\n",
  507|       |		r->top, r->height);
  508|       |	printf("vips_foreign_load_png_generate: y_top = %d\n", png->y_pos);
  509|       |#endif /*DEBUG*/
  510|       |
  511|       |	/* We're inside a tilecache where tiles are the full image width, so
  512|       |	 * this should always be true.
  513|       |	 */
  514|    919|	g_assert(r->left == 0);
  ------------------
  |  |  166|    919|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    919|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    919|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|    919|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|    919|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    919|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    919|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|    919|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|    919|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    919|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    919|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|       |
  518|       |	/* Tiles should always be a strip in height, unless it's the final
  519|       |	 * strip.
  520|       |	 */
  521|    919|	g_assert(r->height ==
  ------------------
  |  |  166|    919|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    919|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    919|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|    919|		VIPS_MIN(VIPS__FATSTRIP_HEIGHT, out_region->im->Ysize - r->top));
  523|       |
  524|       |	/* And check that y_pos is correct. It should be, since we are inside
  525|       |	 * a vips_sequential().
  526|       |	 */
  527|    919|	if (r->top != png->y_pos) {
  ------------------
  |  Branch (527:6): [True: 0, False: 919]
  ------------------
  528|      0|		vips_error(class->nickname,
  529|      0|			_("out of order read at line %d"), png->y_pos);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  530|      0|		return -1;
  531|      0|	}
  532|       |
  533|  14.3k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (533:14): [True: 13.3k, False: 919]
  ------------------
  534|       |		/* libspng returns EOI when successfully reading the
  535|       |		 * final line of input.
  536|       |		 */
  537|  13.3k|		error = spng_decode_row(png->ctx,
  538|  13.3k|			VIPS_REGION_ADDR(out_region, 0, r->top + y),
  ------------------
  |  |  227|  13.3k|	((R)->data + \
  |  |  228|  13.3k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  13.3k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  13.3k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  13.3k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  13.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  13.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  539|  13.3k|			VIPS_REGION_SIZEOF_LINE(out_region));
  ------------------
  |  |  203|  13.3k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|  13.3k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  13.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  13.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  540|  13.3k|		if (error != 0 &&
  ------------------
  |  Branch (540:7): [True: 11.2k, False: 2.16k]
  ------------------
  541|  13.3k|			error != SPNG_EOI) {
  ------------------
  |  Branch (541:4): [True: 11.2k, False: 8]
  ------------------
  542|       |			/* We've failed to read some pixels. Knock this
  543|       |			 * operation out of cache.
  544|       |			 */
  545|  11.2k|			vips_operation_invalidate(VIPS_OPERATION(png));
  ------------------
  |  |   57|  11.2k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  11.2k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  11.2k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  11.2k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  546|       |
  547|       |#ifdef DEBUG
  548|       |			printf("vips_foreign_load_png_generate:\n");
  549|       |			printf("  spng_decode_row() failed, line %d\n",
  550|       |				r->top + y);
  551|       |			printf("  thread %p\n", g_thread_self());
  552|       |			printf("  error %s\n", spng_strerror(error));
  553|       |#endif /*DEBUG*/
  554|       |
  555|  11.2k|			g_warning("%s: %s",
  ------------------
  |  |  338|  11.2k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  11.2k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  11.2k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  11.2k|                               __VA_ARGS__)
  ------------------
  556|  11.2k|				class->nickname, spng_strerror(error));
  557|       |
  558|       |			/* And bail if trunc is on.
  559|       |			 */
  560|  11.2k|			if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (560:8): [True: 0, False: 11.2k]
  ------------------
  561|      0|				vips_error(class->nickname,
  562|      0|					"%s", _("libspng read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  563|      0|				return -1;
  564|      0|			}
  565|  11.2k|		}
  566|       |
  567|  13.3k|		png->y_pos += 1;
  568|  13.3k|	}
  569|       |
  570|    919|	return 0;
  571|    919|}
spngload.c:vips_foreign_load_png_init:
  688|  2.75k|{
  689|  2.75k|}
spngload.c:vips_foreign_load_png_source_class_init:
  739|      1|{
  740|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  742|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  743|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  744|       |
  745|      1|	gobject_class->set_property = vips_object_set_property;
  746|      1|	gobject_class->get_property = vips_object_get_property;
  747|       |
  748|      1|	object_class->nickname = "pngload_source";
  749|      1|	object_class->description = _("load png from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  750|      1|	object_class->build = vips_foreign_load_png_source_build;
  751|       |
  752|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  753|       |
  754|      1|	load_class->is_a_source = vips_foreign_load_png_source_is_a_source;
  755|       |
  756|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  757|      1|		_("Source"),
  758|      1|		_("Source to load from"),
  759|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  760|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngSource, source),
  761|      1|		VIPS_TYPE_SOURCE);
  762|      1|}
spngload.c:vips_foreign_load_png_source_is_a_source:
  725|  33.1k|{
  726|  33.1k|	static unsigned char signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 };
  727|       |
  728|  33.1k|	const unsigned char *p;
  729|       |
  730|  33.1k|	if ((p = vips_source_sniff(source, 8)) &&
  ------------------
  |  Branch (730:6): [True: 32.7k, False: 352]
  ------------------
  731|  33.1k|		memcmp(p, signature, 8) == 0)
  ------------------
  |  Branch (731:3): [True: 2.75k, False: 30.0k]
  ------------------
  732|  2.75k|		return TRUE;
  ------------------
  |  |  798|  2.75k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.75k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  733|       |
  734|  30.3k|	return FALSE;
  ------------------
  |  |  794|  30.3k|#define	FALSE	(0)
  ------------------
  735|  33.1k|}
spngload.c:vips_foreign_load_png_file_class_init:
  817|      1|{
  818|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  819|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  820|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  821|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  822|       |
  823|      1|	gobject_class->set_property = vips_object_set_property;
  824|      1|	gobject_class->get_property = vips_object_get_property;
  825|       |
  826|      1|	object_class->nickname = "pngload";
  827|      1|	object_class->description = _("load png from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  828|      1|	object_class->build = vips_foreign_load_png_file_build;
  829|       |
  830|      1|	foreign_class->suffs = vips_foreign_load_png_file_suffs;
  831|       |
  832|      1|	load_class->is_a = vips_foreign_load_png_file_is_a;
  833|       |
  834|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  835|      1|		_("Filename"),
  836|      1|		_("Filename to load from"),
  837|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  838|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngFile, filename),
  839|      1|		NULL);
  840|      1|}
spngload.c:vips_foreign_load_png_buffer_class_init:
  896|      1|{
  897|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  899|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  900|       |
  901|      1|	gobject_class->set_property = vips_object_set_property;
  902|      1|	gobject_class->get_property = vips_object_get_property;
  903|       |
  904|      1|	object_class->nickname = "pngload_buffer";
  905|      1|	object_class->description = _("load png from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  906|      1|	object_class->build = vips_foreign_load_png_buffer_build;
  907|       |
  908|      1|	load_class->is_a_buffer = vips_foreign_load_png_buffer_is_a_buffer;
  909|       |
  910|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  911|      1|		_("Buffer"),
  912|      1|		_("Buffer to load from"),
  913|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  914|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngBuffer, blob),
  915|      1|		VIPS_TYPE_BLOB);
  916|      1|}
spngload.c:vips_foreign_load_png_buffer_build:
  863|  2.75k|{
  864|  2.75k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) object;
  865|  2.75k|	VipsForeignLoadPngBuffer *buffer = (VipsForeignLoadPngBuffer *) object;
  866|       |
  867|  2.75k|	if (buffer->blob &&
  ------------------
  |  Branch (867:6): [True: 2.75k, False: 0]
  ------------------
  868|  2.75k|		!(png->source = vips_source_new_from_memory(
  ------------------
  |  Branch (868:3): [True: 0, False: 2.75k]
  ------------------
  869|  2.75k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  2.75k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  870|  2.75k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  2.75k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  871|      0|		return -1;
  872|       |
  873|  2.75k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_png_buffer_parent_class)
  ------------------
  |  |  435|  2.75k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.75k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.75k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (873:6): [True: 2.08k, False: 669]
  ------------------
  874|  2.75k|			->build(object))
  875|  2.08k|		return -1;
  876|       |
  877|    669|	return 0;
  878|  2.75k|}
spngload.c:vips_foreign_load_png_buffer_is_a_buffer:
  882|  33.1k|{
  883|  33.1k|	VipsSource *source;
  884|  33.1k|	gboolean result;
  885|       |
  886|  33.1k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (886:6): [True: 0, False: 33.1k]
  ------------------
  887|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  888|  33.1k|	result = vips_foreign_load_png_source_is_a_source(source);
  889|  33.1k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  33.1k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  33.1k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  33.1k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  33.1k|	{ \
  |  |  |  |   43|  33.1k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 33.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  33.1k|			(void) F((S)); \
  |  |  |  |   45|  33.1k|			(S) = 0; \
  |  |  |  |   46|  33.1k|		} \
  |  |  |  |   47|  33.1k|	} \
  |  |  |  |   48|  33.1k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  33.1k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  890|       |
  891|  33.1k|	return result;
  892|  33.1k|}
spngload.c:vips_foreign_load_png_buffer_init:
  920|  2.75k|{
  921|  2.75k|}

spngsave.c:vips_foreign_save_spng_class_init:
  670|      1|{
  671|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  673|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  674|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  675|       |
  676|      1|	gobject_class->dispose = vips_foreign_save_spng_dispose;
  677|      1|	gobject_class->set_property = vips_object_set_property;
  678|      1|	gobject_class->get_property = vips_object_get_property;
  679|       |
  680|      1|	object_class->nickname = "spngsave_base";
  681|      1|	object_class->description = _("save spng");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  682|      1|	object_class->build = vips_foreign_save_spng_build;
  683|       |
  684|      1|	foreign_class->suffs = vips__png_suffs;
  685|       |
  686|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA;
  687|      1|	save_class->format_table = bandfmt_spng;
  688|       |
  689|      1|	VIPS_ARG_INT(class, "compression", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  690|      1|		_("Compression"),
  691|      1|		_("Compression factor"),
  692|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  693|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, compression),
  694|      1|		0, 9, 6);
  695|       |
  696|      1|	VIPS_ARG_BOOL(class, "interlace", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  697|      1|		_("Interlace"),
  698|      1|		_("Interlace image"),
  699|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  700|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, interlace),
  701|      1|		FALSE);
  702|       |
  703|      1|	VIPS_ARG_FLAGS(class, "filter", 12,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
  704|      1|		_("Filter"),
  705|      1|		_("libspng row filter flag(s)"),
  706|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  707|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, filter),
  708|      1|		VIPS_TYPE_FOREIGN_PNG_FILTER,
  709|      1|		VIPS_FOREIGN_PNG_FILTER_NONE);
  710|       |
  711|      1|	VIPS_ARG_BOOL(class, "palette", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  712|      1|		_("Palette"),
  713|      1|		_("Quantise to 8bpp palette"),
  714|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  715|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, palette),
  716|      1|		FALSE);
  717|       |
  718|      1|	VIPS_ARG_INT(class, "Q", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  719|      1|		_("Quality"),
  720|      1|		_("Quantisation quality"),
  721|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  722|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, Q),
  723|      1|		0, 100, 100);
  724|       |
  725|      1|	VIPS_ARG_DOUBLE(class, "dither", 16,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  726|      1|		_("Dithering"),
  727|      1|		_("Amount of dithering"),
  728|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  729|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, dither),
  730|      1|		0.0, 1.0, 1.0);
  731|       |
  732|      1|	VIPS_ARG_INT(class, "bitdepth", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  733|      1|		_("Bit depth"),
  734|      1|		_("Write as a 1, 2, 4, 8 or 16 bit image"),
  735|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  736|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, bitdepth),
  737|      1|		1, 16, 8);
  738|       |
  739|      1|	VIPS_ARG_INT(class, "effort", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  740|      1|		_("Effort"),
  741|      1|		_("Quantisation CPU effort"),
  742|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  743|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, effort),
  744|      1|		1, 10, 7);
  745|       |
  746|      1|	VIPS_ARG_INT(class, "colours", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  747|      1|		_("Colours"),
  748|      1|		_("Max number of palette colours"),
  749|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  750|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, colours),
  751|      1|		2, 256, 256);
  752|      1|}
spngsave.c:vips_foreign_save_spng_target_class_init:
  794|      1|{
  795|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  796|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  797|       |
  798|      1|	gobject_class->set_property = vips_object_set_property;
  799|      1|	gobject_class->get_property = vips_object_get_property;
  800|       |
  801|      1|	object_class->nickname = "pngsave_target";
  802|      1|	object_class->description = _("save image to target as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  803|      1|	object_class->build = vips_foreign_save_spng_target_build;
  804|       |
  805|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  806|      1|		_("Target"),
  807|      1|		_("Target to save to"),
  808|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  809|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngTarget, target),
  810|      1|		VIPS_TYPE_TARGET);
  811|      1|}
spngsave.c:vips_foreign_save_spng_file_class_init:
  847|      1|{
  848|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  850|       |
  851|      1|	gobject_class->set_property = vips_object_set_property;
  852|      1|	gobject_class->get_property = vips_object_get_property;
  853|       |
  854|      1|	object_class->nickname = "pngsave";
  855|      1|	object_class->description = _("save image to file as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  856|      1|	object_class->build = vips_foreign_save_spng_file_build;
  857|       |
  858|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  859|      1|		_("Filename"),
  860|      1|		_("Filename to save to"),
  861|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  862|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngFile, filename),
  863|      1|		NULL);
  864|      1|}
spngsave.c:vips_foreign_save_spng_buffer_class_init:
  907|      1|{
  908|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  909|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  910|       |
  911|      1|	gobject_class->set_property = vips_object_set_property;
  912|      1|	gobject_class->get_property = vips_object_get_property;
  913|       |
  914|      1|	object_class->nickname = "pngsave_buffer";
  915|      1|	object_class->description = _("save image to buffer as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  916|      1|	object_class->build = vips_foreign_save_spng_buffer_build;
  917|       |
  918|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  919|      1|		_("Buffer"),
  920|      1|		_("Buffer to save to"),
  921|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  922|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngBuffer, buf),
  923|      1|		VIPS_TYPE_BLOB);
  924|      1|}

vips__tiff_init:
   64|  42.0k|vips__tiff_init(void) {}
vips__tiff_openin_source:
  168|  42.0k|{
  169|  42.0k|	TIFF *tiff;
  170|       |
  171|       |#ifdef DEBUG
  172|       |	printf("vips__tiff_openin_source:\n");
  173|       |#endif /*DEBUG*/
  174|       |
  175|  42.0k|	if (vips_source_rewind(source))
  ------------------
  |  Branch (175:6): [True: 0, False: 42.0k]
  ------------------
  176|      0|		return NULL;
  177|       |
  178|       |	/* Disable memory mapped input -- it chews up VM and the performance
  179|       |	 * gain is very small.
  180|       |	 *
  181|       |	 * C enables strip chopping: very large uncompressed strips are
  182|       |	 * chopped into c. 8kb chunks. This can reduce peak memory use for
  183|       |	 * this type of file.
  184|       |	 */
  185|       |
  186|  42.0k|#ifdef HAVE_TIFF_OPEN_OPTIONS
  187|  42.0k|	TIFFOpenOptions *opts = TIFFOpenOptionsAlloc();
  188|  42.0k|	TIFFOpenOptionsSetErrorHandlerExtR(opts, error_fn, user_data);
  189|  42.0k|	TIFFOpenOptionsSetWarningHandlerExtR(opts, warning_fn, user_data);
  190|  42.0k|#ifdef HAVE_TIFF_OPEN_OPTIONS_SET_MAX_CUMULATED_MEM_ALLOC
  191|  42.0k|	if (!unlimited) {
  ------------------
  |  Branch (191:6): [True: 42.0k, False: 0]
  ------------------
  192|  42.0k|		TIFFOpenOptionsSetMaxCumulatedMemAlloc(opts, 20 * 1024 * 1024);
  193|  42.0k|	}
  194|  42.0k|#endif /*HAVE_TIFF_OPEN_OPTIONS_SET_MAX_CUMULATED_MEM_ALLOC*/
  195|  42.0k|	if (!(tiff = TIFFClientOpenExt("source input", "rmC",
  ------------------
  |  Branch (195:6): [True: 12.8k, False: 29.1k]
  ------------------
  196|  42.0k|			  (thandle_t) source,
  197|  42.0k|			  openin_source_read,
  198|  42.0k|			  openin_source_write,
  199|  42.0k|			  openin_source_seek,
  200|  42.0k|			  openin_source_close,
  201|  42.0k|			  openin_source_length,
  202|  42.0k|			  openin_source_map,
  203|  42.0k|			  openin_source_unmap,
  204|  42.0k|			  opts))) {
  205|  12.8k|	    TIFFOpenOptionsFree(opts);
  206|  12.8k|		vips_error("vips__tiff_openin_source", "%s",
  207|  12.8k|			_("unable to open source for input"));
  ------------------
  |  |   30|  12.8k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  12.8k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  208|  12.8k|		return NULL;
  209|  12.8k|	}
  210|  29.1k|	TIFFOpenOptionsFree(opts);
  211|       |#else
  212|       |	if (!(tiff = TIFFClientOpen("source input", "rmC",
  213|       |			  (thandle_t) source,
  214|       |			  openin_source_read,
  215|       |			  openin_source_write,
  216|       |			  openin_source_seek,
  217|       |			  openin_source_close,
  218|       |			  openin_source_length,
  219|       |			  openin_source_map,
  220|       |			  openin_source_unmap))) {
  221|       |		vips_error("vips__tiff_openin_source", "%s",
  222|       |			_("unable to open source for input"));
  223|       |		return NULL;
  224|       |	}
  225|       |#endif /*HAVE_TIFF_OPEN_OPTIONS*/
  226|       |
  227|       |	/* Unreffed on close(), see above.
  228|       |	 */
  229|  29.1k|	g_object_ref(source);
  230|       |
  231|  29.1k|	return tiff;
  232|  42.0k|}
tiff.c:openin_source_read:
  104|   451k|{
  105|   451k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|   451k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   451k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   451k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   451k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  106|       |
  107|   451k|	return vips_source_read(source, data, size);
  108|   451k|}
tiff.c:openin_source_seek:
  120|   341k|{
  121|   341k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|   341k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   341k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   341k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   341k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  122|       |
  123|   341k|	return (toff_t) vips_source_seek(source, offset, whence);
  124|   341k|}
tiff.c:openin_source_close:
  128|  29.1k|{
  129|  29.1k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|  29.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  29.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  29.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  29.1k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  130|       |
  131|  29.1k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  29.1k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  29.1k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  29.1k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  29.1k|	{ \
  |  |  |  |   43|  29.1k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 29.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  29.1k|			(void) F((S)); \
  |  |  |  |   45|  29.1k|			(S) = 0; \
  |  |  |  |   46|  29.1k|		} \
  |  |  |  |   47|  29.1k|	} \
  |  |  |  |   48|  29.1k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  29.1k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|       |
  133|  29.1k|	return 0;
  134|  29.1k|}
tiff.c:openin_source_length:
  138|  44.9k|{
  139|  44.9k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|  44.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  44.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  44.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  44.9k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  140|       |
  141|       |	/* libtiff will use this to get file size if tags like StripByteCounts
  142|       |	 * are missing.
  143|       |	 *
  144|       |	 * toff_t is usually uint64, with -1 cast to uint64 to indicate error.
  145|       |	 */
  146|  44.9k|	return (toff_t) vips_source_length(source);
  147|  44.9k|}

vips__istiff_source:
 3453|  20.9k|{
 3454|  20.9k|	return vips__testtiff_source(source, NULL);
 3455|  20.9k|}
vips__istifftiled_source:
 3459|  8.12k|{
 3460|  8.12k|	return vips__testtiff_source(source, TIFFIsTiled);
 3461|  8.12k|}
vips__tiff_read_header_source:
 3467|  8.12k|{
 3468|  8.12k|	Rtiff *rtiff;
 3469|       |
 3470|  8.12k|	vips__tiff_init();
 3471|       |
 3472|  8.12k|	if (!(rtiff = rtiff_new(source, out,
  ------------------
  |  Branch (3472:6): [True: 0, False: 8.12k]
  ------------------
 3473|  8.12k|			  page, n, autorotate, subifd, fail_on, unlimited)) ||
 3474|  8.12k|		rtiff_header_read_all(rtiff))
  ------------------
  |  Branch (3474:3): [True: 2.10k, False: 6.01k]
  ------------------
 3475|  2.10k|		return -1;
 3476|       |
 3477|  6.01k|	if (rtiff_set_header(rtiff, out))
  ------------------
  |  Branch (3477:6): [True: 197, False: 5.82k]
  ------------------
 3478|    197|		return -1;
 3479|       |
 3480|  5.82k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (3480:6): [True: 0, False: 5.82k]
  ------------------
 3481|  5.82k|		vips_image_get_orientation_swap(out)) {
  ------------------
  |  Branch (3481:3): [True: 0, False: 0]
  ------------------
 3482|      0|		VIPS_SWAP(int, out->Xsize, out->Ysize);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3483|      0|		vips_autorot_remove_angle(out);
 3484|      0|	}
 3485|       |
 3486|       |	/* We never call vips_source_decode() since we need to be able to
 3487|       |	 * seek() the whole way through the file. Just minimise instead,
 3488|       |	 */
 3489|  5.82k|	vips_source_minimise(source);
 3490|       |
 3491|  5.82k|	return 0;
 3492|  6.01k|}
vips__tiff_read_source:
 3498|  4.81k|{
 3499|  4.81k|	Rtiff *rtiff;
 3500|       |
 3501|       |#ifdef DEBUG
 3502|       |	printf("tiff2vips: libtiff version is \"%s\"\n", TIFFGetVersion());
 3503|       |#endif /*DEBUG*/
 3504|       |
 3505|  4.81k|	vips__tiff_init();
 3506|       |
 3507|  4.81k|	if (!(rtiff = rtiff_new(source, out,
  ------------------
  |  Branch (3507:6): [True: 0, False: 4.81k]
  ------------------
 3508|  4.81k|			  page, n, autorotate, subifd, fail_on, unlimited)) ||
 3509|  4.81k|		rtiff_header_read_all(rtiff))
  ------------------
  |  Branch (3509:3): [True: 0, False: 4.81k]
  ------------------
 3510|      0|		return -1;
 3511|       |
 3512|  4.81k|	if (rtiff->header.tiled) {
  ------------------
  |  Branch (3512:6): [True: 1.22k, False: 3.59k]
  ------------------
 3513|  1.22k|		if (rtiff_read_tilewise(rtiff, out))
  ------------------
  |  Branch (3513:7): [True: 8, False: 1.21k]
  ------------------
 3514|      8|			return -1;
 3515|  1.22k|	}
 3516|  3.59k|	else {
 3517|  3.59k|		if (rtiff_read_stripwise(rtiff, out))
  ------------------
  |  Branch (3517:7): [True: 0, False: 3.59k]
  ------------------
 3518|      0|			return -1;
 3519|  3.59k|	}
 3520|       |
 3521|       |	/* We never call vips_source_decode() since we need to be able to
 3522|       |	 * seek() the whole way through the file. Just minimise instead,
 3523|       |	 */
 3524|  4.80k|	vips_source_minimise(source);
 3525|       |
 3526|  4.80k|	return 0;
 3527|  4.81k|}
tiff2vips.c:vips__testtiff_source:
 3432|  29.0k|{
 3433|  29.0k|	TIFF *tif;
 3434|  29.0k|	gboolean property;
 3435|       |
 3436|  29.0k|	vips__tiff_init();
 3437|       |
 3438|  29.0k|	if (!(tif = vips__tiff_openin_source(source, rtiff_handler_error,
  ------------------
  |  Branch (3438:6): [True: 12.8k, False: 16.2k]
  ------------------
 3439|  29.0k|		rtiff_handler_warning, NULL, FALSE))) {
  ------------------
  |  |  206|  29.0k|#define FALSE   0               /* values of boolean */
  ------------------
 3440|  12.8k|		vips_error_clear();
 3441|  12.8k|		return FALSE;
  ------------------
  |  |  206|  12.8k|#define FALSE   0               /* values of boolean */
  ------------------
 3442|  12.8k|	}
 3443|       |
 3444|  16.2k|	property = fn ? fn(tif) : TRUE;
  ------------------
  |  |  209|  24.3k|#define TRUE    1
  ------------------
  |  Branch (3444:13): [True: 8.12k, False: 8.12k]
  ------------------
 3445|       |
 3446|  16.2k|	TIFFClose(tif);
 3447|       |
 3448|  16.2k|	return property;
 3449|  29.0k|}
tiff2vips.c:rtiff_handler_error:
  624|   960k|{
  625|   960k|	vips_verror("tiff2vips", fmt, ap);
  626|   960k|	return 1;
  627|   960k|}
tiff2vips.c:rtiff_handler_warning:
  632|   476k|{
  633|   476k|	if (user_data) {
  ------------------
  |  Branch (633:6): [True: 328k, False: 148k]
  ------------------
  634|   328k|		Rtiff *rtiff = (Rtiff*) user_data;
  635|   328k|		if (rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (635:7): [True: 0, False: 328k]
  ------------------
  636|      0|			rtiff->failed = TRUE;
  ------------------
  |  |  209|      0|#define TRUE    1
  ------------------
  637|      0|		}
  638|   328k|	}
  639|   476k|	g_logv("tiff2vips", G_LOG_LEVEL_WARNING, fmt, ap);
  640|   476k|	return 1;
  641|   476k|}
tiff2vips.c:rtiff_new:
  647|  12.9k|{
  648|  12.9k|	Rtiff *rtiff;
  649|       |
  650|  12.9k|	if (!(rtiff = VIPS_NEW(out, Rtiff)))
  ------------------
  |  |   70|  12.9k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  12.9k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  12.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  12.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  12.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (650:6): [True: 0, False: 12.9k]
  ------------------
  651|      0|		return NULL;
  652|       |
  653|  12.9k|	g_object_ref(source);
  654|  12.9k|	rtiff->source = source;
  655|  12.9k|	rtiff->out = out;
  656|  12.9k|	rtiff->page = page;
  657|  12.9k|	rtiff->n = n;
  658|  12.9k|	rtiff->autorotate = autorotate;
  659|  12.9k|	rtiff->subifd = subifd;
  660|  12.9k|	rtiff->fail_on = fail_on;
  661|  12.9k|	g_rec_mutex_init(&rtiff->lock);
  662|  12.9k|	rtiff->tiff = NULL;
  663|  12.9k|	rtiff->n_pages = 0;
  664|  12.9k|	rtiff->current_page = -1;
  665|  12.9k|	rtiff->sfn = NULL;
  666|  12.9k|	rtiff->client = NULL;
  667|  12.9k|	rtiff->memcpy = FALSE;
  ------------------
  |  |  206|  12.9k|#define FALSE   0               /* values of boolean */
  ------------------
  668|  12.9k|	rtiff->plane_buf = NULL;
  669|  12.9k|	rtiff->contig_buf = NULL;
  670|  12.9k|	rtiff->y_pos = 0;
  671|  12.9k|	rtiff->failed = FALSE;
  ------------------
  |  |  206|  12.9k|#define FALSE   0               /* values of boolean */
  ------------------
  672|       |
  673|  12.9k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  12.9k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  674|  12.9k|		G_CALLBACK(rtiff_close_cb), rtiff);
  675|  12.9k|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|  12.9k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  676|  12.9k|		G_CALLBACK(rtiff_minimise_cb), rtiff);
  677|       |
  678|  12.9k|	if (rtiff->page < 0 ||
  ------------------
  |  Branch (678:6): [True: 0, False: 12.9k]
  ------------------
  679|  12.9k|		rtiff->page > 1000000) {
  ------------------
  |  Branch (679:3): [True: 0, False: 12.9k]
  ------------------
  680|      0|		vips_error("tiff2vips", _("bad page number %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  681|      0|			rtiff->page);
  682|      0|		return NULL;
  683|      0|	}
  684|       |
  685|       |	/* We allow n == -1, meaning all pages. It gets swapped for a real n
  686|       |	 * value when we open the TIFF.
  687|       |	 */
  688|  12.9k|	if (rtiff->n != -1 &&
  ------------------
  |  Branch (688:6): [True: 12.9k, False: 0]
  ------------------
  689|  12.9k|		(rtiff->n < 1 || rtiff->n > 1000000)) {
  ------------------
  |  Branch (689:4): [True: 0, False: 12.9k]
  |  Branch (689:20): [True: 0, False: 12.9k]
  ------------------
  690|      0|		vips_error("tiff2vips", _("bad number of pages %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  691|      0|			rtiff->n);
  692|      0|		return NULL;
  693|      0|	}
  694|       |
  695|  12.9k|	if (!(rtiff->tiff = vips__tiff_openin_source(source,
  ------------------
  |  Branch (695:6): [True: 0, False: 12.9k]
  ------------------
  696|  12.9k|		rtiff_handler_error, rtiff_handler_warning, rtiff, unlimited)))
  697|      0|		return NULL;
  698|       |
  699|  12.9k|	return rtiff;
  700|  12.9k|}
tiff2vips.c:rtiff_close_cb:
  606|  12.9k|{
  607|  12.9k|	rtiff_free(rtiff);
  608|  12.9k|}
tiff2vips.c:rtiff_free:
  598|  12.9k|{
  599|  12.9k|	VIPS_FREEF(TIFFClose, rtiff->tiff);
  ------------------
  |  |   41|  12.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  12.9k|	{ \
  |  |   43|  12.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 12.9k, False: 0]
  |  |  ------------------
  |  |   44|  12.9k|			(void) F((S)); \
  |  |   45|  12.9k|			(S) = 0; \
  |  |   46|  12.9k|		} \
  |  |   47|  12.9k|	} \
  |  |   48|  12.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|  12.9k|	g_rec_mutex_clear(&rtiff->lock);
  601|  12.9k|	VIPS_UNREF(rtiff->source);
  ------------------
  |  |   57|  12.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  12.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  12.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  12.9k|	{ \
  |  |  |  |   43|  12.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 12.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  12.9k|			(void) F((S)); \
  |  |  |  |   45|  12.9k|			(S) = 0; \
  |  |  |  |   46|  12.9k|		} \
  |  |  |  |   47|  12.9k|	} \
  |  |  |  |   48|  12.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  12.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|  12.9k|}
tiff2vips.c:rtiff_minimise_cb:
  612|  26.3k|{
  613|       |	/* We must not minimised tiled images. These can be read from many
  614|       |	 * threads, and this minimise handler is not inside the lock.
  615|       |	 */
  616|  26.3k|	if (!rtiff->header.tiled &&
  ------------------
  |  Branch (616:6): [True: 21.5k, False: 4.86k]
  ------------------
  617|  26.3k|		rtiff->source)
  ------------------
  |  Branch (617:3): [True: 21.5k, False: 0]
  ------------------
  618|  21.5k|		vips_source_minimise(rtiff->source);
  619|  26.3k|}
tiff2vips.c:rtiff_header_read_all:
 3375|  12.9k|{
 3376|       |#ifdef DEBUG
 3377|       |	printf("rtiff_header_read_all: reading header for page %d ...\n",
 3378|       |		rtiff->page);
 3379|       |#endif /*DEBUG*/
 3380|       |
 3381|       |	/* -1 means "to the end".
 3382|       |	 *
 3383|       |	 * We must count pages before selecting and reading the header of the
 3384|       |	 * first page, since scanning a TIFF can change the value of libtiff's
 3385|       |	 * internal header fields in strange ways, especially if the TIFF is
 3386|       |	 * corrupt.
 3387|       |	 */
 3388|  12.9k|	rtiff->n_pages = rtiff_n_pages(rtiff);
 3389|       |
 3390|  12.9k|	if (rtiff_set_page(rtiff, rtiff->page) ||
  ------------------
  |  Branch (3390:6): [True: 8, False: 12.9k]
  ------------------
 3391|  12.9k|		rtiff_header_read(rtiff, &rtiff->header))
  ------------------
  |  Branch (3391:3): [True: 2.10k, False: 10.8k]
  ------------------
 3392|  2.10k|		return -1;
 3393|       |
 3394|       |	/* If we're to read many pages, verify that they are all identical.
 3395|       |	 */
 3396|  10.8k|	if (rtiff->n == -1)
  ------------------
  |  Branch (3396:6): [True: 0, False: 10.8k]
  ------------------
 3397|      0|		rtiff->n = rtiff->n_pages - rtiff->page;
 3398|  10.8k|	if (rtiff->n > 1) {
  ------------------
  |  Branch (3398:6): [True: 0, False: 10.8k]
  ------------------
 3399|      0|		int i;
 3400|       |
 3401|      0|		for (i = 1; i < rtiff->n; i++) {
  ------------------
  |  Branch (3401:15): [True: 0, False: 0]
  ------------------
 3402|      0|			RtiffHeader header;
 3403|       |
 3404|       |#ifdef DEBUG
 3405|       |			printf("rtiff_header_read_all: verifying header for page %d ...\n",
 3406|       |				rtiff->page + i);
 3407|       |#endif /*DEBUG*/
 3408|       |
 3409|      0|			if (rtiff_set_page(rtiff, rtiff->page + i) ||
  ------------------
  |  Branch (3409:8): [True: 0, False: 0]
  ------------------
 3410|      0|				rtiff_header_read(rtiff, &header))
  ------------------
  |  Branch (3410:5): [True: 0, False: 0]
  ------------------
 3411|      0|				return -1;
 3412|       |
 3413|      0|			if (!rtiff_header_equal(&rtiff->header, &header)) {
  ------------------
  |  Branch (3413:8): [True: 0, False: 0]
  ------------------
 3414|      0|				vips_error("tiff2vips", _("page %d differs from page %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3415|      0|					rtiff->page + i, rtiff->page);
 3416|      0|				return -1;
 3417|      0|			}
 3418|      0|		}
 3419|       |
 3420|       |		/* Make sure the next set_page() will reread the directory.
 3421|       |		 */
 3422|      0|		rtiff->current_page = -1;
 3423|      0|	}
 3424|       |
 3425|  10.8k|	return 0;
 3426|  10.8k|}
tiff2vips.c:rtiff_n_pages:
  844|  12.9k|{
  845|  12.9k|	int n;
  846|       |
  847|  12.9k|	(void) TIFFSetDirectory(rtiff->tiff, 0);
  848|       |
  849|  15.1k|	for (n = 1; TIFFReadDirectory(rtiff->tiff); n++)
  ------------------
  |  Branch (849:14): [True: 2.19k, False: 12.9k]
  ------------------
  850|  2.19k|		;
  851|       |
  852|       |	/* Make sure the nest set_page() will set the directory.
  853|       |	 */
  854|  12.9k|	rtiff->current_page = -1;
  855|       |
  856|       |#ifdef DEBUG
  857|       |	printf("rtiff_n_pages: found %d pages\n", n);
  858|       |#endif /*DEBUG*/
  859|       |
  860|  12.9k|	return n;
  861|  12.9k|}
tiff2vips.c:rtiff_set_page:
  794|  36.7k|{
  795|  36.7k|	if (rtiff->current_page != page) {
  ------------------
  |  Branch (795:6): [True: 12.9k, False: 23.8k]
  ------------------
  796|       |#ifdef DEBUG
  797|       |		printf("rtiff_set_page: selecting page %d, subifd %d\n",
  798|       |			page, rtiff->subifd);
  799|       |#endif /*DEBUG*/
  800|       |
  801|  12.9k|		if (!TIFFSetDirectory(rtiff->tiff, page)) {
  ------------------
  |  Branch (801:7): [True: 8, False: 12.9k]
  ------------------
  802|      8|			vips_error("tiff2vips", _("TIFF does not contain page %d"), page);
  ------------------
  |  |   30|      8|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      8|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  803|      8|			return -1;
  804|      8|		}
  805|       |
  806|  12.9k|		if (rtiff->subifd >= 0) {
  ------------------
  |  Branch (806:7): [True: 0, False: 12.9k]
  ------------------
  807|      0|			guint16 subifd_count;
  808|      0|			toff_t *subifd_offsets;
  809|       |
  810|      0|			if (!TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD,
  ------------------
  |  |  321|      0|#define TIFFTAG_SUBIFD 330                 /* subimage descriptors */
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|					&subifd_count, &subifd_offsets)) {
  812|      0|				vips_error("tiff2vips", "%s", _("no SUBIFD tag"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  813|      0|				return -1;
  814|      0|			}
  815|       |
  816|      0|			if (rtiff->subifd >= subifd_count) {
  ------------------
  |  Branch (816:8): [True: 0, False: 0]
  ------------------
  817|      0|				vips_error("tiff2vips",
  818|      0|					_("subifd %d out of range, only 0-%d available"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  819|      0|					rtiff->subifd,
  820|      0|					subifd_count - 1);
  821|      0|				return -1;
  822|      0|			}
  823|       |
  824|      0|			if (!TIFFSetSubDirectory(rtiff->tiff,
  ------------------
  |  Branch (824:8): [True: 0, False: 0]
  ------------------
  825|      0|					subifd_offsets[rtiff->subifd])) {
  826|      0|				vips_error("tiff2vips", "%s", _("subdirectory unreadable"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  827|      0|				return -1;
  828|      0|			}
  829|      0|		}
  830|       |
  831|  12.9k|		rtiff->current_page = page;
  832|       |
  833|       |		/* These can get unset when we change directories. Make sure
  834|       |		 * they are set again.
  835|       |		 */
  836|  12.9k|		rtiff_set_decode_format(rtiff);
  837|  12.9k|	}
  838|       |
  839|  36.7k|	return 0;
  840|  36.7k|}
tiff2vips.c:rtiff_set_decode_format:
  778|  35.3k|{
  779|       |	/* Ask for YCbCr->RGB for jpg data.
  780|       |	 */
  781|  35.3k|	if (rtiff->header.compression == COMPRESSION_JPEG ||
  ------------------
  |  |  190|  70.6k|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (781:6): [True: 3.11k, False: 32.2k]
  ------------------
  782|  35.3k|		rtiff->header.compression == COMPRESSION_OJPEG)
  ------------------
  |  |  189|  32.2k|#define COMPRESSION_OJPEG 6           /* !6.0 JPEG */
  ------------------
  |  Branch (782:3): [True: 1.55k, False: 30.6k]
  ------------------
  783|  4.67k|		TIFFSetField(rtiff->tiff, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
  ------------------
  |  |  706|  4.67k|#define TIFFTAG_JPEGCOLORMODE 65538  /* Auto RGB<=>YCbCr convert? */
  ------------------
              		TIFFSetField(rtiff->tiff, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
  ------------------
  |  |  708|  4.67k|#define JPEGCOLORMODE_RGB 0x0001     /* do auto conversion */
  ------------------
  784|       |
  785|       |	/* Ask for SGI LOGLUV as 3xfloat.
  786|       |	 */
  787|  35.3k|	if (rtiff->header.photometric_interpretation ==
  ------------------
  |  Branch (787:6): [True: 846, False: 34.4k]
  ------------------
  788|  35.3k|		PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  35.3k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  789|    846|		TIFFSetField(rtiff->tiff, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT);
  ------------------
  |  |  743|    846|#define TIFFTAG_SGILOGDATAFMT 65560    /* SGILog user data format */
  ------------------
              		TIFFSetField(rtiff->tiff, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT);
  ------------------
  |  |  744|    846|#define SGILOGDATAFMT_FLOAT 0          /* IEEE float samples */
  ------------------
  790|  35.3k|}
tiff2vips.c:rtiff_header_read:
 2989|  12.9k|{
 2990|  12.9k|	int i;
 2991|  12.9k|	guint16 extra_samples_count;
 2992|  12.9k|	guint16 *extra_samples_types;
 2993|  12.9k|	guint16 subifd_count;
 2994|  12.9k|	toff_t *subifd_offsets;
 2995|  12.9k|	char *image_description;
 2996|  12.9k|	guint32 max_tile_dimension;
 2997|  12.9k|	gboolean can_read_as_rgba;
 2998|       |
 2999|  12.9k|	if (!tfget32(rtiff->tiff, TIFFTAG_IMAGEWIDTH,
  ------------------
  |  |  178|  12.9k|#define TIFFTAG_IMAGEWIDTH 256        /* image width in pixels */
  ------------------
  |  Branch (2999:6): [True: 0, False: 12.9k]
  ------------------
 3000|  12.9k|			&header->width) ||
 3001|  12.9k|		!tfget32(rtiff->tiff, TIFFTAG_IMAGELENGTH,
  ------------------
  |  |  179|  12.9k|#define TIFFTAG_IMAGELENGTH 257       /* image height in pixels */
  ------------------
  |  Branch (3001:3): [True: 0, False: 12.9k]
  ------------------
 3002|  12.9k|			&header->height) ||
 3003|  12.9k|		!tfget16(rtiff->tiff, TIFFTAG_SAMPLESPERPIXEL,
  ------------------
  |  |  257|  12.9k|#define TIFFTAG_SAMPLESPERPIXEL 277        /* samples per pixel */
  ------------------
  |  Branch (3003:3): [True: 0, False: 12.9k]
  ------------------
 3004|  12.9k|			&header->samples_per_pixel) ||
 3005|  12.9k|		!tfget16(rtiff->tiff, TIFFTAG_BITSPERSAMPLE,
  ------------------
  |  |  180|  12.9k|#define TIFFTAG_BITSPERSAMPLE 258     /* bits per channel (sample) */
  ------------------
  |  Branch (3005:3): [True: 0, False: 12.9k]
  ------------------
 3006|  12.9k|			&header->bits_per_sample) ||
 3007|  12.9k|		!tfget16(rtiff->tiff, TIFFTAG_PHOTOMETRIC,
  ------------------
  |  |  220|  12.9k|#define TIFFTAG_PHOTOMETRIC 262            /* photometric interpretation */
  ------------------
  |  Branch (3007:3): [True: 1.32k, False: 11.6k]
  ------------------
 3008|  12.9k|			&header->photometric_interpretation) ||
 3009|  12.9k|		!tfget16(rtiff->tiff, TIFFTAG_INKSET,
  ------------------
  |  |  322|  11.6k|#define TIFFTAG_INKSET 332                 /* !inks in separated image */
  ------------------
  |  Branch (3009:3): [True: 0, False: 11.6k]
  ------------------
 3010|  11.6k|			&header->inkset))
 3011|  1.32k|		return -1;
 3012|       |
 3013|  11.6k|	header->read_as_rgba = FALSE;
  ------------------
  |  |  206|  11.6k|#define FALSE   0               /* values of boolean */
  ------------------
 3014|       |
 3015|       |	/* TIFF images which can be read by TIFFRGBAImage or TIFFReadRGBATile.
 3016|       |	 */
 3017|  11.6k|	can_read_as_rgba =
 3018|  11.6k|		(header->samples_per_pixel == 1 ||
  ------------------
  |  Branch (3018:4): [True: 6.77k, False: 4.83k]
  ------------------
 3019|  11.6k|			header->samples_per_pixel == 3 ||
  ------------------
  |  Branch (3019:4): [True: 3.79k, False: 1.04k]
  ------------------
 3020|  11.6k|			header->samples_per_pixel == 4) &&
  ------------------
  |  Branch (3020:4): [True: 455, False: 590]
  ------------------
 3021|  11.6k|		(header->bits_per_sample == 1 ||
  ------------------
  |  Branch (3021:4): [True: 5.45k, False: 5.56k]
  ------------------
 3022|  11.0k|			header->bits_per_sample == 2 ||
  ------------------
  |  Branch (3022:4): [True: 358, False: 5.20k]
  ------------------
 3023|  11.0k|			header->bits_per_sample == 4 ||
  ------------------
  |  Branch (3023:4): [True: 338, False: 4.87k]
  ------------------
 3024|  11.0k|			header->bits_per_sample == 8 ||
  ------------------
  |  Branch (3024:4): [True: 1.93k, False: 2.94k]
  ------------------
 3025|  11.0k|			header->bits_per_sample == 16);
  ------------------
  |  Branch (3025:4): [True: 1.96k, False: 978]
  ------------------
 3026|       |
 3027|  11.6k|	TIFFGetFieldDefaulted(rtiff->tiff,
 3028|  11.6k|		TIFFTAG_COMPRESSION, &header->compression);
  ------------------
  |  |  181|  11.6k|#define TIFFTAG_COMPRESSION 259       /* data compression technique */
  ------------------
 3029|       |
 3030|       |	/* We'll decode old-style JPEG using the libtiff RGBA path.
 3031|       |	 */
 3032|  11.6k|	if (header->compression == COMPRESSION_OJPEG) {
  ------------------
  |  |  189|  11.6k|#define COMPRESSION_OJPEG 6           /* !6.0 JPEG */
  ------------------
  |  Branch (3032:6): [True: 829, False: 10.7k]
  ------------------
 3033|    829|		if (!can_read_as_rgba) {
  ------------------
  |  Branch (3033:7): [True: 32, False: 797]
  ------------------
 3034|     32|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|     32|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     32|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3035|     32|			return -1;
 3036|     32|		}
 3037|       |
 3038|    797|		header->read_as_rgba = TRUE;
  ------------------
  |  |  209|    797|#define TRUE    1
  ------------------
 3039|    797|	}
 3040|       |
 3041|       |	/* One of the types we decompress?
 3042|       |	 */
 3043|  50.6k|	for (i = 0; i < VIPS_NUMBER(rtiff_we_decompress); i++)
  ------------------
  |  |   60|  50.6k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (3043:14): [True: 40.9k, False: 9.77k]
  ------------------
 3044|  40.9k|		if (header->compression == rtiff_we_decompress[i]) {
  ------------------
  |  Branch (3044:7): [True: 1.80k, False: 39.1k]
  ------------------
 3045|       |#ifdef DEBUG
 3046|       |			printf("rtiff_header_read: compression %d handled by us\n",
 3047|       |				header->compression);
 3048|       |#endif /*DEBUG*/
 3049|  1.80k|			header->we_decompress = TRUE;
  ------------------
  |  |  209|  1.80k|#define TRUE    1
  ------------------
 3050|  1.80k|			break;
 3051|  1.80k|		}
 3052|       |
 3053|       |	/* We must set this here since it'll change the value of scanline_size.
 3054|       |	 */
 3055|  11.5k|	rtiff_set_decode_format(rtiff);
 3056|       |
 3057|       |	/* If there's YCbCr chroma subsampling and we're not already using one of
 3058|       |	 * the JPEG decompressors, use the libtiff RGBA path.
 3059|       |	 */
 3060|  11.5k|	if (!header->read_as_rgba &&
  ------------------
  |  Branch (3060:6): [True: 10.7k, False: 797]
  ------------------
 3061|  11.5k|		header->compression != COMPRESSION_JPEG &&
  ------------------
  |  |  190|  22.3k|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (3061:3): [True: 8.98k, False: 1.79k]
  ------------------
 3062|  11.5k|		header->photometric_interpretation == PHOTOMETRIC_YCBCR) {
  ------------------
  |  |  227|  8.98k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (3062:3): [True: 36, False: 8.94k]
  ------------------
 3063|     36|		guint16 hsub, vsub;
 3064|       |
 3065|     36|		TIFFGetFieldDefaulted(rtiff->tiff,
 3066|     36|			TIFFTAG_YCBCRSUBSAMPLING, &hsub, &vsub);
  ------------------
  |  |  388|     36|#define TIFFTAG_YCBCRSUBSAMPLING 530       /* !YCbCr subsampling factors */
  ------------------
 3067|     36|		if (hsub != 1 || vsub != 1) {
  ------------------
  |  Branch (3067:7): [True: 30, False: 6]
  |  Branch (3067:20): [True: 1, False: 5]
  ------------------
 3068|     31|			if (!can_read_as_rgba) {
  ------------------
  |  Branch (3068:8): [True: 3, False: 28]
  ------------------
 3069|      3|				vips_error("tiff2vips",
 3070|      3|					"%s", _("subsampled images not supported"));
  ------------------
  |  |   30|      3|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      3|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3071|      3|				return -1;
 3072|      3|			}
 3073|       |
 3074|     28|			header->read_as_rgba = TRUE;
  ------------------
  |  |  209|     28|#define TRUE    1
  ------------------
 3075|     28|		}
 3076|     36|	}
 3077|       |
 3078|  11.5k|	if (header->photometric_interpretation == PHOTOMETRIC_LOGLUV) {
  ------------------
  |  |  233|  11.5k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (3078:6): [True: 444, False: 11.1k]
  ------------------
 3079|    444|		if (header->compression != COMPRESSION_SGILOG &&
  ------------------
  |  |  210|    888|#define COMPRESSION_SGILOG 34676   /* SGI Log Luminance RLE */
  ------------------
  |  Branch (3079:7): [True: 206, False: 238]
  ------------------
 3080|    444|			header->compression != COMPRESSION_SGILOG24) {
  ------------------
  |  |  211|    206|#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */
  ------------------
  |  Branch (3080:4): [True: 36, False: 170]
  ------------------
 3081|     36|			vips_error("tiff2vips",
 3082|     36|				"%s", _("not SGI-compressed LOGLUV"));
  ------------------
  |  |   30|     36|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     36|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3083|     36|			return -1;
 3084|     36|		}
 3085|    444|	}
 3086|       |
 3087|       |	/* For logluv, the calibration factor to get to absolute luminance.
 3088|       |	 */
 3089|  11.5k|	if (!TIFFGetField(rtiff->tiff, TIFFTAG_STONITS, &header->stonits))
  ------------------
  |  |  490|  11.5k|#define TIFFTAG_STONITS 37439 /* Sample value to Nits */
  ------------------
  |  Branch (3089:6): [True: 11.5k, False: 28]
  ------------------
 3090|  11.5k|		header->stonits = 1.0;
 3091|       |
 3092|       |	/* Arbitrary sanity-checking limits.
 3093|       |	 */
 3094|  11.5k|	if (header->width <= 0 ||
  ------------------
  |  Branch (3094:6): [True: 0, False: 11.5k]
  ------------------
 3095|  11.5k|		header->width >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  23.0k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (3095:3): [True: 48, False: 11.4k]
  ------------------
 3096|  11.5k|		header->height <= 0 ||
  ------------------
  |  Branch (3096:3): [True: 0, False: 11.4k]
  ------------------
 3097|  11.5k|		header->height >= VIPS_MAX_COORD) {
  ------------------
  |  |   69|  11.4k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (3097:3): [True: 32, False: 11.4k]
  ------------------
 3098|     80|		vips_error("tiff2vips",
 3099|     80|			"%s", _("width/height out of range"));
  ------------------
  |  |   30|     80|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     80|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3100|     80|		return -1;
 3101|     80|	}
 3102|       |
 3103|  11.4k|	if (header->samples_per_pixel <= 0 ||
  ------------------
  |  Branch (3103:6): [True: 0, False: 11.4k]
  ------------------
 3104|  11.4k|		header->samples_per_pixel > 10000 ||
  ------------------
  |  Branch (3104:3): [True: 24, False: 11.4k]
  ------------------
 3105|  11.4k|		header->bits_per_sample <= 0 ||
  ------------------
  |  Branch (3105:3): [True: 0, False: 11.4k]
  ------------------
 3106|  11.4k|		header->bits_per_sample > 32) {
  ------------------
  |  Branch (3106:3): [True: 57, False: 11.3k]
  ------------------
 3107|     81|		vips_error("tiff2vips",
 3108|     81|			"%s", _("samples out of range"));
  ------------------
  |  |   30|     81|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     81|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3109|     81|		return -1;
 3110|     81|	}
 3111|       |
 3112|  11.3k|	header->sample_format = get_sample_format(rtiff->tiff);
 3113|  11.3k|	header->orientation = get_orientation(rtiff->tiff);
 3114|       |
 3115|  11.3k|	header->separate = FALSE;
  ------------------
  |  |  206|  11.3k|#define FALSE   0               /* values of boolean */
  ------------------
 3116|  11.3k|	if (tfexists(rtiff->tiff, TIFFTAG_PLANARCONFIG)) {
  ------------------
  |  |  264|  11.3k|#define TIFFTAG_PLANARCONFIG 284           /* storage organization */
  ------------------
  |  Branch (3116:6): [True: 11.3k, False: 0]
  ------------------
 3117|  11.3k|		int v;
 3118|       |
 3119|  11.3k|		if (!tfget16(rtiff->tiff, TIFFTAG_PLANARCONFIG, &v))
  ------------------
  |  |  264|  11.3k|#define TIFFTAG_PLANARCONFIG 284           /* storage organization */
  ------------------
  |  Branch (3119:7): [True: 0, False: 11.3k]
  ------------------
 3120|      0|			return -1;
 3121|  11.3k|		if (v == PLANARCONFIG_SEPARATE)
  ------------------
  |  |  266|  11.3k|#define PLANARCONFIG_SEPARATE 2            /* separate planes of data */
  ------------------
  |  Branch (3121:7): [True: 260, False: 11.1k]
  ------------------
 3122|    260|			header->separate = TRUE;
  ------------------
  |  |  209|    260|#define TRUE    1
  ------------------
 3123|  11.3k|	}
 3124|       |
 3125|       |	/* TIFFGetField needs a guint16 to write count to.
 3126|       |	 */
 3127|  11.3k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD,
  ------------------
  |  |  321|  11.3k|#define TIFFTAG_SUBIFD 330                 /* subimage descriptors */
  ------------------
  |  Branch (3127:6): [True: 22, False: 11.3k]
  ------------------
 3128|  11.3k|			&subifd_count, &subifd_offsets))
 3129|     22|		header->subifd_count = subifd_count;
 3130|       |
 3131|       |	/* IMAGEDESCRIPTION often has useful metadata. libtiff makes sure
 3132|       |	 * that data is null-terminated and contains no embedded null
 3133|       |	 * characters.
 3134|       |	 */
 3135|  11.3k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_IMAGEDESCRIPTION, &image_description))
  ------------------
  |  |  244|  11.3k|#define TIFFTAG_IMAGEDESCRIPTION 270       /* info about image */
  ------------------
  |  Branch (3135:6): [True: 70, False: 11.3k]
  ------------------
 3136|     70|		header->image_description =
 3137|     70|			vips_strdup(VIPS_OBJECT(rtiff->out), image_description);
  ------------------
  |  |  433|     70|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|     70|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     70|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3138|       |
 3139|       |	/* Tiles and strip images have slightly different fields.
 3140|       |	 */
 3141|  11.3k|	header->tiled = TIFFIsTiled(rtiff->tiff);
 3142|       |
 3143|  11.3k|	if (header->read_as_rgba) {
  ------------------
  |  Branch (3143:6): [True: 799, False: 10.5k]
  ------------------
 3144|    799|		header->we_decompress = FALSE;
  ------------------
  |  |  206|    799|#define FALSE   0               /* values of boolean */
  ------------------
 3145|    799|		header->photometric_interpretation = PHOTOMETRIC_RGB;
  ------------------
  |  |  223|    799|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
 3146|    799|		header->samples_per_pixel = 4;
 3147|    799|		header->bits_per_sample = 8;
 3148|    799|		header->sample_format = SAMPLEFORMAT_UINT;
  ------------------
  |  |  334|    799|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
 3149|    799|		header->separate = FALSE;
  ------------------
  |  |  206|    799|#define FALSE   0               /* values of boolean */
  ------------------
 3150|    799|	}
 3151|       |
 3152|       |#ifdef DEBUG
 3153|       |	printf("rtiff_header_read: header.read_as_rgba = %d\n",
 3154|       |		header->read_as_rgba);
 3155|       |	printf("rtiff_header_read: header.width = %d\n",
 3156|       |		header->width);
 3157|       |	printf("rtiff_header_read: header.height = %d\n",
 3158|       |		header->height);
 3159|       |	printf("rtiff_header_read: header.samples_per_pixel = %d\n",
 3160|       |		header->samples_per_pixel);
 3161|       |	printf("rtiff_header_read: header.bits_per_sample = %d\n",
 3162|       |		header->bits_per_sample);
 3163|       |	printf("rtiff_header_read: header.sample_format = %d\n",
 3164|       |		header->sample_format);
 3165|       |	printf("rtiff_header_read: header.orientation = %d\n",
 3166|       |		header->orientation);
 3167|       |	printf("rtiff_header_read: header.tiled = %d\n",
 3168|       |		header->tiled);
 3169|       |#endif /*DEBUG*/
 3170|       |
 3171|  11.3k|	if (header->tiled) {
  ------------------
  |  Branch (3171:6): [True: 3.00k, False: 8.37k]
  ------------------
 3172|  3.00k|		if (!tfget32(rtiff->tiff, TIFFTAG_TILEWIDTH, &header->tile_width) ||
  ------------------
  |  |  311|  3.00k|#define TIFFTAG_TILEWIDTH 322              /* !tile width in pixels */
  ------------------
  |  Branch (3172:7): [True: 0, False: 3.00k]
  ------------------
 3173|  3.00k|			!tfget32(rtiff->tiff, TIFFTAG_TILELENGTH, &header->tile_height))
  ------------------
  |  |  312|  3.00k|#define TIFFTAG_TILELENGTH 323             /* !tile height in pixels */
  ------------------
  |  Branch (3173:4): [True: 0, False: 3.00k]
  ------------------
 3174|      0|			return -1;
 3175|       |
 3176|       |#ifdef DEBUG
 3177|       |		printf("rtiff_header_read: header.tile_width = %d\n",
 3178|       |			header->tile_width);
 3179|       |		printf("rtiff_header_read: header.tile_height = %d\n",
 3180|       |			header->tile_height);
 3181|       |#endif /*DEBUG*/
 3182|       |
 3183|       |		/* Arbitrary sanity-checking limits.
 3184|       |		 */
 3185|  3.00k|		max_tile_dimension = VIPS_MIN(8192,
  ------------------
  |  |   55|  12.0k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 447, False: 2.56k]
  |  |  |  Branch (55:32): [True: 2.81k, False: 190]
  |  |  |  Branch (55:32): [True: 2.81k, False: 190]
  |  |  |  Branch (55:44): [True: 2.39k, False: 162]
  |  |  |  Branch (55:44): [True: 2.39k, False: 162]
  |  |  ------------------
  ------------------
 3186|  3.00k|			VIPS_ROUND_UP(2 * VIPS_MAX(header->width, header->height), 256));
 3187|  3.00k|		if (header->tile_width <= 0 ||
  ------------------
  |  Branch (3187:7): [True: 0, False: 3.00k]
  ------------------
 3188|  3.00k|			header->tile_width > max_tile_dimension ||
  ------------------
  |  Branch (3188:4): [True: 106, False: 2.90k]
  ------------------
 3189|  3.00k|			header->tile_width % 16 != 0 ||
  ------------------
  |  Branch (3189:4): [True: 393, False: 2.50k]
  ------------------
 3190|  3.00k|			header->tile_height <= 0 ||
  ------------------
  |  Branch (3190:4): [True: 0, False: 2.50k]
  ------------------
 3191|  3.00k|			header->tile_height > max_tile_dimension ||
  ------------------
  |  Branch (3191:4): [True: 38, False: 2.47k]
  ------------------
 3192|  3.00k|			header->tile_height % 16 != 0) {
  ------------------
  |  Branch (3192:4): [True: 7, False: 2.46k]
  ------------------
 3193|    544|			vips_error("tiff2vips",
 3194|    544|				"%s", _("tile size out of range"));
  ------------------
  |  |   30|    544|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    544|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3195|    544|			return -1;
 3196|    544|		}
 3197|       |
 3198|  2.46k|		if (header->read_as_rgba) {
  ------------------
  |  Branch (3198:7): [True: 4, False: 2.46k]
  ------------------
 3199|      4|			header->tile_row_size = header->tile_width * 4;
 3200|      4|			header->tile_size = header->tile_row_size * header->tile_height;
 3201|      4|		}
 3202|  2.46k|		else {
 3203|  2.46k|			header->tile_size = TIFFTileSize(rtiff->tiff);
 3204|  2.46k|			header->tile_row_size = TIFFTileRowSize(rtiff->tiff);
 3205|  2.46k|		}
 3206|       |
 3207|       |#ifdef DEBUG
 3208|       |		printf("rtiff_header_read: header.tile_size = %zd\n",
 3209|       |			header->tile_size);
 3210|       |		printf("rtiff_header_read: header.tile_row_size = %zd\n",
 3211|       |			header->tile_row_size);
 3212|       |#endif /*DEBUG*/
 3213|       |
 3214|       |		/* Fuzzed TIFFs can give crazy values for tile_size. Sanity
 3215|       |		 * check at 100mb per tile.
 3216|       |		 */
 3217|  2.46k|		if (header->tile_size <= 0 ||
  ------------------
  |  Branch (3217:7): [True: 0, False: 2.46k]
  ------------------
 3218|  2.46k|			header->tile_size > 100 * 1000 * 1000 ||
  ------------------
  |  Branch (3218:4): [True: 1, False: 2.46k]
  ------------------
 3219|  2.46k|			header->tile_row_size <= 0 ||
  ------------------
  |  Branch (3219:4): [True: 0, False: 2.46k]
  ------------------
 3220|  2.46k|			header->tile_row_size > 100 * 1000 * 1000) {
  ------------------
  |  Branch (3220:4): [True: 0, False: 2.46k]
  ------------------
 3221|      1|			vips_error("tiff2vips",
 3222|      1|				"%s", _("tile size out of range"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3223|      1|			return -1;
 3224|      1|		}
 3225|       |
 3226|       |		/* Stop some compiler warnings.
 3227|       |		 */
 3228|  2.46k|		header->rows_per_strip = 0;
 3229|  2.46k|		header->strip_size = 0;
 3230|  2.46k|		header->number_of_strips = 0;
 3231|  2.46k|		header->read_height = 0;
 3232|  2.46k|		header->read_size = 0;
 3233|  2.46k|	}
 3234|  8.37k|	else {
 3235|  8.37k|		if (!tfget32(rtiff->tiff,
  ------------------
  |  Branch (3235:7): [True: 0, False: 8.37k]
  ------------------
 3236|  8.37k|				TIFFTAG_ROWSPERSTRIP, &header->rows_per_strip))
  ------------------
  |  |  258|  8.37k|#define TIFFTAG_ROWSPERSTRIP 278           /* rows per strip of data */
  ------------------
 3237|      0|			return -1;
 3238|       |
 3239|       |		/* rows_per_strip can be 2 ** 32 - 1, meaning the
 3240|       |		 * whole image. Clip this down to height to avoid
 3241|       |		 * confusing vips.
 3242|       |		 *
 3243|       |		 * And it mustn't be zero.
 3244|       |		 */
 3245|  8.37k|		header->rows_per_strip = VIPS_CLIP(1,
  ------------------
  |  |   57|  8.37k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  16.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 8.37k]
  |  |  |  |  |  Branch (54:32): [True: 2.97k, False: 5.40k]
  |  |  |  |  |  Branch (54:44): [True: 2.97k, False: 5.40k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3246|  8.37k|			header->rows_per_strip, header->height);
 3247|       |
 3248|  8.37k|		header->number_of_strips = TIFFNumberOfStrips(rtiff->tiff);
 3249|       |
 3250|  8.37k|		if (header->read_as_rgba) {
  ------------------
  |  Branch (3250:7): [True: 772, False: 7.59k]
  ------------------
 3251|    772|			header->scanline_size = header->width * 4;
 3252|    772|			header->strip_size = header->scanline_size * header->rows_per_strip;
 3253|    772|		}
 3254|  7.59k|		else {
 3255|  7.59k|			header->scanline_size = TIFFScanlineSize(rtiff->tiff);
 3256|  7.59k|			header->strip_size = TIFFStripSize(rtiff->tiff);
 3257|  7.59k|		}
 3258|       |
 3259|       |#ifdef DEBUG
 3260|       |		printf("rtiff_header_read: header.rows_per_strip = %d\n",
 3261|       |			header->rows_per_strip);
 3262|       |		printf("rtiff_header_read: header.strip_size = %zd\n",
 3263|       |			header->strip_size);
 3264|       |		printf("rtiff_header_read: header.scanline_size = %zd\n",
 3265|       |			header->scanline_size);
 3266|       |		printf("rtiff_header_read: header.number_of_strips = %d\n",
 3267|       |			header->number_of_strips);
 3268|       |#endif /*DEBUG*/
 3269|       |
 3270|       |		/* libtiff has two strip-wise readers. TIFFReadEncodedStrip()
 3271|       |		 * decompresses an entire strip to memory. It's fast, but it
 3272|       |		 * will need a lot of ram if the strip is large.
 3273|       |		 * TIFFReadScanline() reads a single scanline. It's slower, but
 3274|       |		 * will save a lot of memory if strips are large.
 3275|       |		 *
 3276|       |		 * If this image has a strip size of over 128 lines, fall back
 3277|       |		 * to TIFFReadScanline(), otherwise use TIFFReadEncodedStrip().
 3278|       |		 *
 3279|       |		 * Don't do this in plane-separate mode. TIFFReadScanline() is
 3280|       |		 * too fiddly to use in this case.
 3281|       |		 *
 3282|       |		 * Don't try scanline reading for YCbCr images.
 3283|       |		 * TIFFScanlineSize() will not work in this case due to
 3284|       |		 * chroma subsampling.
 3285|       |		 *
 3286|       |		 * Don't use scanline reading if we're going to use TIFFRGBAImage
 3287|       |		 */
 3288|  8.37k|		if (header->rows_per_strip > 128 &&
  ------------------
  |  Branch (3288:7): [True: 217, False: 8.15k]
  ------------------
 3289|  8.37k|			!header->separate &&
  ------------------
  |  Branch (3289:4): [True: 216, False: 1]
  ------------------
 3290|  8.37k|			header->photometric_interpretation != PHOTOMETRIC_YCBCR &&
  ------------------
  |  |  227|  8.58k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (3290:4): [True: 106, False: 110]
  ------------------
 3291|  8.37k|			!header->read_as_rgba) {
  ------------------
  |  Branch (3291:4): [True: 54, False: 52]
  ------------------
 3292|     54|			header->read_scanlinewise = TRUE;
  ------------------
  |  |  209|     54|#define TRUE    1
  ------------------
 3293|     54|			header->read_height = 1;
 3294|     54|			header->read_size = rtiff->header.scanline_size;
 3295|     54|		}
 3296|  8.31k|		else {
 3297|  8.31k|			header->read_scanlinewise = FALSE;
  ------------------
  |  |  206|  8.31k|#define FALSE   0               /* values of boolean */
  ------------------
 3298|  8.31k|			header->read_height = header->rows_per_strip;
 3299|  8.31k|			header->read_size = header->strip_size;
 3300|  8.31k|		}
 3301|       |
 3302|       |#ifdef DEBUG
 3303|       |		printf("rtiff_header_read: header.read_scanlinewise = %d\n",
 3304|       |			header->read_scanlinewise);
 3305|       |		printf("rtiff_header_read: header.read_height = %d\n",
 3306|       |			header->read_height);
 3307|       |		printf("rtiff_header_read: header.read_size = %zd\n",
 3308|       |			header->read_size);
 3309|       |#endif /*DEBUG*/
 3310|       |
 3311|       |		/* Stop some compiler warnings.
 3312|       |		 */
 3313|  8.37k|		header->tile_width = 0;
 3314|  8.37k|		header->tile_height = 0;
 3315|  8.37k|		header->tile_size = 0;
 3316|  8.37k|		header->tile_row_size = 0;
 3317|  8.37k|	}
 3318|       |
 3319|  10.8k|	TIFFGetFieldDefaulted(rtiff->tiff, TIFFTAG_EXTRASAMPLES,
  ------------------
  |  |  329|  10.8k|#define TIFFTAG_EXTRASAMPLES 338           /* !info about extra samples */
  ------------------
 3320|  10.8k|		&extra_samples_count, &extra_samples_types);
 3321|       |
 3322|  10.8k|	header->alpha_band = -1;
 3323|  10.8k|	if (extra_samples_count > 0) {
  ------------------
  |  Branch (3323:6): [True: 3.10k, False: 7.73k]
  ------------------
 3324|       |		/* There must be exactly one band which is
 3325|       |		 * EXTRASAMPLE_ASSOCALPHA. Note which one it is so we can
 3326|       |		 * unpremultiply with the right channel.
 3327|       |		 */
 3328|  3.10k|		int i;
 3329|       |
 3330|  70.7k|		for (i = 0; i < extra_samples_count; i++)
  ------------------
  |  Branch (3330:15): [True: 67.6k, False: 3.10k]
  ------------------
 3331|  67.6k|			if (extra_samples_types[i] == EXTRASAMPLE_ASSOCALPHA) {
  ------------------
  |  |  331|  67.6k|#define EXTRASAMPLE_ASSOCALPHA 1           /* !associated alpha data */
  ------------------
  |  Branch (3331:8): [True: 1.78k, False: 65.8k]
  ------------------
 3332|  1.78k|				if (header->alpha_band != -1)
  ------------------
  |  Branch (3332:9): [True: 9, False: 1.77k]
  ------------------
 3333|      9|					g_warning("%s", _("more than one alpha -- ignoring"));
  ------------------
  |  |  338|      9|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      9|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      9|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      9|                               __VA_ARGS__)
  ------------------
 3334|       |
 3335|  1.78k|				header->alpha_band = header->samples_per_pixel -
 3336|  1.78k|					extra_samples_count + i;
 3337|  1.78k|			}
 3338|  3.10k|	}
 3339|       |
 3340|  10.8k|	return 0;
 3341|  11.3k|}
tiff2vips.c:tfget32:
  475|  40.2k|{
  476|  40.2k|	guint32 fld;
  477|       |
  478|  40.2k|	if (!TIFFGetFieldDefaulted(tif, tag, &fld)) {
  ------------------
  |  Branch (478:6): [True: 0, False: 40.2k]
  ------------------
  479|      0|		vips_error("tiff2vips",
  480|      0|			_("required field %d missing"), tag);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  481|      0|		return 0;
  482|      0|	}
  483|       |
  484|  40.2k|	*out = fld;
  485|       |
  486|  40.2k|	return 1;
  487|  40.2k|}
tiff2vips.c:tfget16:
  493|  62.3k|{
  494|  62.3k|	guint16 fld;
  495|       |
  496|  62.3k|	if (!TIFFGetFieldDefaulted(tif, tag, &fld)) {
  ------------------
  |  Branch (496:6): [True: 1.32k, False: 61.0k]
  ------------------
  497|  1.32k|		vips_error("tiff2vips",
  498|  1.32k|			_("required field %d missing"), tag);
  ------------------
  |  |   30|  1.32k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  1.32k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  499|  1.32k|		return 0;
  500|  1.32k|	}
  501|       |
  502|  61.0k|	*out = fld;
  503|       |
  504|  61.0k|	return 1;
  505|  62.3k|}
tiff2vips.c:get_sample_format:
  560|  11.3k|{
  561|  11.3k|	int sample_format;
  562|  11.3k|	guint16 v;
  563|       |
  564|  11.3k|	sample_format = SAMPLEFORMAT_INT;
  ------------------
  |  |  335|  11.3k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  565|       |
  566|  11.3k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_SAMPLEFORMAT, &v)) {
  ------------------
  |  |  333|  11.3k|#define TIFFTAG_SAMPLEFORMAT 339           /* !data sample format */
  ------------------
  |  Branch (566:6): [True: 11.3k, False: 0]
  ------------------
  567|       |		/* Some images have this set to void, bizarre.
  568|       |		 */
  569|  11.3k|		if (v == SAMPLEFORMAT_VOID)
  ------------------
  |  |  337|  11.3k|#define SAMPLEFORMAT_VOID 4                /* !untyped data */
  ------------------
  |  Branch (569:7): [True: 15, False: 11.3k]
  ------------------
  570|     15|			v = SAMPLEFORMAT_UINT;
  ------------------
  |  |  334|     15|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  571|       |
  572|  11.3k|		sample_format = v;
  573|  11.3k|	}
  574|       |
  575|  11.3k|	return sample_format;
  576|  11.3k|}
tiff2vips.c:get_orientation:
  580|  11.3k|{
  581|  11.3k|	int orientation;
  582|  11.3k|	guint16 v;
  583|       |
  584|  11.3k|	orientation = ORIENTATION_TOPLEFT;
  ------------------
  |  |  249|  11.3k|#define ORIENTATION_TOPLEFT 1              /* row 0 top, col 0 lhs */
  ------------------
  585|       |
  586|  11.3k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_ORIENTATION, &v))
  ------------------
  |  |  248|  11.3k|#define TIFFTAG_ORIENTATION 274            /* +image orientation */
  ------------------
  |  Branch (586:6): [True: 11.3k, False: 0]
  ------------------
  587|       |		/* Can have mad values.
  588|       |		 */
  589|  11.3k|		orientation = VIPS_CLIP(1, v, 8);
  ------------------
  |  |   57|  11.3k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  22.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 11.3k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 11.3k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 11.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|       |
  591|  11.3k|	return orientation;
  592|  11.3k|}
tiff2vips.c:tfexists:
  462|  11.3k|{
  463|  11.3k|	guint32 a, b;
  464|       |
  465|  11.3k|	if (TIFFGetField(tif, tag, &a, &b))
  ------------------
  |  Branch (465:6): [True: 11.3k, False: 0]
  ------------------
  466|  11.3k|		return 1;
  467|      0|	else
  468|      0|		return 0;
  469|  11.3k|}
tiff2vips.c:rtiff_set_header:
 1852|  10.8k|{
 1853|  10.8k|	guint32 data_len;
 1854|  10.8k|	void *data;
 1855|       |
 1856|  10.8k|	rtiff_set_decode_format(rtiff);
 1857|       |
 1858|  10.8k|	if (rtiff->header.photometric_interpretation == PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  10.8k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1858:6): [True: 402, False: 10.4k]
  ------------------
 1859|    402|		vips_image_set_double(out, "stonits", rtiff->header.stonits);
 1860|       |
 1861|  10.8k|	out->Xsize = rtiff->header.width;
 1862|  10.8k|	out->Ysize = rtiff->header.height * rtiff->n;
 1863|       |
 1864|  10.8k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  10.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  10.8k|	{ \
  |  |   55|  10.8k|		const char *sst = (V); \
  |  |   56|  10.8k|		\
  |  |   57|  10.8k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 10.8k, False: 0]
  |  |  ------------------
  |  |   58|  10.8k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 10.8k]
  |  |  |  Branch (58:16): [True: 10.8k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  10.8k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  10.8k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  10.8k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  10.8k|	{ \
  |  |  |  |  |  |   43|  10.8k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 10.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  10.8k|			(void) F((S)); \
  |  |  |  |  |  |   45|  10.8k|			(S) = 0; \
  |  |  |  |  |  |   46|  10.8k|		} \
  |  |  |  |  |  |   47|  10.8k|	} \
  |  |  |  |  |  |   48|  10.8k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  10.8k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |   61|  10.8k|					(S) = g_strdup(sst); \
  |  |   62|  10.8k|			} \
  |  |   63|  10.8k|		} \
  |  |   64|  10.8k|	} \
  |  |   65|  10.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1865|  10.8k|		vips_connection_filename(VIPS_CONNECTION(rtiff->source)));
 1866|       |
 1867|  10.8k|	if (rtiff->n > 1)
  ------------------
  |  Branch (1867:6): [True: 0, False: 10.8k]
  ------------------
 1868|      0|		vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, rtiff->header.height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
 1869|       |
 1870|  10.8k|	if (rtiff->header.subifd_count > 0)
  ------------------
  |  Branch (1870:6): [True: 14, False: 10.8k]
  ------------------
 1871|     14|		vips_image_set_int(out,
 1872|     14|			VIPS_META_N_SUBIFDS, rtiff->header.subifd_count);
  ------------------
  |  |  172|     14|#define VIPS_META_N_SUBIFDS "n-subifds"
  ------------------
 1873|       |
 1874|  10.8k|	vips_image_set_int(out, VIPS_META_N_PAGES, rtiff->n_pages);
  ------------------
  |  |  165|  10.8k|#define VIPS_META_N_PAGES "n-pages"
  ------------------
 1875|       |
 1876|       |	/* We have a range of output paths. Look at the tiff header and try to
 1877|       |	 * route the input image to the best output path.
 1878|       |	 */
 1879|  10.8k|	if (rtiff_pick_reader(rtiff)(rtiff, out))
  ------------------
  |  Branch (1879:6): [True: 197, False: 10.6k]
  ------------------
 1880|    197|		return -1;
 1881|       |
 1882|       |	/* Read any ICC profile.
 1883|       |	 */
 1884|  10.6k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_ICCPROFILE, &data_len, &data))
  ------------------
  |  |  479|  10.6k|#define TIFFTAG_ICCPROFILE 34675 /* ICC profile data */
  ------------------
  |  Branch (1884:6): [True: 0, False: 10.6k]
  ------------------
 1885|      0|		vips_image_set_blob_copy(out, VIPS_META_ICC_NAME, data, data_len);
  ------------------
  |  |   78|      0|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
 1886|       |
 1887|       |	/* Read any XMP metadata.
 1888|       |	 */
 1889|  10.6k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_XMLPACKET, &data_len, &data))
  ------------------
  |  |  394|  10.6k|#define TIFFTAG_XMLPACKET 700              /* %XML packet [Adobe XMP Specification, January 2004 */
  ------------------
  |  Branch (1889:6): [True: 14, False: 10.6k]
  ------------------
 1890|     14|		vips_image_set_blob_copy(out, VIPS_META_XMP_NAME, data, data_len);
  ------------------
  |  |   53|     14|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
 1891|       |
 1892|       |	/* Read any IPTC metadata.
 1893|       |	 */
 1894|  10.6k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_RICHTIFFIPTC, &data_len, &data)) {
  ------------------
  |  |  448|  10.6k|#define TIFFTAG_RICHTIFFIPTC 33723
  ------------------
  |  Branch (1894:6): [True: 14, False: 10.6k]
  ------------------
 1895|     14|		vips_image_set_blob_copy(out, VIPS_META_IPTC_NAME, data, data_len);
  ------------------
  |  |   60|     14|#define VIPS_META_IPTC_NAME "iptc-data"
  ------------------
 1896|       |
 1897|       |		/* Older versions of libvips used this misspelt name :-( attach
 1898|       |		 * under this name too for compatibility.
 1899|       |		 */
 1900|     14|		vips_image_set_blob_copy(out, "ipct-data", data, data_len);
 1901|     14|	}
 1902|       |
 1903|       |	/* Read any photoshop metadata.
 1904|       |	 */
 1905|  10.6k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_PHOTOSHOP, &data_len, &data))
  ------------------
  |  |  475|  10.6k|#define TIFFTAG_PHOTOSHOP 34377
  ------------------
  |  Branch (1905:6): [True: 3, False: 10.6k]
  ------------------
 1906|      3|		vips_image_set_blob_copy(out, VIPS_META_PHOTOSHOP_NAME, data, data_len);
  ------------------
  |  |   68|      3|#define VIPS_META_PHOTOSHOP_NAME "photoshop-data"
  ------------------
 1907|       |
 1908|  10.6k|	if (rtiff->header.image_description)
  ------------------
  |  Branch (1908:6): [True: 69, False: 10.5k]
  ------------------
 1909|     69|		vips_image_set_string(out, VIPS_META_IMAGEDESCRIPTION,
  ------------------
  |  |   85|     69|#define VIPS_META_IMAGEDESCRIPTION "image-description"
  ------------------
 1910|     69|			rtiff->header.image_description);
 1911|       |
 1912|  10.6k|	if (get_resolution(rtiff->tiff, out))
  ------------------
  |  Branch (1912:6): [True: 0, False: 10.6k]
  ------------------
 1913|      0|		return -1;
 1914|       |
 1915|  10.6k|	vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|  10.6k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
 1916|  10.6k|		rtiff->header.bits_per_sample);
 1917|       |
 1918|       |	/* Set the "orientation" tag. This is picked up later by autorot, if
 1919|       |	 * requested.
 1920|       |	 */
 1921|  10.6k|	vips_image_set_int(out, VIPS_META_ORIENTATION, rtiff->header.orientation);
  ------------------
  |  |  149|  10.6k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
 1922|       |
 1923|       |	/* Hint smalltile for tiled images, since we may be decompressing
 1924|       |	 * outside the lock and THINSTRIP would prevent parallel tile decode.
 1925|       |	 */
 1926|  10.6k|	vips_image_pipelinev(out,
 1927|  10.6k|		rtiff->header.tiled
  ------------------
  |  Branch (1927:3): [True: 2.44k, False: 8.18k]
  ------------------
 1928|  10.6k|			? VIPS_DEMAND_STYLE_SMALLTILE
 1929|  10.6k|			: VIPS_DEMAND_STYLE_THINSTRIP,
 1930|  10.6k|		NULL);
 1931|       |
 1932|  10.6k|	return 0;
 1933|  10.6k|}
tiff2vips.c:rtiff_pick_reader:
 1804|  10.8k|{
 1805|  10.8k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1806|  10.8k|	int photometric_interpretation =
 1807|  10.8k|		rtiff->header.photometric_interpretation;
 1808|  10.8k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1809|  10.8k|	int read_as_rgba = rtiff->header.read_as_rgba;
 1810|       |
 1811|  10.8k|	if (read_as_rgba)
  ------------------
  |  Branch (1811:6): [True: 776, False: 10.0k]
  ------------------
 1812|    776|		return rtiff_parse_rgba;
 1813|       |
 1814|  10.0k|	if (photometric_interpretation == PHOTOMETRIC_CIELAB) {
  ------------------
  |  |  228|  10.0k|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1814:6): [True: 275, False: 9.77k]
  ------------------
 1815|    275|		if (bits_per_sample == 8) {
  ------------------
  |  Branch (1815:7): [True: 148, False: 127]
  ------------------
 1816|    148|			if (samples_per_pixel > 3)
  ------------------
  |  Branch (1816:8): [True: 1, False: 147]
  ------------------
 1817|      1|				return rtiff_parse_lab_with_alpha;
 1818|    147|			else
 1819|    147|				return rtiff_parse_labpack;
 1820|    148|		}
 1821|    127|		if (bits_per_sample == 16)
  ------------------
  |  Branch (1821:7): [True: 102, False: 25]
  ------------------
 1822|    102|			return rtiff_parse_labs;
 1823|    127|	}
 1824|       |
 1825|  9.79k|	if (photometric_interpretation == PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  9.79k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1825:6): [True: 402, False: 9.39k]
  ------------------
 1826|    402|		return rtiff_parse_logluv;
 1827|       |
 1828|  9.39k|	if (photometric_interpretation == PHOTOMETRIC_MINISWHITE ||
  ------------------
  |  |  221|  18.7k|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (1828:6): [True: 2.96k, False: 6.43k]
  ------------------
 1829|  9.39k|		photometric_interpretation == PHOTOMETRIC_MINISBLACK) {
  ------------------
  |  |  222|  6.43k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1829:3): [True: 3.18k, False: 3.24k]
  ------------------
 1830|       |
 1831|  6.15k|		if (bits_per_sample == 1)
  ------------------
  |  Branch (1831:7): [True: 4.36k, False: 1.78k]
  ------------------
 1832|  4.36k|			return rtiff_parse_onebit;
 1833|  1.78k|		else if (bits_per_sample == 2)
  ------------------
  |  Branch (1833:12): [True: 100, False: 1.68k]
  ------------------
 1834|    100|			return rtiff_parse_twobit;
 1835|  1.68k|		else if (bits_per_sample == 4)
  ------------------
  |  Branch (1835:12): [True: 214, False: 1.47k]
  ------------------
 1836|    214|			return rtiff_parse_fourbit;
 1837|  1.47k|		else
 1838|  1.47k|			return rtiff_parse_greyscale;
 1839|  6.15k|	}
 1840|       |
 1841|  3.24k|	if (photometric_interpretation == PHOTOMETRIC_PALETTE)
  ------------------
  |  |  224|  3.24k|#define PHOTOMETRIC_PALETTE 3              /* color map indexed */
  ------------------
  |  Branch (1841:6): [True: 300, False: 2.94k]
  ------------------
 1842|    300|		return rtiff_parse_palette;
 1843|       |
 1844|  2.94k|	return rtiff_parse_copy;
 1845|  3.24k|}
tiff2vips.c:rtiff_parse_rgba:
 1781|    776|{
 1782|    776|	out->Bands = 4;
 1783|    776|	out->Type = VIPS_INTERPRETATION_sRGB;
 1784|    776|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1785|    776|	out->Coding = VIPS_CODING_NONE;
 1786|       |
 1787|    776|	rtiff->client = out;
 1788|       |
 1789|       |	/* We'll have RGBA areas of exact size as we need, so we can just copy it
 1790|       |	 */
 1791|    776|	rtiff->sfn = rtiff_memcpy_line;
 1792|    776|	rtiff->memcpy = TRUE;
  ------------------
  |  |  209|    776|#define TRUE    1
  ------------------
 1793|       |
 1794|    776|	return 0;
 1795|    776|}
tiff2vips.c:rtiff_memcpy_line:
 1686|  5.25k|{
 1687|  5.25k|	VipsImage *im = (VipsImage *) client;
 1688|  5.25k|	size_t len = n * VIPS_IMAGE_SIZEOF_PEL(im);
  ------------------
  |  |  384|  5.25k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  5.25k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 1689|       |
 1690|  5.25k|	memcpy(q, p, len);
 1691|  5.25k|}
tiff2vips.c:rtiff_parse_lab_with_alpha:
 1074|      1|{
 1075|      1|	if (rtiff_check_min_samples(rtiff, 4) ||
  ------------------
  |  Branch (1075:6): [True: 0, False: 1]
  ------------------
 1076|      1|		rtiff_check_bits(rtiff, 8) ||
  ------------------
  |  Branch (1076:3): [True: 0, False: 1]
  ------------------
 1077|      1|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|      1|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1077:3): [True: 0, False: 1]
  ------------------
 1078|      0|		return -1;
 1079|       |
 1080|      1|	out->Bands = rtiff->header.samples_per_pixel;
 1081|      1|	out->BandFmt = VIPS_FORMAT_SHORT;
 1082|      1|	out->Coding = VIPS_CODING_NONE;
 1083|      1|	out->Type = VIPS_INTERPRETATION_LABS;
 1084|       |
 1085|      1|	rtiff->sfn = rtiff_lab_with_alpha_line;
 1086|       |
 1087|      1|	return 0;
 1088|      1|}
tiff2vips.c:rtiff_check_min_samples:
  878|  2.42k|{
  879|  2.42k|	if (rtiff->header.samples_per_pixel < samples_per_pixel) {
  ------------------
  |  Branch (879:6): [True: 19, False: 2.40k]
  ------------------
  880|     19|		vips_error("tiff2vips", _("not at least %d samples per pixel"),
  ------------------
  |  |   30|     19|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     19|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  881|     19|			samples_per_pixel);
  882|     19|		return -1;
  883|     19|	}
  884|       |
  885|  2.40k|	return 0;
  886|  2.42k|}
tiff2vips.c:rtiff_check_bits:
  918|  4.91k|{
  919|  4.91k|	if (rtiff->header.bits_per_sample != bits_per_sample) {
  ------------------
  |  Branch (919:6): [True: 0, False: 4.91k]
  ------------------
  920|      0|		vips_error("tiff2vips", _("not %d bits per sample"), bits_per_sample);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  921|      0|		return -1;
  922|      0|	}
  923|       |
  924|  4.91k|	return 0;
  925|  4.91k|}
tiff2vips.c:rtiff_check_interpretation:
  905|    633|{
  906|    633|	if (rtiff->header.photometric_interpretation !=
  ------------------
  |  Branch (906:6): [True: 0, False: 633]
  ------------------
  907|    633|		photometric_interpretation) {
  908|      0|		vips_error("tiff2vips", _("not photometric interpretation %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  909|      0|			photometric_interpretation);
  910|      0|		return -1;
  911|      0|	}
  912|       |
  913|    633|	return 0;
  914|    633|}
tiff2vips.c:rtiff_parse_labpack:
 1024|    147|{
 1025|    147|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1025:6): [True: 3, False: 144]
  ------------------
 1026|    147|		rtiff_check_bits(rtiff, 8) ||
  ------------------
  |  Branch (1026:3): [True: 0, False: 144]
  ------------------
 1027|    147|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|    144|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1027:3): [True: 0, False: 144]
  ------------------
 1028|      3|		return -1;
 1029|       |
 1030|    144|	out->Bands = 4;
 1031|    144|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1032|    144|	out->Coding = VIPS_CODING_LABQ;
 1033|    144|	out->Type = VIPS_INTERPRETATION_LAB;
 1034|       |
 1035|    144|	rtiff->sfn = rtiff_labpack_line;
 1036|       |
 1037|    144|	return 0;
 1038|    147|}
tiff2vips.c:rtiff_labpack_line:
 1004|  1.37k|{
 1005|  1.37k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1006|       |
 1007|  1.37k|	int x;
 1008|       |
 1009|  11.7k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1009:14): [True: 10.3k, False: 1.37k]
  ------------------
 1010|  10.3k|		q[0] = p[0];
 1011|  10.3k|		q[1] = p[1];
 1012|  10.3k|		q[2] = p[2];
 1013|  10.3k|		q[3] = 0;
 1014|       |
 1015|  10.3k|		q += 4;
 1016|  10.3k|		p += samples_per_pixel;
 1017|  10.3k|	}
 1018|  1.37k|}
tiff2vips.c:rtiff_parse_labs:
 1121|    102|{
 1122|    102|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1122:6): [True: 1, False: 101]
  ------------------
 1123|    102|		rtiff_check_bits(rtiff, 16) ||
  ------------------
  |  Branch (1123:3): [True: 0, False: 101]
  ------------------
 1124|    102|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|    101|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1124:3): [True: 0, False: 101]
  ------------------
 1125|      1|		return -1;
 1126|       |
 1127|    101|	out->Bands = rtiff->header.samples_per_pixel;
 1128|    101|	out->BandFmt = VIPS_FORMAT_SHORT;
 1129|    101|	out->Coding = VIPS_CODING_NONE;
 1130|    101|	out->Type = VIPS_INTERPRETATION_LABS;
 1131|       |
 1132|    101|	rtiff->sfn = rtiff_labs_line;
 1133|       |
 1134|    101|	return 0;
 1135|    102|}
tiff2vips.c:rtiff_labs_line:
 1094|    994|{
 1095|    994|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1096|       |
 1097|    994|	unsigned short *p1;
 1098|    994|	short *q1;
 1099|    994|	int x;
 1100|    994|	int i;
 1101|       |
 1102|    994|	p1 = (unsigned short *) p;
 1103|    994|	q1 = (short *) q;
 1104|  29.6k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1104:14): [True: 28.6k, False: 994]
  ------------------
 1105|       |		/* We use signed int16 for L.
 1106|       |		 */
 1107|  28.6k|		q1[0] = p1[0] >> 1;
 1108|       |
 1109|  85.8k|		for (i = 1; i < samples_per_pixel; i++)
  ------------------
  |  Branch (1109:15): [True: 57.2k, False: 28.6k]
  ------------------
 1110|  57.2k|			q1[i] = p1[i];
 1111|       |
 1112|  28.6k|		q1 += samples_per_pixel;
 1113|  28.6k|		p1 += samples_per_pixel;
 1114|  28.6k|	}
 1115|    994|}
tiff2vips.c:rtiff_parse_logluv:
 1168|    402|{
 1169|    402|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1169:6): [True: 15, False: 387]
  ------------------
 1170|    402|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_LOGLUV))
  ------------------
  |  |  233|    387|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1170:3): [True: 0, False: 387]
  ------------------
 1171|     15|		return -1;
 1172|       |
 1173|    387|	out->Bands = rtiff->header.samples_per_pixel;
 1174|    387|	out->BandFmt = VIPS_FORMAT_FLOAT;
 1175|    387|	out->Coding = VIPS_CODING_NONE;
 1176|    387|	out->Type = VIPS_INTERPRETATION_XYZ;
 1177|       |
 1178|    387|	rtiff->sfn = rtiff_logluv_line;
 1179|       |
 1180|    387|	return 0;
 1181|    402|}
tiff2vips.c:rtiff_logluv_line:
 1141|  5.60k|{
 1142|  5.60k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1143|       |
 1144|  5.60k|	float *p1;
 1145|  5.60k|	float *q1;
 1146|  5.60k|	int x;
 1147|  5.60k|	int i;
 1148|       |
 1149|  5.60k|	p1 = (float *) p;
 1150|  5.60k|	q1 = (float *) q;
 1151|   117k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1151:14): [True: 112k, False: 5.60k]
  ------------------
 1152|   112k|		q1[0] = VIPS_D65_X0 * p1[0];
  ------------------
  |  |   58|   112k|#define VIPS_D65_X0 (95.0470)
  ------------------
 1153|   112k|		q1[1] = VIPS_D65_Y0 * p1[1];
  ------------------
  |  |   59|   112k|#define VIPS_D65_Y0 (100.0)
  ------------------
 1154|   112k|		q1[2] = VIPS_D65_Z0 * p1[2];
  ------------------
  |  |   60|   112k|#define VIPS_D65_Z0 (108.8827)
  ------------------
 1155|       |
 1156|   112k|		for (i = 3; i < samples_per_pixel; i++)
  ------------------
  |  Branch (1156:15): [True: 0, False: 112k]
  ------------------
 1157|      0|			q1[i] = p1[i];
 1158|       |
 1159|   112k|		q1 += samples_per_pixel;
 1160|   112k|		p1 += samples_per_pixel;
 1161|   112k|	}
 1162|  5.60k|}
tiff2vips.c:rtiff_parse_onebit:
 1252|  4.36k|{
 1253|  4.36k|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1253:6): [True: 5, False: 4.36k]
  ------------------
 1254|  4.36k|		rtiff_check_bits(rtiff, 1))
  ------------------
  |  Branch (1254:3): [True: 0, False: 4.36k]
  ------------------
 1255|      5|		return -1;
 1256|       |
 1257|  4.36k|	out->Bands = 1;
 1258|  4.36k|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1259|  4.36k|	out->Coding = VIPS_CODING_NONE;
 1260|  4.36k|	out->Type = VIPS_INTERPRETATION_B_W;
 1261|       |
 1262|  4.36k|	rtiff->sfn = rtiff_1bit_line;
 1263|       |
 1264|  4.36k|	return 0;
 1265|  4.36k|}
tiff2vips.c:rtiff_check_samples:
  865|  4.67k|{
  866|  4.67k|	if (rtiff->header.samples_per_pixel != samples_per_pixel) {
  ------------------
  |  Branch (866:6): [True: 8, False: 4.67k]
  ------------------
  867|      8|		vips_error("tiff2vips", _("not %d bands"), samples_per_pixel);
  ------------------
  |  |   30|      8|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      8|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  868|      8|		return -1;
  869|      8|	}
  870|       |
  871|  4.67k|	return 0;
  872|  4.67k|}
tiff2vips.c:rtiff_1bit_line:
 1190|  65.0k|	{ \
 1191|  65.0k|		int photometric = rtiff->header.photometric_interpretation; \
 1192|  65.0k|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|  65.0k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 12.5k, False: 52.5k]
  ------------------
 1193|  65.0k|		int bps = rtiff->header.bits_per_sample; \
 1194|  65.0k|		int load = 8 / bps - 1; \
 1195|  65.0k|\
 1196|  65.0k|		int x; \
 1197|  65.0k|		VipsPel bits; \
 1198|  65.0k|\
 1199|  65.0k|		/* Stop a compiler warning. \
 1200|  65.0k|		 */ \
 1201|  65.0k|		bits = 0; \
 1202|  65.0k|\
 1203|  4.83M|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 4.77M, False: 65.0k]
  ------------------
 1204|  4.77M|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 617k, False: 4.15M]
  ------------------
 1205|  4.77M|				/* Flip the bits for miniswhite. \
 1206|  4.77M|				 */ \
 1207|  4.77M|				bits = *p++ ^ mask; \
 1208|  4.77M|\
 1209|  4.77M|			EXPAND(q[x], bits); \
  ------------------
  |  | 1244|  4.77M|NBIT_LINE(1, EXPAND1)
  |  |  ------------------
  |  |  |  | 1218|  4.77M|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  4.77M|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1219|  4.77M|	{ \
  |  |  |  | 1220|  4.77M|		(Q) = (((signed char) (BITS & 128)) >> 7); \
  |  |  |  | 1221|  4.77M|	} \
  |  |  |  | 1222|  4.77M|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  4.77M|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|  4.77M|\
 1211|  4.77M|			bits <<= bps; \
 1212|  4.77M|		} \
 1213|  65.0k|	}
tiff2vips.c:rtiff_parse_twobit:
 1271|    100|{
 1272|    100|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1272:6): [True: 2, False: 98]
  ------------------
 1273|    100|		rtiff_check_bits(rtiff, 2))
  ------------------
  |  Branch (1273:3): [True: 0, False: 98]
  ------------------
 1274|      2|		return -1;
 1275|       |
 1276|     98|	out->Bands = 1;
 1277|     98|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1278|     98|	out->Coding = VIPS_CODING_NONE;
 1279|     98|	out->Type = VIPS_INTERPRETATION_B_W;
 1280|       |
 1281|     98|	rtiff->sfn = rtiff_2bit_line;
 1282|       |
 1283|     98|	return 0;
 1284|    100|}
tiff2vips.c:rtiff_2bit_line:
 1190|    977|	{ \
 1191|    977|		int photometric = rtiff->header.photometric_interpretation; \
 1192|    977|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|    977|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 296, False: 681]
  ------------------
 1193|    977|		int bps = rtiff->header.bits_per_sample; \
 1194|    977|		int load = 8 / bps - 1; \
 1195|    977|\
 1196|    977|		int x; \
 1197|    977|		VipsPel bits; \
 1198|    977|\
 1199|    977|		/* Stop a compiler warning. \
 1200|    977|		 */ \
 1201|    977|		bits = 0; \
 1202|    977|\
 1203|  34.8k|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 33.9k, False: 977]
  ------------------
 1204|  33.9k|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 8.74k, False: 25.1k]
  ------------------
 1205|  33.9k|				/* Flip the bits for miniswhite. \
 1206|  33.9k|				 */ \
 1207|  33.9k|				bits = *p++ ^ mask; \
 1208|  33.9k|\
 1209|  33.9k|			EXPAND(q[x], bits); \
  ------------------
  |  | 1245|  33.9k|NBIT_LINE(2, EXPAND2)
  |  |  ------------------
  |  |  |  | 1227|  33.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  33.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1228|  33.9k|	{ \
  |  |  |  | 1229|  33.9k|		VipsPel twobits = BITS >> 6; \
  |  |  |  | 1230|  33.9k|		VipsPel fourbits = twobits | (twobits << 2); \
  |  |  |  | 1231|  33.9k|		Q = fourbits | (fourbits << 4); \
  |  |  |  | 1232|  33.9k|	} \
  |  |  |  | 1233|  33.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  33.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|  33.9k|\
 1211|  33.9k|			bits <<= bps; \
 1212|  33.9k|		} \
 1213|    977|	}
tiff2vips.c:rtiff_parse_fourbit:
 1290|    214|{
 1291|    214|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1291:6): [True: 1, False: 213]
  ------------------
 1292|    214|		rtiff_check_bits(rtiff, 4))
  ------------------
  |  Branch (1292:3): [True: 0, False: 213]
  ------------------
 1293|      1|		return -1;
 1294|       |
 1295|    213|	out->Bands = 1;
 1296|    213|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1297|    213|	out->Coding = VIPS_CODING_NONE;
 1298|    213|	out->Type = VIPS_INTERPRETATION_B_W;
 1299|       |
 1300|    213|	rtiff->sfn = rtiff_4bit_line;
 1301|       |
 1302|    213|	return 0;
 1303|    214|}
tiff2vips.c:rtiff_4bit_line:
 1190|  2.13k|	{ \
 1191|  2.13k|		int photometric = rtiff->header.photometric_interpretation; \
 1192|  2.13k|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|  2.13k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 24, False: 2.11k]
  ------------------
 1193|  2.13k|		int bps = rtiff->header.bits_per_sample; \
 1194|  2.13k|		int load = 8 / bps - 1; \
 1195|  2.13k|\
 1196|  2.13k|		int x; \
 1197|  2.13k|		VipsPel bits; \
 1198|  2.13k|\
 1199|  2.13k|		/* Stop a compiler warning. \
 1200|  2.13k|		 */ \
 1201|  2.13k|		bits = 0; \
 1202|  2.13k|\
 1203|   151k|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 149k, False: 2.13k]
  ------------------
 1204|   149k|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 74.9k, False: 74.5k]
  ------------------
 1205|   149k|				/* Flip the bits for miniswhite. \
 1206|   149k|				 */ \
 1207|   149k|				bits = *p++ ^ mask; \
 1208|   149k|\
 1209|   149k|			EXPAND(q[x], bits); \
  ------------------
  |  | 1246|   149k|NBIT_LINE(4, EXPAND4)
  |  |  ------------------
  |  |  |  | 1238|   149k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   149k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1239|   149k|	{ \
  |  |  |  | 1240|   149k|		Q = (BITS & 0xf0) | (BITS >> 4); \
  |  |  |  | 1241|   149k|	} \
  |  |  |  | 1242|   149k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   149k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|   149k|\
 1211|   149k|			bits <<= bps; \
 1212|   149k|		} \
 1213|  2.13k|	}
tiff2vips.c:rtiff_parse_greyscale:
 1419|  1.47k|{
 1420|  1.47k|	if (rtiff_check_min_samples(rtiff, 1) ||
  ------------------
  |  Branch (1420:6): [True: 0, False: 1.47k]
  ------------------
 1421|  1.47k|		rtiff_non_fractional(rtiff))
  ------------------
  |  Branch (1421:3): [True: 3, False: 1.47k]
  ------------------
 1422|      3|		return -1;
 1423|       |
 1424|  1.47k|	out->Bands = rtiff->header.samples_per_pixel;
 1425|  1.47k|	out->BandFmt = rtiff_guess_format(rtiff);
 1426|  1.47k|	if (out->BandFmt == VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (1426:6): [True: 4, False: 1.46k]
  ------------------
 1427|      4|		return -1;
 1428|  1.46k|	out->Coding = VIPS_CODING_NONE;
 1429|       |
 1430|  1.46k|	if (rtiff->header.bits_per_sample == 16)
  ------------------
  |  Branch (1430:6): [True: 677, False: 789]
  ------------------
 1431|    677|		out->Type = VIPS_INTERPRETATION_GREY16;
 1432|    789|	else
 1433|    789|		out->Type = VIPS_INTERPRETATION_B_W;
 1434|       |
 1435|       |	/* rtiff_greyscale_line() doesn't do complex.
 1436|       |	 */
 1437|  1.46k|	if (vips_check_noncomplex("tiff2vips", out))
  ------------------
  |  Branch (1437:6): [True: 0, False: 1.46k]
  ------------------
 1438|      0|		return -1;
 1439|       |
 1440|  1.46k|	rtiff->sfn = rtiff_greyscale_line;
 1441|       |
 1442|  1.46k|	return 0;
 1443|  1.46k|}
tiff2vips.c:rtiff_non_fractional:
  892|  4.41k|{
  893|  4.41k|	if (rtiff->header.bits_per_sample % 8 != 0 ||
  ------------------
  |  Branch (893:6): [True: 164, False: 4.25k]
  ------------------
  894|  4.41k|		rtiff->header.bits_per_sample == 0) {
  ------------------
  |  Branch (894:3): [True: 0, False: 4.25k]
  ------------------
  895|    164|		vips_error("tiff2vips", "%s", _("samples_per_pixel "
  ------------------
  |  |   30|    164|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    164|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  896|    164|										"not a whole number of bytes"));
  897|    164|		return -1;
  898|    164|	}
  899|       |
  900|  4.25k|	return 0;
  901|  4.41k|}
tiff2vips.c:rtiff_guess_format:
  946|  17.4k|{
  947|  17.4k|	int bits_per_sample = rtiff->header.bits_per_sample;
  948|  17.4k|	int sample_format = rtiff->header.sample_format;
  949|       |
  950|  17.4k|	switch (bits_per_sample) {
  951|      0|	case 1:
  ------------------
  |  Branch (951:2): [True: 0, False: 17.4k]
  ------------------
  952|      0|	case 2:
  ------------------
  |  Branch (952:2): [True: 0, False: 17.4k]
  ------------------
  953|      0|	case 4:
  ------------------
  |  Branch (953:2): [True: 0, False: 17.4k]
  ------------------
  954|  4.46k|	case 8:
  ------------------
  |  Branch (954:2): [True: 4.46k, False: 12.9k]
  ------------------
  955|  4.46k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  4.46k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (955:7): [True: 802, False: 3.66k]
  ------------------
  956|    802|			return VIPS_FORMAT_CHAR;
  957|  3.66k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  3.66k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (957:7): [True: 3.66k, False: 2]
  ------------------
  958|  3.66k|			return VIPS_FORMAT_UCHAR;
  959|      2|		break;
  960|       |
  961|  7.87k|	case 16:
  ------------------
  |  Branch (961:2): [True: 7.87k, False: 9.53k]
  ------------------
  962|  7.87k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  7.87k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (962:7): [True: 1.78k, False: 6.09k]
  ------------------
  963|  1.78k|			return VIPS_FORMAT_SHORT;
  964|  6.09k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  6.09k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (964:7): [True: 4.06k, False: 2.03k]
  ------------------
  965|  4.06k|			return VIPS_FORMAT_USHORT;
  966|  2.03k|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|  2.03k|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (966:7): [True: 2.03k, False: 1]
  ------------------
  967|  2.03k|			return VIPS_FORMAT_FLOAT;
  968|      1|		break;
  969|       |
  970|  5.06k|	case 32:
  ------------------
  |  Branch (970:2): [True: 5.06k, False: 12.3k]
  ------------------
  971|  5.06k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  5.06k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (971:7): [True: 1.50k, False: 3.56k]
  ------------------
  972|  1.50k|			return VIPS_FORMAT_INT;
  973|  3.56k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  3.56k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (973:7): [True: 2.74k, False: 815]
  ------------------
  974|  2.74k|			return VIPS_FORMAT_UINT;
  975|    815|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|    815|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (975:7): [True: 814, False: 1]
  ------------------
  976|    814|			return VIPS_FORMAT_FLOAT;
  977|      1|		break;
  978|       |
  979|      1|	case 64:
  ------------------
  |  Branch (979:2): [True: 0, False: 17.4k]
  ------------------
  980|      0|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|      0|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (980:7): [True: 0, False: 0]
  ------------------
  981|      0|			return VIPS_FORMAT_DOUBLE;
  982|      0|		if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP)
  ------------------
  |  |  339|      0|#define SAMPLEFORMAT_COMPLEXIEEEFP 6       /* !complex ieee floating */
  ------------------
  |  Branch (982:7): [True: 0, False: 0]
  ------------------
  983|      0|			return VIPS_FORMAT_COMPLEX;
  984|      0|		break;
  985|       |
  986|      0|	case 128:
  ------------------
  |  Branch (986:2): [True: 0, False: 17.4k]
  ------------------
  987|      0|		if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP)
  ------------------
  |  |  339|      0|#define SAMPLEFORMAT_COMPLEXIEEEFP 6       /* !complex ieee floating */
  ------------------
  |  Branch (987:7): [True: 0, False: 0]
  ------------------
  988|      0|			return VIPS_FORMAT_DPCOMPLEX;
  989|      0|		break;
  990|       |
  991|      2|	default:
  ------------------
  |  Branch (991:2): [True: 2, False: 17.4k]
  ------------------
  992|      2|		break;
  993|  17.4k|	}
  994|       |
  995|      6|	vips_error("tiff2vips", "%s", _("unsupported tiff image type\n"));
  ------------------
  |  |   30|      6|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      6|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  996|       |
  997|      6|	return VIPS_FORMAT_NOTSET;
  998|  17.4k|}
tiff2vips.c:rtiff_greyscale_line:
 1356|  13.1k|{
 1357|  13.1k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1358|  13.1k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1359|  13.1k|	int photometric_interpretation =
 1360|  13.1k|		rtiff->header.photometric_interpretation;
 1361|  13.1k|	VipsBandFormat format = rtiff_guess_format(rtiff);
 1362|       |
 1363|       |	/* Swapping black and white doesn't make sense for the signed formats.
 1364|       |	 */
 1365|  13.1k|	gboolean invert =
 1366|  13.1k|		photometric_interpretation == PHOTOMETRIC_MINISWHITE &&
  ------------------
  |  |  221|  26.3k|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (1366:3): [True: 8.11k, False: 5.04k]
  ------------------
 1367|  13.1k|		vips_band_format_isuint(format);
  ------------------
  |  Branch (1367:3): [True: 2.72k, False: 5.39k]
  ------------------
 1368|       |
 1369|  13.1k|	int x, i;
 1370|       |
 1371|  13.1k|	switch (format) {
 1372|    619|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (1372:2): [True: 619, False: 12.5k]
  ------------------
 1373|    619|		GREY_LOOP(gchar, 0);
  ------------------
  |  | 1308|    619|	{ \
  |  | 1309|    619|		TYPE *p1; \
  |  | 1310|    619|		TYPE *q1; \
  |  | 1311|    619|\
  |  | 1312|    619|		p1 = (TYPE *) p; \
  |  | 1313|    619|		q1 = (TYPE *) q; \
  |  | 1314|  4.10k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 3.48k, False: 619]
  |  |  ------------------
  |  | 1315|  3.48k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 3.48k]
  |  |  ------------------
  |  | 1316|  3.48k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  3.48k|			else \
  |  | 1318|  3.48k|				q1[0] = p1[0]; \
  |  | 1319|  3.48k|\
  |  | 1320|  7.44k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 3.96k, False: 3.48k]
  |  |  ------------------
  |  | 1321|  3.96k|				q1[i] = p1[i]; \
  |  | 1322|  3.48k|\
  |  | 1323|  3.48k|			q1 += samples_per_pixel; \
  |  | 1324|  3.48k|			p1 += samples_per_pixel; \
  |  | 1325|  3.48k|		} \
  |  | 1326|    619|	}
  ------------------
 1374|    619|		break;
 1375|       |
 1376|  2.71k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (1376:2): [True: 2.71k, False: 10.4k]
  ------------------
 1377|  2.71k|		GREY_LOOP(guchar, UCHAR_MAX);
  ------------------
  |  | 1308|  2.71k|	{ \
  |  | 1309|  2.71k|		TYPE *p1; \
  |  | 1310|  2.71k|		TYPE *q1; \
  |  | 1311|  2.71k|\
  |  | 1312|  2.71k|		p1 = (TYPE *) p; \
  |  | 1313|  2.71k|		q1 = (TYPE *) q; \
  |  | 1314|  49.7k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 47.0k, False: 2.71k]
  |  |  ------------------
  |  | 1315|  47.0k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 2.97k, False: 44.1k]
  |  |  ------------------
  |  | 1316|  47.0k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  47.0k|			else \
  |  | 1318|  47.0k|				q1[0] = p1[0]; \
  |  | 1319|  47.0k|\
  |  | 1320|  69.9k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 22.8k, False: 47.0k]
  |  |  ------------------
  |  | 1321|  47.0k|				q1[i] = p1[i]; \
  |  | 1322|  47.0k|\
  |  | 1323|  47.0k|			q1 += samples_per_pixel; \
  |  | 1324|  47.0k|			p1 += samples_per_pixel; \
  |  | 1325|  47.0k|		} \
  |  | 1326|  2.71k|	}
  ------------------
 1378|  2.71k|		break;
 1379|       |
 1380|  1.46k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (1380:2): [True: 1.46k, False: 11.6k]
  ------------------
 1381|  1.46k|		GREY_LOOP(gshort, 0);
  ------------------
  |  | 1308|  1.46k|	{ \
  |  | 1309|  1.46k|		TYPE *p1; \
  |  | 1310|  1.46k|		TYPE *q1; \
  |  | 1311|  1.46k|\
  |  | 1312|  1.46k|		p1 = (TYPE *) p; \
  |  | 1313|  1.46k|		q1 = (TYPE *) q; \
  |  | 1314|  23.1k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 21.7k, False: 1.46k]
  |  |  ------------------
  |  | 1315|  21.7k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 21.7k]
  |  |  ------------------
  |  | 1316|  21.7k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  21.7k|			else \
  |  | 1318|  21.7k|				q1[0] = p1[0]; \
  |  | 1319|  21.7k|\
  |  | 1320|  55.6k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 33.9k, False: 21.7k]
  |  |  ------------------
  |  | 1321|  33.9k|				q1[i] = p1[i]; \
  |  | 1322|  21.7k|\
  |  | 1323|  21.7k|			q1 += samples_per_pixel; \
  |  | 1324|  21.7k|			p1 += samples_per_pixel; \
  |  | 1325|  21.7k|		} \
  |  | 1326|  1.46k|	}
  ------------------
 1382|  1.46k|		break;
 1383|       |
 1384|  2.56k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (1384:2): [True: 2.56k, False: 10.5k]
  ------------------
 1385|  2.56k|		GREY_LOOP(gushort, USHRT_MAX);
  ------------------
  |  | 1308|  2.56k|	{ \
  |  | 1309|  2.56k|		TYPE *p1; \
  |  | 1310|  2.56k|		TYPE *q1; \
  |  | 1311|  2.56k|\
  |  | 1312|  2.56k|		p1 = (TYPE *) p; \
  |  | 1313|  2.56k|		q1 = (TYPE *) q; \
  |  | 1314|  71.1k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 68.5k, False: 2.56k]
  |  |  ------------------
  |  | 1315|  68.5k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 8.57k, False: 60.0k]
  |  |  ------------------
  |  | 1316|  68.5k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  68.5k|			else \
  |  | 1318|  68.5k|				q1[0] = p1[0]; \
  |  | 1319|  68.5k|\
  |  | 1320|  82.4k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 13.8k, False: 68.5k]
  |  |  ------------------
  |  | 1321|  68.5k|				q1[i] = p1[i]; \
  |  | 1322|  68.5k|\
  |  | 1323|  68.5k|			q1 += samples_per_pixel; \
  |  | 1324|  68.5k|			p1 += samples_per_pixel; \
  |  | 1325|  68.5k|		} \
  |  | 1326|  2.56k|	}
  ------------------
 1386|  2.56k|		break;
 1387|       |
 1388|  1.16k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (1388:2): [True: 1.16k, False: 11.9k]
  ------------------
 1389|  1.16k|		GREY_LOOP(gint, 0);
  ------------------
  |  | 1308|  1.16k|	{ \
  |  | 1309|  1.16k|		TYPE *p1; \
  |  | 1310|  1.16k|		TYPE *q1; \
  |  | 1311|  1.16k|\
  |  | 1312|  1.16k|		p1 = (TYPE *) p; \
  |  | 1313|  1.16k|		q1 = (TYPE *) q; \
  |  | 1314|  9.00k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 7.83k, False: 1.16k]
  |  |  ------------------
  |  | 1315|  7.83k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 7.83k]
  |  |  ------------------
  |  | 1316|  7.83k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  7.83k|			else \
  |  | 1318|  7.83k|				q1[0] = p1[0]; \
  |  | 1319|  7.83k|\
  |  | 1320|  19.0k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 11.1k, False: 7.83k]
  |  |  ------------------
  |  | 1321|  11.1k|				q1[i] = p1[i]; \
  |  | 1322|  7.83k|\
  |  | 1323|  7.83k|			q1 += samples_per_pixel; \
  |  | 1324|  7.83k|			p1 += samples_per_pixel; \
  |  | 1325|  7.83k|		} \
  |  | 1326|  1.16k|	}
  ------------------
 1390|  1.16k|		break;
 1391|       |
 1392|  2.31k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (1392:2): [True: 2.31k, False: 10.8k]
  ------------------
 1393|  2.31k|		GREY_LOOP(guint, UINT_MAX);
  ------------------
  |  | 1308|  2.31k|	{ \
  |  | 1309|  2.31k|		TYPE *p1; \
  |  | 1310|  2.31k|		TYPE *q1; \
  |  | 1311|  2.31k|\
  |  | 1312|  2.31k|		p1 = (TYPE *) p; \
  |  | 1313|  2.31k|		q1 = (TYPE *) q; \
  |  | 1314|  28.9k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 26.5k, False: 2.31k]
  |  |  ------------------
  |  | 1315|  26.5k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 23.8k, False: 2.75k]
  |  |  ------------------
  |  | 1316|  26.5k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  26.5k|			else \
  |  | 1318|  26.5k|				q1[0] = p1[0]; \
  |  | 1319|  26.5k|\
  |  | 1320|  40.5k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 13.9k, False: 26.5k]
  |  |  ------------------
  |  | 1321|  26.5k|				q1[i] = p1[i]; \
  |  | 1322|  26.5k|\
  |  | 1323|  26.5k|			q1 += samples_per_pixel; \
  |  | 1324|  26.5k|			p1 += samples_per_pixel; \
  |  | 1325|  26.5k|		} \
  |  | 1326|  2.31k|	}
  ------------------
 1394|  2.31k|		break;
 1395|       |
 1396|  2.32k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (1396:2): [True: 2.32k, False: 10.8k]
  ------------------
 1397|  2.32k|		if (bits_per_sample == 16) {
  ------------------
  |  Branch (1397:7): [True: 1.77k, False: 546]
  ------------------
 1398|  1.77k|			GREY_LOOP_F16;
  ------------------
  |  | 1331|  1.77k|	{ \
  |  | 1332|  1.77k|		gushort *p1; \
  |  | 1333|  1.77k|		float *q1; \
  |  | 1334|  1.77k|\
  |  | 1335|  1.77k|		p1 = (gushort *) p; \
  |  | 1336|  1.77k|		q1 = (float *) q; \
  |  | 1337|  30.4k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1337:15): [True: 28.6k, False: 1.77k]
  |  |  ------------------
  |  | 1338|  28.6k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1338:8): [True: 0, False: 28.6k]
  |  |  ------------------
  |  | 1339|  28.6k|				q1[0] = 1.0 - half_2_float(p1[0]); \
  |  | 1340|  28.6k|			else \
  |  | 1341|  28.6k|				q1[0] = half_2_float(p1[0]); \
  |  | 1342|  28.6k|\
  |  | 1343|  64.5k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1343:16): [True: 35.8k, False: 28.6k]
  |  |  ------------------
  |  | 1344|  35.8k|				q1[i] = half_2_float(p1[i]); \
  |  | 1345|  28.6k|\
  |  | 1346|  28.6k|			q1 += samples_per_pixel; \
  |  | 1347|  28.6k|			p1 += samples_per_pixel; \
  |  | 1348|  28.6k|		} \
  |  | 1349|  1.77k|	}
  ------------------
 1399|  1.77k|		}
 1400|    546|		else {
 1401|    546|			GREY_LOOP(float, 1.0);
  ------------------
  |  | 1308|    546|	{ \
  |  | 1309|    546|		TYPE *p1; \
  |  | 1310|    546|		TYPE *q1; \
  |  | 1311|    546|\
  |  | 1312|    546|		p1 = (TYPE *) p; \
  |  | 1313|    546|		q1 = (TYPE *) q; \
  |  | 1314|  2.37k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 1.82k, False: 546]
  |  |  ------------------
  |  | 1315|  1.82k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 1.82k]
  |  |  ------------------
  |  | 1316|  1.82k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  1.82k|			else \
  |  | 1318|  1.82k|				q1[0] = p1[0]; \
  |  | 1319|  1.82k|\
  |  | 1320|  3.67k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 1.85k, False: 1.82k]
  |  |  ------------------
  |  | 1321|  1.85k|				q1[i] = p1[i]; \
  |  | 1322|  1.82k|\
  |  | 1323|  1.82k|			q1 += samples_per_pixel; \
  |  | 1324|  1.82k|			p1 += samples_per_pixel; \
  |  | 1325|  1.82k|		} \
  |  | 1326|    546|	}
  ------------------
 1402|    546|		}
 1403|  2.32k|		break;
 1404|       |
 1405|      0|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (1405:2): [True: 0, False: 13.1k]
  ------------------
 1406|      0|		GREY_LOOP(double, 1.0);
  ------------------
  |  | 1308|      0|	{ \
  |  | 1309|      0|		TYPE *p1; \
  |  | 1310|      0|		TYPE *q1; \
  |  | 1311|      0|\
  |  | 1312|      0|		p1 = (TYPE *) p; \
  |  | 1313|      0|		q1 = (TYPE *) q; \
  |  | 1314|      0|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 0, False: 0]
  |  |  ------------------
  |  | 1315|      0|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 0]
  |  |  ------------------
  |  | 1316|      0|				q1[0] = MAX - p1[0]; \
  |  | 1317|      0|			else \
  |  | 1318|      0|				q1[0] = p1[0]; \
  |  | 1319|      0|\
  |  | 1320|      0|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 0, False: 0]
  |  |  ------------------
  |  | 1321|      0|				q1[i] = p1[i]; \
  |  | 1322|      0|\
  |  | 1323|      0|			q1 += samples_per_pixel; \
  |  | 1324|      0|			p1 += samples_per_pixel; \
  |  | 1325|      0|		} \
  |  | 1326|      0|	}
  ------------------
 1407|      0|		break;
 1408|       |
 1409|      0|	default:
  ------------------
  |  Branch (1409:2): [True: 0, False: 13.1k]
  ------------------
 1410|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1411|  13.1k|	}
 1412|  13.1k|}
tiff2vips.c:half_2_float:
  441|  97.1k|{
  442|  97.1k|	const float sign = (h >> 15) * -2 + 1;
  443|  97.1k|	const int exp = ((h & 0x7C00) >> 10) - 15;
  444|  97.1k|	const float prec = (h & 0x03FF);
  445|       |
  446|  97.1k|	switch (exp) {
  447|  6.80k|	case 16:
  ------------------
  |  Branch (447:2): [True: 6.80k, False: 90.3k]
  ------------------
  448|  6.80k|		return INFINITY * sign;
  449|  59.5k|	case -15:
  ------------------
  |  Branch (449:2): [True: 59.5k, False: 37.5k]
  ------------------
  450|  59.5k|		return sign / (float) (1 << 14) * (prec / 1024.0);
  451|  30.7k|	default:
  ------------------
  |  Branch (451:2): [True: 30.7k, False: 66.4k]
  ------------------
  452|  30.7k|		return exp > 0
  ------------------
  |  Branch (452:10): [True: 16.0k, False: 14.7k]
  ------------------
  453|  30.7k|			? sign * (float) (1 << exp) * (1.0 + prec / 1024.0)
  454|  30.7k|			: sign / (float) (1 << -exp) * (1.0 + prec / 1024.0);
  455|  97.1k|	}
  456|  97.1k|}
tiff2vips.c:rtiff_parse_palette:
 1579|    300|{
 1580|    300|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1581|    300|	int bits_per_sample = rtiff->header.bits_per_sample;
 1582|       |
 1583|    300|	int len;
 1584|    300|	PaletteRead *read;
 1585|    300|	int i;
 1586|       |
 1587|    300|	if (rtiff_check_bits_palette(rtiff) ||
  ------------------
  |  Branch (1587:6): [True: 0, False: 300]
  ------------------
 1588|    300|		rtiff_check_min_samples(rtiff, 1))
  ------------------
  |  Branch (1588:3): [True: 0, False: 300]
  ------------------
 1589|      0|		return -1;
 1590|    300|	len = 1 << bits_per_sample;
 1591|       |
 1592|    300|	if (!(read = VIPS_NEW(out, PaletteRead)) ||
  ------------------
  |  |   70|    300|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    300|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    300|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    300|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    300|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1592:6): [True: 0, False: 300]
  ------------------
 1593|    300|		!(read->red8 = VIPS_ARRAY(out, len, VipsPel)) ||
  ------------------
  |  |   72|    300|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    300|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    300|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    300|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    300|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1593:3): [True: 0, False: 300]
  ------------------
 1594|    300|		!(read->green8 = VIPS_ARRAY(out, len, VipsPel)) ||
  ------------------
  |  |   72|    300|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    300|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    300|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    300|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    300|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1594:3): [True: 0, False: 300]
  ------------------
 1595|    300|		!(read->blue8 = VIPS_ARRAY(out, len, VipsPel)))
  ------------------
  |  |   72|    300|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    300|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    300|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    300|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    300|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1595:3): [True: 0, False: 300]
  ------------------
 1596|      0|		return -1;
 1597|       |
 1598|       |	/* Get maps, convert to 8-bit data.
 1599|       |	 */
 1600|    300|	if (!TIFFGetField(rtiff->tiff,
  ------------------
  |  Branch (1600:6): [True: 0, False: 300]
  ------------------
 1601|    300|			TIFFTAG_COLORMAP,
  ------------------
  |  |  309|    300|#define TIFFTAG_COLORMAP 320               /* RGB map for palette image */
  ------------------
 1602|    300|			&read->red16, &read->green16, &read->blue16)) {
 1603|      0|		vips_error("tiff2vips", "%s", _("bad colormap"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1604|      0|		return -1;
 1605|      0|	}
 1606|       |
 1607|       |	/* Old-style colourmaps were 8-bit. If all the top bytes are zero,
 1608|       |	 * assume we have one of these.
 1609|       |	 *
 1610|       |	 * See: https://github.com/libvips/libvips/issues/220
 1611|       |	 */
 1612|  5.71k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1612:14): [True: 5.66k, False: 53]
  ------------------
 1613|  5.66k|		if ((read->red16[i] >> 8) |
  ------------------
  |  Branch (1613:7): [True: 247, False: 5.41k]
  ------------------
 1614|  5.66k|			(read->green16[i] >> 8) |
 1615|  5.66k|			(read->blue16[i] >> 8))
 1616|    247|			break;
 1617|    300|	if (i < len)
  ------------------
  |  Branch (1617:6): [True: 247, False: 53]
  ------------------
 1618|  4.15k|		for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1618:15): [True: 3.90k, False: 247]
  ------------------
 1619|  3.90k|			read->red8[i] = read->red16[i] >> 8;
 1620|  3.90k|			read->green8[i] = read->green16[i] >> 8;
 1621|  3.90k|			read->blue8[i] = read->blue16[i] >> 8;
 1622|  3.90k|		}
 1623|     53|	else {
 1624|     53|		g_warning("%s", _("assuming 8-bit palette"));
  ------------------
  |  |  338|     53|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     53|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     53|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     53|                               __VA_ARGS__)
  ------------------
 1625|       |
 1626|  5.10k|		for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1626:15): [True: 5.05k, False: 53]
  ------------------
 1627|  5.05k|			read->red8[i] = read->red16[i] & 0xff;
 1628|  5.05k|			read->green8[i] = read->green16[i] & 0xff;
 1629|  5.05k|			read->blue8[i] = read->blue16[i] & 0xff;
 1630|  5.05k|		}
 1631|     53|	}
 1632|       |
 1633|       |	/* Are all the maps equal? We have a mono image.
 1634|       |	 */
 1635|    300|	read->mono = TRUE;
  ------------------
  |  |  209|    300|#define TRUE    1
  ------------------
 1636|  1.78k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1636:14): [True: 1.75k, False: 36]
  ------------------
 1637|  1.75k|		if (read->red16[i] != read->green16[i] ||
  ------------------
  |  Branch (1637:7): [True: 249, False: 1.50k]
  ------------------
 1638|  1.75k|			read->green16[i] != read->blue16[i]) {
  ------------------
  |  Branch (1638:4): [True: 15, False: 1.48k]
  ------------------
 1639|    264|			read->mono = FALSE;
  ------------------
  |  |  206|    264|#define FALSE   0               /* values of boolean */
  ------------------
 1640|    264|			break;
 1641|    264|		}
 1642|       |
 1643|       |	/* There's a TIFF extension, INDEXED, that is the preferred way to
 1644|       |	 * encode mono palette images, but few applications support it. So we
 1645|       |	 * just search the colormap.
 1646|       |	 */
 1647|       |
 1648|    300|	if (bits_per_sample <= 8)
  ------------------
  |  Branch (1648:6): [True: 300, False: 0]
  ------------------
 1649|    300|		out->BandFmt = VIPS_FORMAT_UCHAR;
 1650|      0|	else
 1651|      0|		out->BandFmt = VIPS_FORMAT_USHORT;
 1652|    300|	out->Coding = VIPS_CODING_NONE;
 1653|       |
 1654|    300|	if (read->mono) {
  ------------------
  |  Branch (1654:6): [True: 36, False: 264]
  ------------------
 1655|     36|		out->Bands = samples_per_pixel;
 1656|     36|		if (bits_per_sample <= 8)
  ------------------
  |  Branch (1656:7): [True: 36, False: 0]
  ------------------
 1657|     36|			out->Type = VIPS_INTERPRETATION_B_W;
 1658|      0|		else
 1659|      0|			out->Type = VIPS_INTERPRETATION_GREY16;
 1660|     36|	}
 1661|    264|	else {
 1662|    264|		out->Bands = samples_per_pixel + 2;
 1663|    264|		if (bits_per_sample <= 8)
  ------------------
  |  Branch (1663:7): [True: 264, False: 0]
  ------------------
 1664|    264|			out->Type = VIPS_INTERPRETATION_sRGB;
 1665|      0|		else
 1666|      0|			out->Type = VIPS_INTERPRETATION_RGB16;
 1667|    264|	}
 1668|       |
 1669|    300|	rtiff->client = read;
 1670|    300|	if (bits_per_sample < 8)
  ------------------
  |  Branch (1670:6): [True: 271, False: 29]
  ------------------
 1671|    271|		rtiff->sfn = rtiff_palette_line_bit;
 1672|     29|	else if (bits_per_sample == 8)
  ------------------
  |  Branch (1672:11): [True: 29, False: 0]
  ------------------
 1673|     29|		rtiff->sfn = rtiff_palette_line8;
 1674|      0|	else if (bits_per_sample == 16)
  ------------------
  |  Branch (1674:11): [True: 0, False: 0]
  ------------------
 1675|      0|		rtiff->sfn = rtiff_palette_line16;
 1676|      0|	else
 1677|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1678|       |
 1679|    300|	return 0;
 1680|    300|}
tiff2vips.c:rtiff_check_bits_palette:
  929|    300|{
  930|    300|	if (rtiff->header.bits_per_sample != 16 &&
  ------------------
  |  Branch (930:6): [True: 300, False: 0]
  ------------------
  931|    300|		rtiff->header.bits_per_sample != 8 &&
  ------------------
  |  Branch (931:3): [True: 271, False: 29]
  ------------------
  932|    300|		rtiff->header.bits_per_sample != 4 &&
  ------------------
  |  Branch (932:3): [True: 232, False: 39]
  ------------------
  933|    300|		rtiff->header.bits_per_sample != 2 &&
  ------------------
  |  Branch (933:3): [True: 8, False: 224]
  ------------------
  934|    300|		rtiff->header.bits_per_sample != 1) {
  ------------------
  |  Branch (934:3): [True: 0, False: 8]
  ------------------
  935|      0|		vips_error("tiff2vips",
  936|      0|			_("%d bits per sample palette image not supported"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  937|      0|			rtiff->header.bits_per_sample);
  938|      0|		return -1;
  939|      0|	}
  940|       |
  941|    300|	return 0;
  942|    300|}
tiff2vips.c:rtiff_palette_line_bit:
 1466|  3.28k|{
 1467|  3.28k|	PaletteRead *read = (PaletteRead *) client;
 1468|  3.28k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1469|  3.28k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1470|       |
 1471|  3.28k|	int bit;
 1472|  3.28k|	VipsPel data;
 1473|  3.28k|	int x;
 1474|       |
 1475|  3.28k|	bit = 0;
 1476|  3.28k|	data = 0;
 1477|   110k|	for (x = 0; x < n * samples_per_pixel; x++) {
  ------------------
  |  Branch (1477:14): [True: 107k, False: 3.28k]
  ------------------
 1478|   107k|		int i;
 1479|       |
 1480|   107k|		if (bit <= 0) {
  ------------------
  |  Branch (1480:7): [True: 31.0k, False: 76.5k]
  ------------------
 1481|  31.0k|			data = *p++;
 1482|  31.0k|			bit = 8;
 1483|  31.0k|		}
 1484|       |
 1485|   107k|		i = data >> (8 - bits_per_sample);
 1486|   107k|		data <<= bits_per_sample;
 1487|   107k|		bit -= bits_per_sample;
 1488|       |
 1489|       |		/* The first band goes through the LUT, subsequent bands are
 1490|       |		 * left-justified and copied.
 1491|       |		 */
 1492|   107k|		if (x % samples_per_pixel == 0) {
  ------------------
  |  Branch (1492:7): [True: 100k, False: 7.33k]
  ------------------
 1493|   100k|			if (read->mono)
  ------------------
  |  Branch (1493:8): [True: 9.53k, False: 90.7k]
  ------------------
 1494|  9.53k|				*q++ = read->red8[i];
 1495|  90.7k|			else {
 1496|  90.7k|				q[0] = read->red8[i];
 1497|  90.7k|				q[1] = read->green8[i];
 1498|  90.7k|				q[2] = read->blue8[i];
 1499|  90.7k|				q += 3;
 1500|  90.7k|			}
 1501|   100k|		}
 1502|  7.33k|		else
 1503|  7.33k|			*q++ = VIPS_LSHIFT_INT(i, 8 - bits_per_sample);
  ------------------
  |  |   87|  7.33k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
 1504|   107k|	}
 1505|  3.28k|}
tiff2vips.c:rtiff_palette_line8:
 1512|    540|{
 1513|    540|	PaletteRead *read = (PaletteRead *) client;
 1514|    540|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1515|       |
 1516|    540|	int x;
 1517|    540|	int s;
 1518|       |
 1519|  12.8k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1519:14): [True: 12.3k, False: 540]
  ------------------
 1520|  12.3k|		int i = p[0];
 1521|       |
 1522|  12.3k|		if (read->mono)
  ------------------
  |  Branch (1522:7): [True: 4.38k, False: 7.97k]
  ------------------
 1523|  4.38k|			q[0] = read->red8[i];
 1524|  7.97k|		else {
 1525|  7.97k|			q[0] = read->red8[i];
 1526|  7.97k|			q[1] = read->green8[i];
 1527|  7.97k|			q[2] = read->blue8[i];
 1528|  7.97k|			q += 2;
 1529|  7.97k|		}
 1530|       |
 1531|  12.3k|		for (s = 1; s < samples_per_pixel; s++)
  ------------------
  |  Branch (1531:15): [True: 0, False: 12.3k]
  ------------------
 1532|      0|			q[s] = p[s];
 1533|       |
 1534|  12.3k|		q += samples_per_pixel;
 1535|  12.3k|		p += samples_per_pixel;
 1536|  12.3k|	}
 1537|    540|}
tiff2vips.c:rtiff_parse_copy:
 1719|  2.94k|{
 1720|  2.94k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1721|  2.94k|	int photometric_interpretation =
 1722|  2.94k|		rtiff->header.photometric_interpretation;
 1723|  2.94k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1724|  2.94k|	int sample_format = rtiff->header.sample_format;
 1725|  2.94k|	int inkset = rtiff->header.inkset;
 1726|       |
 1727|  2.94k|	if (rtiff_non_fractional(rtiff))
  ------------------
  |  Branch (1727:6): [True: 161, False: 2.78k]
  ------------------
 1728|    161|		return -1;
 1729|       |
 1730|  2.78k|	out->Bands = samples_per_pixel;
 1731|  2.78k|	out->BandFmt = rtiff_guess_format(rtiff);
 1732|  2.78k|	if (out->BandFmt == VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (1732:6): [True: 2, False: 2.78k]
  ------------------
 1733|      2|		return -1;
 1734|  2.78k|	out->Coding = VIPS_CODING_NONE;
 1735|       |
 1736|  2.78k|	if (samples_per_pixel >= 3 &&
  ------------------
  |  Branch (1736:6): [True: 2.06k, False: 716]
  ------------------
 1737|  2.78k|		(photometric_interpretation == PHOTOMETRIC_RGB ||
  ------------------
  |  |  223|  4.13k|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
  |  Branch (1737:4): [True: 119, False: 1.94k]
  ------------------
 1738|  2.06k|		photometric_interpretation == PHOTOMETRIC_YCBCR)) {
  ------------------
  |  |  227|  1.94k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (1738:3): [True: 1.03k, False: 909]
  ------------------
 1739|  1.15k|		if (out->BandFmt == VIPS_FORMAT_USHORT)
  ------------------
  |  Branch (1739:7): [True: 791, False: 366]
  ------------------
 1740|    791|			out->Type = VIPS_INTERPRETATION_RGB16;
 1741|    366|		else if (!vips_band_format_isint(out->BandFmt))
  ------------------
  |  Branch (1741:12): [True: 13, False: 353]
  ------------------
 1742|       |			/* Most float images use 0 - 1 for black - white.
 1743|       |			 * Photoshop uses 0 - 1 and no gamma.
 1744|       |			 */
 1745|     13|			out->Type = VIPS_INTERPRETATION_scRGB;
 1746|    353|		else
 1747|    353|			out->Type = VIPS_INTERPRETATION_sRGB;
 1748|  1.15k|	}
 1749|  1.62k|	else if (samples_per_pixel >= 3 &&
  ------------------
  |  Branch (1749:11): [True: 909, False: 716]
  ------------------
 1750|  1.62k|		photometric_interpretation == PHOTOMETRIC_CIELAB)
  ------------------
  |  |  228|    909|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1750:3): [True: 15, False: 894]
  ------------------
 1751|     15|		out->Type = VIPS_INTERPRETATION_LAB;
 1752|  1.61k|	else if (photometric_interpretation == PHOTOMETRIC_SEPARATED &&
  ------------------
  |  |  226|  3.22k|#define PHOTOMETRIC_SEPARATED 5            /* !color separations */
  ------------------
  |  Branch (1752:11): [True: 506, False: 1.10k]
  ------------------
 1753|  1.61k|		samples_per_pixel >= 4 &&
  ------------------
  |  Branch (1753:3): [True: 442, False: 64]
  ------------------
 1754|  1.61k|		inkset == INKSET_CMYK)
  ------------------
  |  |  323|    442|#define INKSET_CMYK 1                      /* !cyan-magenta-yellow-black color */
  ------------------
  |  Branch (1754:3): [True: 441, False: 1]
  ------------------
 1755|    441|		out->Type = VIPS_INTERPRETATION_CMYK;
 1756|  1.16k|	else
 1757|  1.16k|		out->Type = VIPS_INTERPRETATION_MULTIBAND;
 1758|       |
 1759|  2.78k|	rtiff->client = out;
 1760|       |
 1761|  2.78k|	if (bits_per_sample == 16 && sample_format == SAMPLEFORMAT_IEEEFP) {
  ------------------
  |  |  336|  1.39k|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (1761:6): [True: 1.39k, False: 1.38k]
  |  Branch (1761:31): [True: 79, False: 1.31k]
  ------------------
 1762|     79|		rtiff->sfn = rtiff_memcpy_f16_line;
 1763|     79|	}
 1764|  2.70k|	else {
 1765|  2.70k|		rtiff->sfn = rtiff_memcpy_line;
 1766|       |
 1767|       |		/* We expand YCBCR images to RGB using JPEGCOLORMODE_RGB, and this
 1768|       |		 * means we need a slightly larger read buffer for the edge pixels. In
 1769|       |		 * turn, this means we can't just memcpy to libvips regions.
 1770|       |		 */
 1771|  2.70k|		rtiff->memcpy = photometric_interpretation != PHOTOMETRIC_YCBCR;
  ------------------
  |  |  227|  2.70k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
 1772|  2.70k|	}
 1773|       |
 1774|  2.78k|	return 0;
 1775|  2.78k|}
tiff2vips.c:rtiff_memcpy_f16_line:
 1697|    672|{
 1698|    672|	VipsImage *im = (VipsImage *) client;
 1699|    672|	size_t len = n * im->Bands;
 1700|       |
 1701|    672|	if (im->BandFmt == VIPS_FORMAT_COMPLEX ||
  ------------------
  |  Branch (1701:6): [True: 0, False: 672]
  ------------------
 1702|    672|		im->BandFmt == VIPS_FORMAT_DPCOMPLEX)
  ------------------
  |  Branch (1702:3): [True: 0, False: 672]
  ------------------
 1703|      0|		len *= 2;
 1704|       |
 1705|    672|	int i;
 1706|       |
 1707|    672|	gushort *restrict hp = (gushort *) p;
 1708|    672|	float *restrict fq = (float *) q;
 1709|       |
 1710|  33.3k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1710:14): [True: 32.6k, False: 672]
  ------------------
 1711|  32.6k|		fq[i] = half_2_float(hp[i]);
 1712|    672|}
tiff2vips.c:get_resolution:
  509|  10.6k|{
  510|  10.6k|	float x, y;
  511|  10.6k|	int ru;
  512|       |
  513|  10.6k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_XRESOLUTION, &x) &&
  ------------------
  |  |  262|  10.6k|#define TIFFTAG_XRESOLUTION 282            /* pixels/resolution in x */
  ------------------
  |  Branch (513:6): [True: 598, False: 10.0k]
  ------------------
  514|  10.6k|		TIFFGetFieldDefaulted(tiff, TIFFTAG_YRESOLUTION, &y) &&
  ------------------
  |  |  263|    598|#define TIFFTAG_YRESOLUTION 283            /* pixels/resolution in y */
  ------------------
  |  Branch (514:3): [True: 598, False: 0]
  ------------------
  515|  10.6k|		tfget16(tiff, TIFFTAG_RESOLUTIONUNIT, &ru)) {
  ------------------
  |  |  287|    598|#define TIFFTAG_RESOLUTIONUNIT 296         /* units of resolutions */
  ------------------
  |  Branch (515:3): [True: 598, False: 0]
  ------------------
  516|    598|		switch (ru) {
  517|    168|		case RESUNIT_NONE:
  ------------------
  |  |  288|    168|#define RESUNIT_NONE 1                     /* no meaningful units */
  ------------------
  |  Branch (517:3): [True: 168, False: 430]
  ------------------
  518|    168|			break;
  519|       |
  520|    427|		case RESUNIT_INCH:
  ------------------
  |  |  289|    427|#define RESUNIT_INCH 2                     /* english */
  ------------------
  |  Branch (520:3): [True: 427, False: 171]
  ------------------
  521|       |			/* In pixels-per-inch ... convert to mm.
  522|       |			 */
  523|    427|			x /= 10.0 * 2.54;
  524|    427|			y /= 10.0 * 2.54;
  525|    427|			vips_image_set_string(out,
  526|    427|				VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|    427|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  527|    427|			break;
  528|       |
  529|      3|		case RESUNIT_CENTIMETER:
  ------------------
  |  |  290|      3|#define RESUNIT_CENTIMETER 3               /* metric */
  ------------------
  |  Branch (529:3): [True: 3, False: 595]
  ------------------
  530|       |			/* In pixels-per-centimetre ... convert to mm.
  531|       |			 */
  532|      3|			x /= 10.0;
  533|      3|			y /= 10.0;
  534|      3|			vips_image_set_string(out,
  535|      3|				VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|      3|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  536|      3|			break;
  537|       |
  538|      0|		default:
  ------------------
  |  Branch (538:3): [True: 0, False: 598]
  ------------------
  539|      0|			vips_error("tiff2vips",
  540|      0|				"%s", _("unknown resolution unit"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  541|      0|			return -1;
  542|    598|		}
  543|    598|	}
  544|  10.0k|	else {
  545|       |		/* We used to warn about missing res data, but it happens so
  546|       |		 * often and is so harmless, why bother.
  547|       |		 */
  548|  10.0k|		x = 1.0;
  549|  10.0k|		y = 1.0;
  550|  10.0k|	}
  551|       |
  552|  10.6k|	out->Xres = x;
  553|  10.6k|	out->Yres = y;
  554|       |
  555|  10.6k|	return 0;
  556|  10.6k|}
tiff2vips.c:rtiff_read_tilewise:
 2594|  1.22k|{
 2595|  1.22k|	int tile_width = rtiff->header.tile_width;
 2596|  1.22k|	int tile_height = rtiff->header.tile_height;
 2597|  1.22k|	VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 4);
  ------------------
  |  |  433|  1.22k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.22k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.22k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2598|       |
 2599|  1.22k|	VipsImage *in;
 2600|       |
 2601|       |#ifdef DEBUG
 2602|       |	printf("tiff2vips: rtiff_read_tilewise\n");
 2603|       |#endif /*DEBUG*/
 2604|       |
 2605|       |	/* I don't have a sample images for tiled + separate, ban it for now.
 2606|       |	 */
 2607|  1.22k|	if (rtiff->header.separate) {
  ------------------
  |  Branch (2607:6): [True: 8, False: 1.21k]
  ------------------
 2608|      8|		vips_error("tiff2vips", "%s", _("tiled separate planes not supported"));
  ------------------
  |  |   30|      8|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      8|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2609|      8|		return -1;
 2610|      8|	}
 2611|       |
 2612|       |	/* Read to this image, then cache to out, see below.
 2613|       |	 */
 2614|  1.21k|	t[0] = vips_image_new();
 2615|       |
 2616|  1.21k|	if (rtiff_set_header(rtiff, t[0]))
  ------------------
  |  Branch (2616:6): [True: 0, False: 1.21k]
  ------------------
 2617|      0|		return -1;
 2618|       |
 2619|       |	/* Double check: in memcpy mode, the vips tilesize should exactly
 2620|       |	 * match the tifftile size.
 2621|       |	 */
 2622|  1.21k|	if (rtiff->memcpy) {
  ------------------
  |  Branch (2622:6): [True: 32, False: 1.18k]
  ------------------
 2623|     32|		size_t vips_tile_size = VIPS_IMAGE_SIZEOF_PEL(t[0]) *
  ------------------
  |  |  384|     32|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|     32|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 2624|     32|			tile_width * tile_height;
 2625|       |
 2626|     32|		if (rtiff->header.tile_size != vips_tile_size) {
  ------------------
  |  Branch (2626:7): [True: 0, False: 32]
  ------------------
 2627|      0|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2628|      0|			return -1;
 2629|      0|		}
 2630|     32|	}
 2631|       |
 2632|       |	/* Generate to out, adding a cache. Enough tiles for two complete rows.
 2633|       |	 * Set "threaded", so we allow many tiles to be read at once. We lock
 2634|       |	 * around each tile read.
 2635|       |	 */
 2636|  1.21k|	if (
 2637|  1.21k|		vips_image_generate(t[0],
  ------------------
  |  Branch (2637:3): [True: 0, False: 1.21k]
  ------------------
 2638|  1.21k|			rtiff_seq_start, rtiff_fill_region, rtiff_seq_stop,
 2639|  1.21k|			rtiff, NULL) ||
 2640|  1.21k|		vips_tilecache(t[0], &t[1],
  ------------------
  |  Branch (2640:3): [True: 0, False: 1.21k]
  ------------------
 2641|  1.21k|			"tile_width", tile_width,
 2642|  1.21k|			"tile_height", tile_height,
 2643|  1.21k|			"max_tiles", 2 * (1 + t[0]->Xsize / tile_width),
 2644|  1.21k|			"threaded", TRUE,
  ------------------
  |  |  209|  1.21k|#define TRUE    1
  ------------------
 2645|  1.21k|			NULL) ||
 2646|  1.21k|		rtiff_unpremultiply(rtiff, t[1], &t[2]))
  ------------------
  |  Branch (2646:3): [True: 0, False: 1.21k]
  ------------------
 2647|      0|		return -1;
 2648|  1.21k|	in = t[2];
 2649|       |
 2650|       |	/* Only do this if we have to.
 2651|       |	 */
 2652|  1.21k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (2652:6): [True: 0, False: 1.21k]
  ------------------
 2653|  1.21k|		vips_image_get_orientation(in) != 1) {
  ------------------
  |  Branch (2653:3): [True: 0, False: 0]
  ------------------
 2654|      0|		if (vips_autorot(in, &t[3], NULL))
  ------------------
  |  Branch (2654:7): [True: 0, False: 0]
  ------------------
 2655|      0|			return -1;
 2656|      0|		in = t[3];
 2657|      0|	}
 2658|       |
 2659|  1.21k|	if (vips_image_write(in, out))
  ------------------
  |  Branch (2659:6): [True: 0, False: 1.21k]
  ------------------
 2660|      0|		return -1;
 2661|       |
 2662|  1.21k|	return 0;
 2663|  1.21k|}
tiff2vips.c:rtiff_seq_start:
 1957|  1.21k|{
 1958|  1.21k|	Rtiff *rtiff = (Rtiff *) a;
 1959|  1.21k|	RtiffSeq *seq;
 1960|       |
 1961|  1.21k|	if (!(seq = VIPS_NEW(out, RtiffSeq)))
  ------------------
  |  |   70|  1.21k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  1.21k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  1.21k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  1.21k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  1.21k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1961:6): [True: 0, False: 1.21k]
  ------------------
 1962|      0|		return NULL;
 1963|  1.21k|	seq->rtiff = rtiff;
 1964|  1.21k|	if (!(seq->buf = vips_malloc(NULL, rtiff->header.tile_size)))
  ------------------
  |  Branch (1964:6): [True: 0, False: 1.21k]
  ------------------
 1965|      0|		return NULL;
 1966|       |
 1967|       |	/* If we will be decompressing, we need a buffer large enough to hold
 1968|       |	 * the largest compressed tile in any page.
 1969|       |	 *
 1970|       |	 * Allocate a buffer 2x the uncompressed tile size ... much simpler
 1971|       |	 * than searching every page for the largest tile with
 1972|       |	 * TIFFTAG_TILEBYTECOUNTS.
 1973|       |	 */
 1974|  1.21k|	if (rtiff->header.we_decompress) {
  ------------------
  |  Branch (1974:6): [True: 172, False: 1.04k]
  ------------------
 1975|    172|		seq->compressed_buf_length = 2 * rtiff->header.tile_size;
 1976|    172|		if (!(seq->compressed_buf = VIPS_MALLOC(NULL,
  ------------------
  |  |   68|    172|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|    172|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|    172|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|    172|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1976:7): [True: 0, False: 172]
  ------------------
 1977|    172|				  seq->compressed_buf_length)))
 1978|      0|			return NULL;
 1979|    172|	}
 1980|       |
 1981|  1.21k|	return (void *) seq;
 1982|  1.21k|}
tiff2vips.c:rtiff_fill_region:
 2503|  1.21k|{
 2504|  1.21k|	Rtiff *rtiff = (Rtiff *) a;
 2505|  1.21k|	int tile_width = rtiff->header.tile_width;
 2506|  1.21k|	int tile_height = rtiff->header.tile_height;
 2507|  1.21k|	int page_width = rtiff->header.width;
 2508|  1.21k|	int page_height = rtiff->header.height;
 2509|  1.21k|	VipsRect *r = &out->valid;
 2510|  1.21k|	int page_no = r->top / page_height;
 2511|  1.21k|	int page_y = r->top % page_height;
 2512|       |
 2513|  1.21k|	VipsGenerateFn generate;
 2514|       |
 2515|       |#ifdef DEBUG_VERBOSE
 2516|       |	printf("rtiff_fill_region: left = %d, top = %d, "
 2517|       |		   "width = %d, height = %d\n",
 2518|       |		r->left, r->top, r->width, r->height);
 2519|       |#endif /*DEBUG_VERBOSE*/
 2520|       |
 2521|       |	/* Special case: we are filling a single cache tile exactly sized to
 2522|       |	 * match the tiff tile, and we have no repacking to do for this format.
 2523|       |	 *
 2524|       |	 * If we are not on the first page, pages must be a multiple of the
 2525|       |	 * tile size of we'll miss alignment.
 2526|       |	 */
 2527|  1.21k|	if ((page_no == 0 || page_height % tile_height == 0) &&
  ------------------
  |  Branch (2527:7): [True: 1.21k, False: 0]
  |  Branch (2527:23): [True: 0, False: 0]
  ------------------
 2528|  1.21k|		r->left % tile_width == 0 &&
  ------------------
  |  Branch (2528:3): [True: 1.21k, False: 0]
  ------------------
 2529|  1.21k|		r->top % tile_height == 0 &&
  ------------------
  |  Branch (2529:3): [True: 1.21k, False: 0]
  ------------------
 2530|  1.21k|		r->width == tile_width &&
  ------------------
  |  Branch (2530:3): [True: 14, False: 1.20k]
  ------------------
 2531|  1.21k|		r->height == tile_height &&
  ------------------
  |  Branch (2531:3): [True: 1, False: 13]
  ------------------
 2532|  1.21k|		r->left + tile_width <= page_width &&
  ------------------
  |  Branch (2532:3): [True: 1, False: 0]
  ------------------
 2533|  1.21k|		page_y + tile_height <= page_height &&
  ------------------
  |  Branch (2533:3): [True: 1, False: 0]
  ------------------
 2534|  1.21k|		VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out) &&
  ------------------
  |  |  195|      1|	((size_t) ((R)->bpl))
  ------------------
              		VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out) &&
  ------------------
  |  |  203|  1.21k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|      1|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      1|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      1|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2534:3): [True: 1, False: 0]
  ------------------
 2535|  1.21k|		rtiff->memcpy)
  ------------------
  |  Branch (2535:3): [True: 0, False: 1]
  ------------------
 2536|      0|		generate = rtiff_fill_region_aligned;
 2537|  1.21k|	else
 2538|  1.21k|		generate = rtiff_fill_region_unaligned;
 2539|       |
 2540|  1.21k|	VIPS_GATE_START("rtiff_fill_region: work");
  ------------------
  |  |   41|  1.21k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  1.21k|	{ \
  |  |   43|  1.21k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 1.21k]
  |  |  ------------------
  |  |   44|  1.21k|			vips__thread_gate_start(NAME); \
  |  |   45|  1.21k|	} \
  |  |   46|  1.21k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2541|       |
 2542|  1.21k|	if (generate(out, vseq, a, b, stop)) {
  ------------------
  |  Branch (2542:6): [True: 148, False: 1.06k]
  ------------------
 2543|    148|		VIPS_GATE_STOP("rtiff_fill_region: work");
  ------------------
  |  |   49|    148|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    148|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    148|	{ \
  |  |   51|    148|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 148]
  |  |  ------------------
  |  |   52|    148|			vips__thread_gate_stop(NAME); \
  |  |   53|    148|	} \
  |  |   54|    148|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    148|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2544|    148|		return -1;
 2545|    148|	}
 2546|       |
 2547|  1.21k|	VIPS_GATE_STOP("rtiff_fill_region: work");
  ------------------
  |  |   49|  1.06k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.06k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  1.06k|	{ \
  |  |   51|  1.06k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |   52|  1.06k|			vips__thread_gate_stop(NAME); \
  |  |   53|  1.06k|	} \
  |  |   54|  1.21k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2548|       |
 2549|  1.06k|	return 0;
 2550|  1.21k|}
tiff2vips.c:rtiff_read_tile:
 2292|  1.21k|{
 2293|  1.21k|	Rtiff *rtiff = seq->rtiff;
 2294|       |
 2295|  1.21k|	tsize_t size;
 2296|       |
 2297|       |#ifdef DEBUG_VERBOSE
 2298|       |	printf("rtiff_read_tile: page = %d, x = %d, y = %d, "
 2299|       |		   "we_decompress = %d\n",
 2300|       |		page, x, y, rtiff->header.we_decompress);
 2301|       |#endif /*DEBUG_VERBOSE*/
 2302|       |
 2303|       |	/* Compressed tiles load to compressed_buf.
 2304|       |	 */
 2305|  1.21k|	if (rtiff->header.we_decompress) {
  ------------------
  |  Branch (2305:6): [True: 172, False: 1.04k]
  ------------------
 2306|    172|		ttile_t tile_no;
 2307|       |
 2308|    172|		g_rec_mutex_lock(&rtiff->lock);
 2309|       |
 2310|    172|		if (rtiff_set_page(rtiff, page)) {
  ------------------
  |  Branch (2310:7): [True: 0, False: 172]
  ------------------
 2311|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2312|      0|			return -1;
 2313|      0|		}
 2314|       |
 2315|    172|		tile_no = TIFFComputeTile(rtiff->tiff, x, y, 0, 0);
 2316|       |
 2317|    172|		size = TIFFReadRawTile(rtiff->tiff, tile_no,
 2318|    172|			seq->compressed_buf, seq->compressed_buf_length);
 2319|    172|		if (size <= 0) {
  ------------------
  |  Branch (2319:7): [True: 65, False: 107]
  ------------------
 2320|     65|			vips_foreign_load_invalidate(rtiff->out);
 2321|     65|			g_rec_mutex_unlock(&rtiff->lock);
 2322|     65|			return -1;
 2323|     65|		}
 2324|       |
 2325|    107|		g_rec_mutex_unlock(&rtiff->lock);
 2326|       |
 2327|       |		/* Decompress outside the lock, so we get parallelism.
 2328|       |		 */
 2329|    107|		if (rtiff_decompress_tile(rtiff, seq->compressed_buf, size, buf)) {
  ------------------
  |  Branch (2329:7): [True: 83, False: 24]
  ------------------
 2330|     83|			vips_error("tiff2vips", _("decompress error tile %d x %d"), x, y);
  ------------------
  |  |   30|     83|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     83|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2331|     83|			return -1;
 2332|     83|		}
 2333|    107|	}
 2334|  1.04k|	else {
 2335|  1.04k|		g_rec_mutex_lock(&rtiff->lock);
 2336|       |
 2337|  1.04k|		if (rtiff_set_page(rtiff, page)) {
  ------------------
  |  Branch (2337:7): [True: 0, False: 1.04k]
  ------------------
 2338|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2339|      0|			return -1;
 2340|      0|		}
 2341|       |
 2342|  1.04k|		int result;
 2343|  1.04k|		if (rtiff->header.read_as_rgba)
  ------------------
  |  Branch (2343:7): [True: 0, False: 1.04k]
  ------------------
 2344|      0|			result = rtiff_read_rgba_tile(rtiff, x, y, buf);
 2345|  1.04k|		else
 2346|  1.04k|			result = TIFFReadTile(rtiff->tiff, buf, x, y, 0, 0) < 0;
 2347|  1.04k|		if (result && rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (2347:7): [True: 321, False: 721]
  |  Branch (2347:17): [True: 0, False: 321]
  ------------------
 2348|      0|			vips_foreign_load_invalidate(rtiff->out);
 2349|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2350|      0|			return -1;
 2351|      0|		}
 2352|       |
 2353|  1.04k|		g_rec_mutex_unlock(&rtiff->lock);
 2354|  1.04k|	}
 2355|       |
 2356|  1.06k|	return 0;
 2357|  1.21k|}
tiff2vips.c:rtiff_decompress_tile:
 2226|    107|{
 2227|    107|	g_assert(rtiff->header.we_decompress);
  ------------------
  |  |  166|    107|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    107|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    107|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2228|       |
 2229|    107|	switch (rtiff->header.compression) {
 2230|      1|	case JP2K_YCC:
  ------------------
  |  |  277|      1|#define JP2K_YCC 33003
  ------------------
  |  Branch (2230:2): [True: 1, False: 106]
  ------------------
 2231|      1|	case JP2K_RGB:
  ------------------
  |  |  278|      1|#define JP2K_RGB 33005
  ------------------
  |  Branch (2231:2): [True: 0, False: 107]
  ------------------
 2232|      1|	case JP2K_LOSSY:
  ------------------
  |  |  282|      1|#define JP2K_LOSSY 33004
  ------------------
  |  Branch (2232:2): [True: 0, False: 107]
  ------------------
 2233|      1|		if (vips__foreign_load_jp2k_decompress(
  ------------------
  |  Branch (2233:7): [True: 1, False: 0]
  ------------------
 2234|      1|				rtiff->out,
 2235|      1|				rtiff->header.tile_width,
 2236|      1|				rtiff->header.tile_height,
 2237|      1|				TRUE,
  ------------------
  |  |  209|      1|#define TRUE    1
  ------------------
 2238|      1|				in, size,
 2239|      1|				out, rtiff->header.tile_size))
 2240|      1|			return -1;
 2241|      0|		break;
 2242|       |
 2243|      0|#ifdef HAVE_JPEG
 2244|    106|	case COMPRESSION_JPEG:
  ------------------
  |  |  190|    106|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (2244:2): [True: 106, False: 1]
  ------------------
 2245|    106|		if (rtiff_decompress_jpeg(rtiff, in, size, out))
  ------------------
  |  Branch (2245:7): [True: 82, False: 24]
  ------------------
 2246|     82|			return -1;
 2247|     24|		break;
 2248|     24|#endif /*HAVE_JPEG*/
 2249|       |
 2250|     24|	default:
  ------------------
  |  Branch (2250:2): [True: 0, False: 107]
  ------------------
 2251|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|      0|		break;
 2253|    107|	}
 2254|       |
 2255|     24|	return 0;
 2256|    107|}
tiff2vips.c:rtiff_decompress_jpeg:
 2187|    106|{
 2188|    106|	struct jpeg_decompress_struct cinfo = { 0 };
 2189|    106|	ErrorManager eman;
 2190|       |
 2191|    106|	if (setjmp(eman.jmp) == 0) {
  ------------------
  |  Branch (2191:6): [True: 106, False: 0]
  ------------------
 2192|    106|		cinfo.err = jpeg_std_error(&eman.pub);
 2193|    106|		cinfo.err->addon_message_table = vips__jpeg_message_table;
 2194|    106|		cinfo.err->first_addon_message = 1000;
 2195|    106|		cinfo.err->last_addon_message = 1001;
 2196|    106|		eman.pub.error_exit = vips__new_error_exit;
 2197|    106|		eman.pub.emit_message = rtiff_decompress_jpeg_emit_message;
 2198|    106|		eman.pub.output_message = vips__new_output_message;
 2199|    106|		eman.fp = NULL;
 2200|       |
 2201|    106|		jpeg_create_decompress(&cinfo);
  ------------------
  |  |  972|    106|  jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
  |  |  ------------------
  |  |  |  |    4|    106|#define JPEG_LIB_VERSION  62
  |  |  ------------------
  |  |  973|    106|                        (size_t)sizeof(struct jpeg_decompress_struct))
  ------------------
 2202|       |
 2203|    106|		if (rtiff_decompress_jpeg_run(rtiff, &cinfo,
  ------------------
  |  Branch (2203:7): [True: 5, False: 101]
  ------------------
 2204|    106|				data, data_len, out)) {
 2205|      5|			jpeg_destroy_decompress(&cinfo);
 2206|      5|			return -1;
 2207|      5|		}
 2208|    106|	}
 2209|      0|	else {
 2210|       |#ifdef DEBUG_VERBOSE
 2211|       |		printf("rtiff_decompress_jpeg: error return\n");
 2212|       |#endif /*DEBUG_VERBOSE*/
 2213|       |
 2214|      0|		jpeg_destroy_decompress(&cinfo);
 2215|      0|		return -1;
 2216|      0|	}
 2217|       |
 2218|    101|	jpeg_destroy_decompress(&cinfo);
 2219|       |
 2220|    101|	return 0;
 2221|    106|}
tiff2vips.c:rtiff_decompress_jpeg_emit_message:
 2162|   540k|{
 2163|   540k|	if (msg_level < 0) {
  ------------------
  |  Branch (2163:6): [True: 419k, False: 120k]
  ------------------
 2164|   419k|		long num_warnings;
 2165|       |
 2166|       |		/* Always count warnings in num_warnings.
 2167|       |		 */
 2168|   419k|		num_warnings = ++cinfo->err->num_warnings;
 2169|       |
 2170|       |		/* Corrupt files may give many warnings, the policy here is to
 2171|       |		 * show only the first warning and treat many warnings as fatal,
 2172|       |		 * unless unlimited is set.
 2173|       |		 */
 2174|   419k|		if (num_warnings == 1)
  ------------------
  |  Branch (2174:7): [True: 102, False: 419k]
  ------------------
 2175|    102|			(*cinfo->err->output_message)(cinfo);
 2176|   419k|	}
 2177|   120k|	else if (cinfo->err->trace_level >= msg_level)
  ------------------
  |  Branch (2177:11): [True: 0, False: 120k]
  ------------------
 2178|       |		/* It's a trace message. Show it if trace_level >= msg_level.
 2179|       |		 */
 2180|      0|		(*cinfo->err->output_message)(cinfo);
 2181|   540k|}
tiff2vips.c:rtiff_decompress_jpeg_run:
 2071|    106|{
 2072|    106|	void *tables;
 2073|    106|	uint32_t tables_len;
 2074|    106|	int bytes_per_pixel;
 2075|    106|	size_t bytes_per_scanline;
 2076|    106|	VipsPel *q;
 2077|    106|	int y;
 2078|       |
 2079|       |#ifdef DEBUG_VERBOSE
 2080|       |	printf("rtiff_decompress_jpeg_run: decompressing %zd bytes of jpg\n",
 2081|       |		data_len);
 2082|       |#endif /*DEBUG_VERBOSE*/
 2083|       |
 2084|       |	/* Tables are optional.
 2085|       |	 */
 2086|    106|	tables = NULL;
 2087|    106|	tables_len = 0;
 2088|    106|	(void) TIFFGetField(rtiff->tiff,
 2089|    106|		TIFFTAG_JPEGTABLES, &tables_len, &tables);
  ------------------
  |  |  346|    106|#define TIFFTAG_JPEGTABLES 347             /* %JPEG table stream */
  ------------------
 2090|       |
 2091|    106|	if (tables) {
  ------------------
  |  Branch (2091:6): [True: 3, False: 103]
  ------------------
 2092|      3|		rtiff_decompress_jpeg_set_memory(cinfo, tables, tables_len);
 2093|      3|		if (jpeg_read_header(cinfo, FALSE) !=
  ------------------
  |  |  206|      3|#define FALSE   0               /* values of boolean */
  ------------------
  |  Branch (2093:7): [True: 0, False: 3]
  ------------------
 2094|      3|			JPEG_HEADER_TABLES_ONLY)
  ------------------
  |  | 1067|      3|#define JPEG_HEADER_TABLES_ONLY  2 /* Found valid table-specs-only datastream */
  ------------------
 2095|      0|			return -1;
 2096|      3|	}
 2097|       |
 2098|    106|	rtiff_decompress_jpeg_set_memory(cinfo, data, data_len);
 2099|       |
 2100|    106|	if (jpeg_read_header(cinfo, TRUE) != JPEG_HEADER_OK)
  ------------------
  |  |  209|    106|#define TRUE    1
  ------------------
              	if (jpeg_read_header(cinfo, TRUE) != JPEG_HEADER_OK)
  ------------------
  |  | 1066|    106|#define JPEG_HEADER_OK           1 /* Found valid image datastream */
  ------------------
  |  Branch (2100:6): [True: 0, False: 106]
  ------------------
 2101|      0|		return -1;
 2102|       |
 2103|       |	/* This isn't stored in the tile -- we have to set it from the
 2104|       |	 * enclosing TIFF.
 2105|       |	 */
 2106|    106|	switch (rtiff->header.photometric_interpretation) {
 2107|      0|	case PHOTOMETRIC_SEPARATED:
  ------------------
  |  |  226|      0|#define PHOTOMETRIC_SEPARATED 5            /* !color separations */
  ------------------
  |  Branch (2107:2): [True: 0, False: 106]
  ------------------
 2108|      0|		cinfo->jpeg_color_space = JCS_CMYK;
 2109|      0|		bytes_per_pixel = 4;
 2110|      0|		break;
 2111|       |
 2112|     38|	case PHOTOMETRIC_YCBCR:
  ------------------
  |  |  227|     38|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (2112:2): [True: 38, False: 68]
  ------------------
 2113|     38|		cinfo->jpeg_color_space = JCS_YCbCr;
 2114|     38|		bytes_per_pixel = 3;
 2115|     38|		break;
 2116|       |
 2117|      0|	case PHOTOMETRIC_RGB:
  ------------------
  |  |  223|      0|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
  |  Branch (2117:2): [True: 0, False: 106]
  ------------------
 2118|      0|	case PHOTOMETRIC_CIELAB:
  ------------------
  |  |  228|      0|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (2118:2): [True: 0, False: 106]
  ------------------
 2119|       |		// RGB-compressed CIELAB is a possibility, amazingly
 2120|      0|		cinfo->jpeg_color_space = JCS_RGB;
 2121|      0|		bytes_per_pixel = 3;
 2122|      0|		break;
 2123|       |
 2124|      0|	case PHOTOMETRIC_MINISWHITE:
  ------------------
  |  |  221|      0|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (2124:2): [True: 0, False: 106]
  ------------------
 2125|      3|	case PHOTOMETRIC_MINISBLACK:
  ------------------
  |  |  222|      3|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (2125:2): [True: 3, False: 103]
  ------------------
 2126|      3|		cinfo->jpeg_color_space = JCS_GRAYSCALE;
 2127|      3|		bytes_per_pixel = 1;
 2128|      3|		break;
 2129|       |
 2130|      5|	default:
  ------------------
  |  Branch (2130:2): [True: 5, False: 101]
  ------------------
 2131|      5|		cinfo->jpeg_color_space = JCS_UNKNOWN;
 2132|      5|		bytes_per_pixel = 1;
 2133|      5|		break;
 2134|    106|	}
 2135|       |
 2136|     46|	jpeg_calc_output_dimensions(cinfo);
 2137|     46|	bytes_per_scanline = cinfo->output_width * bytes_per_pixel;
 2138|       |
 2139|       |	/* Double-check tile dimensions.
 2140|       |	 */
 2141|     46|	if (cinfo->output_width > rtiff->header.tile_width ||
  ------------------
  |  Branch (2141:6): [True: 1, False: 45]
  ------------------
 2142|     46|		cinfo->output_height > rtiff->header.tile_height ||
  ------------------
  |  Branch (2142:3): [True: 3, False: 42]
  ------------------
 2143|     46|		bytes_per_scanline > rtiff->header.tile_row_size)
  ------------------
  |  Branch (2143:3): [True: 1, False: 41]
  ------------------
 2144|      5|		return -1;
 2145|       |
 2146|     41|	jpeg_start_decompress(cinfo);
 2147|       |
 2148|     41|	q = (VipsPel *) out;
 2149|  1.23k|	for (y = 0; y < cinfo->output_height; y++) {
  ------------------
  |  Branch (2149:14): [True: 1.19k, False: 41]
  ------------------
 2150|  1.19k|		JSAMPROW row_pointer[1];
 2151|       |
 2152|  1.19k|		row_pointer[0] = (JSAMPLE *) q;
 2153|  1.19k|		jpeg_read_scanlines(cinfo, &row_pointer[0], 1);
 2154|  1.19k|		q += bytes_per_scanline;
 2155|  1.19k|	}
 2156|       |
 2157|     41|	return 0;
 2158|     46|}
tiff2vips.c:rtiff_decompress_jpeg_set_memory:
 2050|    106|{
 2051|    106|	if (!cinfo->src)
  ------------------
  |  Branch (2051:6): [True: 106, False: 0]
  ------------------
 2052|    106|		cinfo->src =
 2053|    106|			(struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)(
 2054|    106|				(j_common_ptr) cinfo,
 2055|    106|				JPOOL_PERMANENT,
  ------------------
  |  |  888|    106|#define JPOOL_PERMANENT  0      /* lasts until master record is destroyed */
  ------------------
 2056|    106|				sizeof(struct jpeg_source_mgr));
 2057|       |
 2058|       |	/* Present the whole of data as one chunk.
 2059|       |	 */
 2060|    106|	cinfo->src->bytes_in_buffer = data_len;
 2061|    106|	cinfo->src->next_input_byte = (JOCTET *) data;
 2062|    106|	cinfo->src->init_source = rtiff_decompress_jpeg_init_source;
 2063|    106|	cinfo->src->fill_input_buffer = rtiff_decompress_jpeg_fill_input_buffer;
 2064|    106|	cinfo->src->skip_input_data = rtiff_decompress_jpeg_skip_input_data;
 2065|    106|	cinfo->src->resync_to_restart = jpeg_resync_to_restart;
 2066|    106|}
tiff2vips.c:rtiff_decompress_jpeg_init_source:
 1987|    106|{
 1988|       |	/* Nothing.
 1989|       |	 */
 1990|    106|}
tiff2vips.c:rtiff_decompress_jpeg_fill_input_buffer:
 1994|   335k|{
 1995|   335k|	static const JOCTET mybuffer[4] = {
 1996|   335k|		(JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
  ------------------
  |  | 1167|   335k|#define JPEG_EOI        0xD9    /* EOI marker code */
  ------------------
 1997|   335k|	};
 1998|       |
 1999|       |	/* The whole JPEG data is expected to reside in the supplied memory
 2000|       |	 * buffer, so any request for more data beyond the given buffer size
 2001|       |	 * is treated as an error.
 2002|       |	 */
 2003|   335k|	WARNMS(cinfo, JWRN_VIPS_IMAGE_EOF);
  ------------------
  |  |  283|   335k|  ((cinfo)->err->msg_code = (code), \
  |  |  284|   335k|   (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
  ------------------
 2004|       |
 2005|       |	/* Insert a fake EOI marker
 2006|       |	 */
 2007|   335k|	cinfo->src->next_input_byte = mybuffer;
 2008|   335k|	cinfo->src->bytes_in_buffer = 2;
 2009|       |
 2010|   335k|	return TRUE;
  ------------------
  |  |  209|   335k|#define TRUE    1
  ------------------
 2011|   335k|}
tiff2vips.c:rtiff_decompress_jpeg_skip_input_data:
 2026|  5.93k|{
 2027|  5.93k|	struct jpeg_source_mgr *src = cinfo->src;
 2028|       |
 2029|       |	/* Just a dumb implementation for now.  Could use fseek() except
 2030|       |	 * it doesn't work on pipes.  Not clear that being smart is worth
 2031|       |	 * any trouble anyway --- large skips are infrequent.
 2032|       |	 */
 2033|  5.93k|	if (num_bytes > 0) {
  ------------------
  |  Branch (2033:6): [True: 5.93k, False: 0]
  ------------------
 2034|   340k|		while (num_bytes > (long) src->bytes_in_buffer) {
  ------------------
  |  Branch (2034:10): [True: 335k, False: 5.93k]
  ------------------
 2035|   335k|			num_bytes -= (long) src->bytes_in_buffer;
 2036|   335k|			(void) (*src->fill_input_buffer)(cinfo);
 2037|       |			/* note we assume that fill_input_buffer will never
 2038|       |			 * return FALSE, so suspension need not be handled.
 2039|       |			 */
 2040|   335k|		}
 2041|       |
 2042|  5.93k|		src->next_input_byte += (size_t) num_bytes;
 2043|  5.93k|		src->bytes_in_buffer -= (size_t) num_bytes;
 2044|  5.93k|	}
 2045|  5.93k|}
tiff2vips.c:rtiff_fill_region_unaligned:
 2400|  1.21k|{
 2401|  1.21k|	RtiffSeq *seq = (RtiffSeq *) vseq;
 2402|  1.21k|	Rtiff *rtiff = (Rtiff *) a;
 2403|  1.21k|	int tile_width = rtiff->header.tile_width;
 2404|  1.21k|	int tile_height = rtiff->header.tile_height;
 2405|  1.21k|	int page_height = rtiff->header.height;
 2406|  1.21k|	int tile_row_size = rtiff->header.tile_row_size;
 2407|  1.21k|	VipsRect *r = &out->valid;
 2408|       |
 2409|  1.21k|	int x, y, z;
 2410|       |
 2411|       |#ifdef DEBUG_VERBOSE
 2412|       |	printf("rtiff_fill_region_unaligned:\n");
 2413|       |#endif /*DEBUG_VERBOSE*/
 2414|       |
 2415|  1.21k|	y = 0;
 2416|  2.28k|	while (y < r->height) {
  ------------------
  |  Branch (2416:9): [True: 1.21k, False: 1.06k]
  ------------------
 2417|  1.21k|		VipsRect tile, page, hit;
 2418|       |
 2419|       |		/* Not necessary, but it stops static analyzers complaining
 2420|       |		 * about a used-before-set.
 2421|       |		 */
 2422|  1.21k|		hit.height = 0;
 2423|       |
 2424|  1.21k|		x = 0;
 2425|  2.28k|		while (x < r->width) {
  ------------------
  |  Branch (2425:10): [True: 1.21k, False: 1.06k]
  ------------------
 2426|       |			/* page_no is within this toilet roll image, not tiff
 2427|       |			 * file page number ... add the number of the start
 2428|       |			 * page to get that.
 2429|       |			 */
 2430|  1.21k|			int page_no = (r->top + y) / page_height;
 2431|  1.21k|			int page_y = (r->top + y) % page_height;
 2432|       |
 2433|       |			/* Coordinate of the tile on this page that xy falls in.
 2434|       |			 */
 2435|  1.21k|			int xs = ((r->left + x) / tile_width) * tile_width;
 2436|  1.21k|			int ys = (page_y / tile_height) * tile_height;
 2437|       |
 2438|  1.21k|			if (rtiff_read_tile(seq,
  ------------------
  |  Branch (2438:8): [True: 148, False: 1.06k]
  ------------------
 2439|  1.21k|					seq->buf, rtiff->page + page_no, xs, ys))
 2440|    148|				return -1;
 2441|       |
 2442|       |			/* Position of tile on the page.
 2443|       |			 */
 2444|  1.06k|			tile.left = xs;
 2445|  1.06k|			tile.top = ys;
 2446|  1.06k|			tile.width = tile_width;
 2447|  1.06k|			tile.height = tile_height;
 2448|       |
 2449|       |			/* It'll be clipped by this page.
 2450|       |			 */
 2451|  1.06k|			page.left = 0;
 2452|  1.06k|			page.top = 0;
 2453|  1.06k|			page.width = rtiff->header.width;
 2454|  1.06k|			page.height = rtiff->header.height;
 2455|  1.06k|			vips_rect_intersectrect(&tile, &page, &tile);
 2456|       |
 2457|       |			/* To image coordinates.
 2458|       |			 */
 2459|  1.06k|			tile.top += page_no * page_height;
 2460|       |
 2461|       |			/* And clip again by this region.
 2462|       |			 */
 2463|  1.06k|			vips_rect_intersectrect(&tile, r, &hit);
 2464|       |
 2465|       |			/* We are inside a tilecache, so requests will always
 2466|       |			 * be aligned left-right to tile boundaries.
 2467|       |			 *
 2468|       |			 * this is not true vertically for toilet-roll images.
 2469|       |			 */
 2470|  1.06k|			g_assert(hit.left == tile.left);
  ------------------
  |  |  166|  1.06k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.06k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.06k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2471|       |
 2472|       |			/* Unpack to VIPS format.
 2473|       |			 * Just unpack the section of the tile we need.
 2474|       |			 */
 2475|  10.1k|			for (z = 0; z < hit.height; z++) {
  ------------------
  |  Branch (2475:16): [True: 9.08k, False: 1.06k]
  ------------------
 2476|  9.08k|				VipsPel *p = (VipsPel *) seq->buf +
 2477|  9.08k|					(hit.top - tile.top + z) *
 2478|  9.08k|						tile_row_size;
 2479|  9.08k|				VipsPel *q = VIPS_REGION_ADDR(out,
  ------------------
  |  |  227|  9.08k|	((R)->data + \
  |  |  228|  9.08k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  9.08k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  9.08k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  9.08k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  9.08k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  9.08k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2480|  9.08k|					hit.left, hit.top + z);
 2481|       |
 2482|  9.08k|				rtiff->sfn(rtiff,
 2483|  9.08k|					q, p, hit.width, rtiff->client);
 2484|  9.08k|			}
 2485|       |
 2486|  1.06k|			x += hit.width;
 2487|  1.06k|		}
 2488|       |
 2489|       |		/* This will be the same for all tiles in the row we've just
 2490|       |		 * done.
 2491|       |		 */
 2492|  1.06k|		y += hit.height;
 2493|  1.06k|	}
 2494|       |
 2495|  1.06k|	return 0;
 2496|  1.21k|}
tiff2vips.c:rtiff_seq_stop:
 2554|  1.21k|{
 2555|  1.21k|	RtiffSeq *seq = (RtiffSeq *) vseq;
 2556|       |
 2557|  1.21k|	VIPS_FREE(seq->buf);
  ------------------
  |  |   50|  1.21k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  1.21k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.21k|	{ \
  |  |  |  |   43|  1.21k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 1.21k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  1.21k|			(void) F((S)); \
  |  |  |  |   45|  1.21k|			(S) = 0; \
  |  |  |  |   46|  1.21k|		} \
  |  |  |  |   47|  1.21k|	} \
  |  |  |  |   48|  1.21k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2558|  1.21k|	VIPS_FREE(seq->compressed_buf);
  ------------------
  |  |   50|  1.21k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  1.21k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.21k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.21k|	{ \
  |  |  |  |   43|  1.21k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 172, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |   44|    172|			(void) F((S)); \
  |  |  |  |   45|    172|			(S) = 0; \
  |  |  |  |   46|    172|		} \
  |  |  |  |   47|  1.21k|	} \
  |  |  |  |   48|  1.21k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.21k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2559|       |
 2560|  1.21k|	return 0;
 2561|  1.21k|}
tiff2vips.c:rtiff_unpremultiply:
 2567|  4.80k|{
 2568|  4.80k|	if (rtiff->header.alpha_band != -1) {
  ------------------
  |  Branch (2568:6): [True: 875, False: 3.93k]
  ------------------
 2569|    875|		VipsImage *x;
 2570|       |
 2571|    875|		if (
 2572|    875|			vips_unpremultiply(in, &x,
  ------------------
  |  Branch (2572:4): [True: 0, False: 875]
  ------------------
 2573|    875|				"alpha_band", rtiff->header.alpha_band,
 2574|    875|				NULL) ||
 2575|    875|			vips_cast(x, out, in->BandFmt, NULL)) {
  ------------------
  |  Branch (2575:4): [True: 0, False: 875]
  ------------------
 2576|      0|			g_object_unref(x);
 2577|      0|			return -1;
 2578|      0|		}
 2579|    875|		g_object_unref(x);
 2580|    875|	}
 2581|  3.93k|	else {
 2582|  3.93k|		*out = in;
 2583|  3.93k|		g_object_ref(in);
 2584|  3.93k|	}
 2585|       |
 2586|  4.80k|	return 0;
 2587|  4.80k|}
tiff2vips.c:rtiff_read_stripwise:
 2876|  3.59k|{
 2877|  3.59k|	VipsImage **t = (VipsImage **)
 2878|  3.59k|		vips_object_local_array(VIPS_OBJECT(out), 4);
  ------------------
  |  |  433|  3.59k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  3.59k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.59k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2879|       |
 2880|  3.59k|	VipsImage *in;
 2881|  3.59k|	int tile_height;
 2882|       |
 2883|       |#ifdef DEBUG
 2884|       |	printf("tiff2vips: rtiff_read_stripwise\n");
 2885|       |#endif /*DEBUG*/
 2886|       |
 2887|  3.59k|	t[0] = vips_image_new();
 2888|  3.59k|	if (rtiff_set_header(rtiff, t[0]))
  ------------------
  |  Branch (2888:6): [True: 0, False: 3.59k]
  ------------------
 2889|      0|		return -1;
 2890|       |
 2891|       |	/* Double check: in memcpy mode, the vips linesize should exactly
 2892|       |	 * match the tiff line size.
 2893|       |	 */
 2894|  3.59k|	if (rtiff->memcpy) {
  ------------------
  |  Branch (2894:6): [True: 781, False: 2.81k]
  ------------------
 2895|    781|		size_t vips_line_size;
 2896|       |
 2897|       |		/* Lines are smaller in plane-separated mode.
 2898|       |		 */
 2899|    781|		if (rtiff->header.separate)
  ------------------
  |  Branch (2899:7): [True: 36, False: 745]
  ------------------
 2900|     36|			vips_line_size = VIPS_IMAGE_SIZEOF_ELEMENT(t[0]) *
  ------------------
  |  |  382|     36|	(vips_format_sizeof_unsafe((I)->BandFmt))
  ------------------
 2901|     36|				t[0]->Xsize;
 2902|    745|		else
 2903|    745|			vips_line_size = VIPS_IMAGE_SIZEOF_LINE(t[0]);
  ------------------
  |  |  386|    745|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|    745|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    745|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2904|       |
 2905|    781|		if (rtiff->header.bits_per_sample == 16 &&
  ------------------
  |  Branch (2905:7): [True: 246, False: 535]
  ------------------
 2906|    781|			rtiff->header.sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|    246|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (2906:4): [True: 0, False: 246]
  ------------------
 2907|      0|			vips_line_size /= 2;
 2908|       |
 2909|    781|		if (vips_line_size != rtiff->header.scanline_size) {
  ------------------
  |  Branch (2909:7): [True: 0, False: 781]
  ------------------
 2910|      0|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2911|      0|			return -1;
 2912|      0|		}
 2913|    781|	}
 2914|       |
 2915|       |	/* If we have separate image planes, we must read to a plane buffer,
 2916|       |	 * then interleave to the output.
 2917|       |	 *
 2918|       |	 * We don't need a separate buffer per thread since the _generate()
 2919|       |	 * function runs inside the cache lock.
 2920|       |	 */
 2921|  3.59k|	if (rtiff->header.separate) {
  ------------------
  |  Branch (2921:6): [True: 109, False: 3.48k]
  ------------------
 2922|    109|		if (!(rtiff->plane_buf = VIPS_MALLOC(out,
  ------------------
  |  |   68|    109|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|    109|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|    109|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|    109|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2922:7): [True: 0, False: 109]
  ------------------
 2923|    109|				  rtiff->header.read_size)))
 2924|      0|			return -1;
 2925|    109|	}
 2926|       |
 2927|       |	/* If we need to manipulate pixels, we must read to an interleaved
 2928|       |	 * plane buffer before repacking to the output.
 2929|       |	 *
 2930|       |	 * If we are doing a multi-page read, we need a strip buffer, since
 2931|       |	 * strips may not be aligned on tile boundaries.
 2932|       |	 *
 2933|       |	 * We don't need a separate buffer per thread since the _generate()
 2934|       |	 * function runs inside the cache lock.
 2935|       |	 */
 2936|  3.59k|	if (!rtiff->memcpy ||
  ------------------
  |  Branch (2936:6): [True: 2.81k, False: 781]
  ------------------
 2937|  3.59k|		rtiff->n > 1) {
  ------------------
  |  Branch (2937:3): [True: 0, False: 781]
  ------------------
 2938|  2.81k|		tsize_t size;
 2939|       |
 2940|  2.81k|		size = rtiff->header.read_size;
 2941|  2.81k|		if (rtiff->header.separate)
  ------------------
  |  Branch (2941:7): [True: 73, False: 2.74k]
  ------------------
 2942|     73|			size *= rtiff->header.samples_per_pixel;
 2943|       |
 2944|  2.81k|		if (!(rtiff->contig_buf = VIPS_MALLOC(out, size)))
  ------------------
  |  |   68|  2.81k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|  2.81k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  2.81k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  2.81k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2944:7): [True: 0, False: 2.81k]
  ------------------
 2945|      0|			return -1;
 2946|  2.81k|	}
 2947|       |
 2948|       |	/* rows_per_strip can be very large if this is a separate plane image,
 2949|       |	 * beware.
 2950|       |	 *
 2951|       |	 * Some images have very small rowsperstrip which will cause a lot of
 2952|       |	 * work for the tilecache -- set a min size for tiles which is a
 2953|       |	 * multiple of rowsperstrip.
 2954|       |	 */
 2955|  3.59k|	tile_height = VIPS_MAX(
  ------------------
  |  |   54|  3.59k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 1.55k, False: 2.04k]
  |  |  ------------------
  ------------------
 2956|  3.59k|		VIPS_ROUND_DOWN(16, rtiff->header.read_height),
 2957|  3.59k|		rtiff->header.read_height);
 2958|       |
 2959|  3.59k|	if (
 2960|  3.59k|		vips_image_generate(t[0],
  ------------------
  |  Branch (2960:3): [True: 0, False: 3.59k]
  ------------------
 2961|  3.59k|			NULL, rtiff_stripwise_generate, NULL,
 2962|  3.59k|			rtiff, NULL) ||
 2963|  3.59k|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (2963:3): [True: 0, False: 3.59k]
  ------------------
 2964|  3.59k|			"tile_height", tile_height,
 2965|  3.59k|			NULL) ||
 2966|  3.59k|		rtiff_unpremultiply(rtiff, t[1], &t[2]))
  ------------------
  |  Branch (2966:3): [True: 0, False: 3.59k]
  ------------------
 2967|      0|		return -1;
 2968|  3.59k|	in = t[2];
 2969|       |
 2970|       |	/* Only do this if we have to.
 2971|       |	 */
 2972|  3.59k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (2972:6): [True: 0, False: 3.59k]
  ------------------
 2973|  3.59k|		vips_image_get_orientation(in) != 1) {
  ------------------
  |  Branch (2973:3): [True: 0, False: 0]
  ------------------
 2974|      0|		if (vips_autorot(in, &t[3], NULL))
  ------------------
  |  Branch (2974:7): [True: 0, False: 0]
  ------------------
 2975|      0|			return -1;
 2976|      0|		in = t[3];
 2977|      0|	}
 2978|       |
 2979|  3.59k|	if (vips_image_write(in, out))
  ------------------
  |  Branch (2979:6): [True: 0, False: 3.59k]
  ------------------
 2980|      0|		return -1;
 2981|       |
 2982|  3.59k|	return 0;
 2983|  3.59k|}
tiff2vips.c:rtiff_stripwise_generate:
 2729|  4.41k|{
 2730|  4.41k|	VipsImage *out = out_region->im;
 2731|  4.41k|	Rtiff *rtiff = (Rtiff *) a;
 2732|  4.41k|	int read_height = rtiff->header.read_height;
 2733|  4.41k|	int page_height = rtiff->header.height;
 2734|  4.41k|	tsize_t scanline_size = rtiff->header.scanline_size;
 2735|  4.41k|	VipsRect *r = &out_region->valid;
 2736|       |
 2737|  4.41k|	int y;
 2738|       |
 2739|       |#ifdef DEBUG_VERBOSE
 2740|       |	printf("rtiff_stripwise_generate: top = %d, height = %d\n",
 2741|       |		r->top, r->height);
 2742|       |	printf("rtiff_stripwise_generate: y_top = %d\n", rtiff->y_pos);
 2743|       |#endif /*DEBUG_VERBOSE*/
 2744|       |
 2745|       |	/* We're inside a tilecache where tiles are the full image width, so
 2746|       |	 * this should always be true.
 2747|       |	 */
 2748|  4.41k|	g_assert(r->left == 0);
  ------------------
  |  |  166|  4.41k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  4.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2749|  4.41k|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|  4.41k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  4.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2750|  4.41k|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|  4.41k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  4.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2751|       |
 2752|       |	/* If we're reading more than one page, tiles won't fall on strip
 2753|       |	 * boundaries. Tiles may be contain several strips.
 2754|       |	 */
 2755|       |
 2756|       |	/* Check that y_pos is correct. It should be, since we are inside
 2757|       |	 * a vips_sequential().
 2758|       |	 */
 2759|  4.41k|	if (r->top != rtiff->y_pos) {
  ------------------
  |  Branch (2759:6): [True: 0, False: 4.41k]
  ------------------
 2760|      0|		vips_error("tiff2vips",
 2761|      0|			_("out of order read -- at line %d, but line %d requested"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2762|      0|			rtiff->y_pos, r->top);
 2763|      0|		return -1;
 2764|      0|	}
 2765|       |
 2766|  4.41k|	VIPS_GATE_START("rtiff_stripwise_generate: work");
  ------------------
  |  |   41|  4.41k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  4.41k|	{ \
  |  |   43|  4.41k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 4.41k]
  |  |  ------------------
  |  |   44|  4.41k|			vips__thread_gate_start(NAME); \
  |  |   45|  4.41k|	} \
  |  |   46|  4.41k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2767|       |
 2768|  4.41k|	y = 0;
 2769|  27.0k|	while (y < r->height) {
  ------------------
  |  Branch (2769:9): [True: 22.6k, False: 4.41k]
  ------------------
 2770|       |		/* page_no is within this toilet roll image, not tiff
 2771|       |		 * file page number ... add the number of the start
 2772|       |		 * page to get that.
 2773|       |		 */
 2774|  22.6k|		int page_no = (r->top + y) / page_height;
 2775|  22.6k|		int y_page = (r->top + y) % page_height;
 2776|       |
 2777|       |		/* Strip number.
 2778|       |		 */
 2779|  22.6k|		tstrip_t strip_no = y_page / read_height;
 2780|       |
 2781|  22.6k|		VipsRect image, page, strip, hit;
 2782|       |
 2783|       |		/* Our four (including the output region) rects, all in
 2784|       |		 * output image coordinates.
 2785|       |		 */
 2786|  22.6k|		image.left = 0;
 2787|  22.6k|		image.top = 0;
 2788|  22.6k|		image.width = out->Xsize;
 2789|  22.6k|		image.height = out->Ysize;
 2790|       |
 2791|  22.6k|		page.left = 0;
 2792|  22.6k|		page.top = page_height * ((r->top + y) / page_height);
 2793|  22.6k|		page.width = out->Xsize;
 2794|  22.6k|		page.height = page_height;
 2795|       |
 2796|  22.6k|		strip.left = 0;
 2797|  22.6k|		strip.top = page.top + strip_no * read_height;
 2798|  22.6k|		strip.width = out->Xsize;
 2799|  22.6k|		strip.height = read_height;
 2800|       |
 2801|       |		/* Clip strip against page and image ... the final strip will
 2802|       |		 * be smaller.
 2803|       |		 */
 2804|  22.6k|		vips_rect_intersectrect(&strip, &image, &strip);
 2805|  22.6k|		vips_rect_intersectrect(&strip, &page, &strip);
 2806|       |
 2807|       |		/* Now the bit that overlaps with the region we are filling.
 2808|       |		 */
 2809|  22.6k|		vips_rect_intersectrect(&strip, r, &hit);
 2810|       |
 2811|  22.6k|		g_assert(hit.height > 0);
  ------------------
  |  |  166|  22.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  22.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2812|       |
 2813|       |		/* Read directly into the image if we can. Otherwise, we must
 2814|       |		 * read to a temp buffer then unpack into the image.
 2815|       |		 *
 2816|       |		 * We need to read via a buffer if we need to reformat pixels,
 2817|       |		 * or if this strip is not aligned on a tile boundary.
 2818|       |		 */
 2819|  22.6k|		if (rtiff->memcpy &&
  ------------------
  |  Branch (2819:7): [True: 10.7k, False: 11.8k]
  ------------------
 2820|  22.6k|			hit.top == strip.top &&
  ------------------
  |  Branch (2820:4): [True: 10.7k, False: 0]
  ------------------
 2821|  22.6k|			hit.height == strip.height) {
  ------------------
  |  Branch (2821:4): [True: 10.7k, False: 0]
  ------------------
 2822|  10.7k|			if (rtiff_strip_read_interleaved(rtiff,
  ------------------
  |  Branch (2822:8): [True: 0, False: 10.7k]
  ------------------
 2823|  10.7k|					rtiff->page + page_no, strip_no,
 2824|  10.7k|					VIPS_REGION_ADDR(out_region, 0, r->top + y))) {
  ------------------
  |  |  227|  10.7k|	((R)->data + \
  |  |  228|  10.7k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  10.7k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  10.7k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  10.7k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  10.7k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  10.7k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2825|      0|				VIPS_GATE_STOP(
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2826|      0|					"rtiff_stripwise_generate: work");
 2827|      0|				return -1;
 2828|      0|			}
 2829|  10.7k|		}
 2830|  11.8k|		else {
 2831|  11.8k|			VipsPel *p;
 2832|  11.8k|			VipsPel *q;
 2833|  11.8k|			int z;
 2834|       |
 2835|       |			/* Read and interleave the entire strip.
 2836|       |			 */
 2837|  11.8k|			if (rtiff_strip_read_interleaved(rtiff,
  ------------------
  |  Branch (2837:8): [True: 0, False: 11.8k]
  ------------------
 2838|  11.8k|					rtiff->page + page_no, strip_no,
 2839|  11.8k|					rtiff->contig_buf)) {
 2840|      0|				VIPS_GATE_STOP(
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2841|      0|					"rtiff_stripwise_generate: work");
 2842|      0|				return -1;
 2843|      0|			}
 2844|       |
 2845|       |			/* Do any repacking to generate pixels in vips layout.
 2846|       |			 */
 2847|  11.8k|			p = (VipsPel *) rtiff->contig_buf +
 2848|  11.8k|				(hit.top - strip.top) * scanline_size;
 2849|  11.8k|			q = VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  11.8k|	((R)->data + \
  |  |  228|  11.8k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  11.8k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  11.8k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  11.8k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  11.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  11.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2850|   101k|			for (z = 0; z < hit.height; z++) {
  ------------------
  |  Branch (2850:16): [True: 90.0k, False: 11.8k]
  ------------------
 2851|  90.0k|				rtiff->sfn(rtiff,
 2852|  90.0k|					q, p, out_region->im->Xsize, rtiff->client);
 2853|       |
 2854|  90.0k|				p += scanline_size;
 2855|  90.0k|				q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|  90.0k|	((size_t) ((R)->bpl))
  ------------------
 2856|  90.0k|			}
 2857|  11.8k|		}
 2858|       |
 2859|  22.6k|		y += hit.height;
 2860|  22.6k|		rtiff->y_pos += hit.height;
 2861|  22.6k|	}
 2862|       |
 2863|  4.41k|	VIPS_GATE_STOP("rtiff_stripwise_generate: work");
  ------------------
  |  |   49|  4.41k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.41k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  4.41k|	{ \
  |  |   51|  4.41k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 4.41k]
  |  |  ------------------
  |  |   52|  4.41k|			vips__thread_gate_stop(NAME); \
  |  |   53|  4.41k|	} \
  |  |   54|  4.41k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.41k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2864|       |
 2865|  4.41k|	return 0;
 2866|  4.41k|}
tiff2vips.c:rtiff_strip_read_interleaved:
 2673|  22.6k|{
 2674|  22.6k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 2675|  22.6k|	int read_height = rtiff->header.read_height;
 2676|  22.6k|	int bits_per_sample = rtiff->header.bits_per_sample;
 2677|  22.6k|	int read_as_rgba = rtiff->header.read_as_rgba;
 2678|  22.6k|	int strip_y = strip * read_height;
 2679|       |
 2680|  22.6k|	if (rtiff_set_page(rtiff, page))
  ------------------
  |  Branch (2680:6): [True: 0, False: 22.6k]
  ------------------
 2681|      0|		return -1;
 2682|       |
 2683|  22.6k|	if (read_as_rgba) {
  ------------------
  |  Branch (2683:6): [True: 0, False: 22.6k]
  ------------------
 2684|      0|		if (rtiff_rgba_strip_read(rtiff, strip, buf))
  ------------------
  |  Branch (2684:7): [True: 0, False: 0]
  ------------------
 2685|      0|			return -1;
 2686|      0|	}
 2687|  22.6k|	else if (rtiff->header.separate) {
  ------------------
  |  Branch (2687:11): [True: 390, False: 22.2k]
  ------------------
 2688|    390|		int page_width = rtiff->header.width;
 2689|    390|		int page_height = rtiff->header.height;
 2690|    390|		int strips_per_plane = 1 + (page_height - 1) / read_height;
 2691|    390|		int strip_height = VIPS_MIN(read_height,
  ------------------
  |  |   55|    390|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 281, False: 109]
  |  |  ------------------
  ------------------
 2692|    390|			page_height - strip_y);
 2693|    390|		int pels_per_strip = page_width * strip_height;
 2694|    390|		int bytes_per_sample = bits_per_sample >> 3;
 2695|       |
 2696|    390|		int i, j, k;
 2697|       |
 2698|  1.36k|		for (i = 0; i < samples_per_pixel; i++) {
  ------------------
  |  Branch (2698:15): [True: 978, False: 390]
  ------------------
 2699|    978|			VipsPel *p;
 2700|    978|			VipsPel *q;
 2701|       |
 2702|    978|			if (rtiff_strip_read(rtiff,
  ------------------
  |  Branch (2702:8): [True: 0, False: 978]
  ------------------
 2703|    978|					strips_per_plane * i + strip,
 2704|    978|					rtiff->plane_buf))
 2705|      0|				return -1;
 2706|       |
 2707|    978|			p = (VipsPel *) rtiff->plane_buf;
 2708|    978|			q = i * bytes_per_sample + (VipsPel *) buf;
 2709|   120k|			for (j = 0; j < pels_per_strip; j++) {
  ------------------
  |  Branch (2709:16): [True: 119k, False: 978]
  ------------------
 2710|   299k|				for (k = 0; k < bytes_per_sample; k++)
  ------------------
  |  Branch (2710:17): [True: 179k, False: 119k]
  ------------------
 2711|   179k|					q[k] = p[k];
 2712|       |
 2713|   119k|				p += bytes_per_sample;
 2714|   119k|				q += bytes_per_sample * samples_per_pixel;
 2715|   119k|			}
 2716|    978|		}
 2717|    390|	}
 2718|  22.2k|	else {
 2719|  22.2k|		if (rtiff_strip_read(rtiff, strip, buf))
  ------------------
  |  Branch (2719:7): [True: 0, False: 22.2k]
  ------------------
 2720|      0|			return -1;
 2721|  22.2k|	}
 2722|       |
 2723|  22.6k|	return 0;
 2724|  22.6k|}
tiff2vips.c:rtiff_strip_read:
  704|  23.1k|{
  705|  23.1k|	tsize_t length;
  706|       |
  707|       |#ifdef DEBUG_VERBOSE
  708|       |	printf("rtiff_strip_read: reading strip %d\n", strip);
  709|       |#endif /*DEBUG_VERBOSE*/
  710|       |
  711|  23.1k|	if (rtiff->header.read_scanlinewise)
  ------------------
  |  Branch (711:6): [True: 0, False: 23.1k]
  ------------------
  712|      0|		length = TIFFReadScanline(rtiff->tiff, buf, strip, (tsample_t) 0);
  713|  23.1k|	else
  714|  23.1k|		length = TIFFReadEncodedStrip(rtiff->tiff, strip, buf, (tsize_t) -1);
  715|       |
  716|  23.1k|	if (length == -1 && rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (716:6): [True: 4.38k, False: 18.8k]
  |  Branch (716:22): [True: 0, False: 4.38k]
  ------------------
  717|      0|		vips_foreign_load_invalidate(rtiff->out);
  718|      0|		vips_error("tiff2vips", "%s", _("read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  719|      0|		return -1;
  720|      0|	}
  721|       |
  722|  23.1k|	if (rtiff->failed) {
  ------------------
  |  Branch (722:6): [True: 0, False: 23.1k]
  ------------------
  723|      0|		vips_foreign_load_invalidate(rtiff->out);
  724|      0|		return -1;
  725|      0|	}
  726|       |
  727|  23.1k|	return 0;
  728|  23.1k|}

tiffload.c:vips_foreign_load_tiff_class_init:
  165|      1|{
  166|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  168|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  169|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  170|       |
  171|       |	/* Other libraries may be using libtiff, we want to capture tiff
  172|       |	 * warning and error as soon as we can.
  173|       |	 *
  174|       |	 * This class init will be triggered during startup.
  175|       |	 */
  176|      1|	vips__tiff_init();
  177|       |
  178|      1|	gobject_class->dispose = vips_foreign_load_tiff_dispose;
  179|      1|	gobject_class->set_property = vips_object_set_property;
  180|      1|	gobject_class->get_property = vips_object_get_property;
  181|       |
  182|      1|	object_class->nickname = "tiffload_base";
  183|      1|	object_class->description = _("load tiff");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  184|       |
  185|       |	/* We are fast, but must test after openslideload.
  186|       |	 */
  187|      1|	foreign_class->priority = 50;
  188|       |
  189|      1|	load_class->get_flags_filename =
  190|      1|		vips_foreign_load_tiff_get_flags_filename;
  191|      1|	load_class->get_flags = vips_foreign_load_tiff_get_flags;
  192|      1|	load_class->header = vips_foreign_load_tiff_header;
  193|      1|	load_class->load = vips_foreign_load_tiff_load;
  194|       |
  195|      1|	VIPS_ARG_INT(class, "page", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  196|      1|		_("Page"),
  197|      1|		_("First page to load"),
  198|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, page),
  200|      1|		0, 100000, 0);
  201|       |
  202|      1|	VIPS_ARG_INT(class, "n", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  203|      1|		_("n"),
  204|      1|		_("Number of pages to load, -1 for all"),
  205|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  206|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, n),
  207|      1|		-1, 100000, 1);
  208|       |
  209|      1|	VIPS_ARG_BOOL(class, "autorotate", 22,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  210|      1|		_("Autorotate"),
  211|      1|		_("Rotate image using orientation tag"),
  212|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  213|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, autorotate),
  214|      1|		FALSE);
  215|       |
  216|      1|	VIPS_ARG_INT(class, "subifd", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  217|      1|		_("subifd"),
  218|      1|		_("Subifd index"),
  219|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  220|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, subifd),
  221|      1|		-1, 100000, -1);
  222|       |
  223|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  224|       |	VIPS_ARG_BOOL(class, "unlimited", 24,
  225|       |		_("Unlimited"),
  226|       |		_("Remove all denial of service limits"),
  227|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  228|       |		G_STRUCT_OFFSET(VipsForeignLoadTiff, unlimited),
  229|       |		FALSE);
  230|       |#endif
  231|      1|}
tiffload.c:vips_foreign_load_tiff_dispose:
   93|  8.10k|{
   94|  8.10k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) gobject;
   95|       |
   96|  8.10k|	VIPS_UNREF(tiff->source);
  ------------------
  |  |   57|  8.10k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  8.10k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.10k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.10k|	{ \
  |  |  |  |   43|  8.10k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 8.10k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  8.10k|			(void) F((S)); \
  |  |  |  |   45|  8.10k|			(S) = 0; \
  |  |  |  |   46|  8.10k|		} \
  |  |  |  |   47|  8.10k|	} \
  |  |  |  |   48|  8.10k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.10k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|       |
   98|  8.10k|	G_OBJECT_CLASS(vips_foreign_load_tiff_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  8.10k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  8.10k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  8.10k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|  8.10k|}
tiffload.c:vips_foreign_load_tiff_get_flags_source:
  103|  8.12k|{
  104|  8.12k|	VipsForeignFlags flags;
  105|       |
  106|  8.12k|	flags = 0;
  107|  8.12k|	if (vips__istifftiled_source(source))
  ------------------
  |  Branch (107:6): [True: 1.87k, False: 6.25k]
  ------------------
  108|  1.87k|		flags |= VIPS_FOREIGN_PARTIAL;
  109|  6.25k|	else
  110|  6.25k|		flags |= VIPS_FOREIGN_SEQUENTIAL;
  111|       |
  112|  8.12k|	return flags;
  113|  8.12k|}
tiffload.c:vips_foreign_load_tiff_get_flags:
  131|  8.12k|{
  132|  8.12k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  133|       |
  134|  8.12k|	return vips_foreign_load_tiff_get_flags_source(tiff->source);
  135|  8.12k|}
tiffload.c:vips_foreign_load_tiff_header:
  139|  8.12k|{
  140|  8.12k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  141|       |
  142|  8.12k|	if (vips__tiff_read_header_source(tiff->source, load->out,
  ------------------
  |  Branch (142:6): [True: 2.30k, False: 5.82k]
  ------------------
  143|  8.12k|			tiff->page, tiff->n, tiff->autorotate, tiff->subifd,
  144|  8.12k|			load->fail_on, tiff->unlimited))
  145|  2.30k|		return -1;
  146|       |
  147|  5.82k|	return 0;
  148|  8.12k|}
tiffload.c:vips_foreign_load_tiff_load:
  152|  4.81k|{
  153|  4.81k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  154|       |
  155|  4.81k|	if (vips__tiff_read_source(tiff->source, load->real,
  ------------------
  |  Branch (155:6): [True: 8, False: 4.80k]
  ------------------
  156|  4.81k|			tiff->page, tiff->n, tiff->autorotate, tiff->subifd,
  157|  4.81k|			load->fail_on, tiff->unlimited))
  158|      8|		return -1;
  159|       |
  160|  4.80k|	return 0;
  161|  4.81k|}
tiffload.c:vips_foreign_load_tiff_init:
  235|  8.12k|{
  236|  8.12k|	tiff->page = 0;
  237|  8.12k|	tiff->n = 1;
  238|  8.12k|	tiff->subifd = -1;
  239|  8.12k|	tiff->unlimited = FALSE;
  ------------------
  |  |  794|  8.12k|#define	FALSE	(0)
  ------------------
  240|  8.12k|}
tiffload.c:vips_foreign_load_tiff_source_class_init:
  284|      1|{
  285|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  287|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  288|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  289|       |
  290|      1|	gobject_class->set_property = vips_object_set_property;
  291|      1|	gobject_class->get_property = vips_object_get_property;
  292|       |
  293|      1|	object_class->nickname = "tiffload_source";
  294|      1|	object_class->description = _("load tiff from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  295|      1|	object_class->build = vips_foreign_load_tiff_source_build;
  296|       |
  297|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  298|       |
  299|      1|	load_class->is_a_source = vips_foreign_load_tiff_source_is_a_source;
  300|       |
  301|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  302|      1|		_("Source"),
  303|      1|		_("Source to load from"),
  304|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  305|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffSource, source),
  306|      1|		VIPS_TYPE_SOURCE);
  307|      1|}
tiffload.c:vips_foreign_load_tiff_source_is_a_source:
  277|  20.9k|{
  278|  20.9k|	return vips__istiff_source(source);
  279|  20.9k|}
tiffload.c:vips_foreign_load_tiff_file_class_init:
  364|      1|{
  365|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  367|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  368|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  369|       |
  370|      1|	gobject_class->set_property = vips_object_set_property;
  371|      1|	gobject_class->get_property = vips_object_get_property;
  372|       |
  373|      1|	object_class->nickname = "tiffload";
  374|      1|	object_class->description = _("load tiff from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	object_class->build = vips_foreign_load_tiff_file_build;
  376|       |
  377|      1|	foreign_class->suffs = vips__foreign_tiff_suffs;
  378|       |
  379|      1|	load_class->is_a = vips_foreign_load_tiff_file_is_a;
  380|       |
  381|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  382|      1|		_("Filename"),
  383|      1|		_("Filename to load from"),
  384|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  385|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffFile, filename),
  386|      1|		NULL);
  387|      1|}
tiffload.c:vips_foreign_load_tiff_buffer_class_init:
  445|      1|{
  446|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  448|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  449|       |
  450|      1|	gobject_class->set_property = vips_object_set_property;
  451|      1|	gobject_class->get_property = vips_object_get_property;
  452|       |
  453|      1|	object_class->nickname = "tiffload_buffer";
  454|      1|	object_class->description = _("load tiff from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  455|      1|	object_class->build = vips_foreign_load_tiff_buffer_build;
  456|       |
  457|      1|	load_class->is_a_buffer = vips_foreign_load_tiff_buffer_is_a_buffer;
  458|       |
  459|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  460|      1|		_("Buffer"),
  461|      1|		_("Buffer to load from"),
  462|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  463|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffBuffer, blob),
  464|      1|		VIPS_TYPE_BLOB);
  465|      1|}
tiffload.c:vips_foreign_load_tiff_buffer_build:
  410|  8.12k|{
  411|  8.12k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) object;
  412|  8.12k|	VipsForeignLoadTiffBuffer *buffer =
  413|  8.12k|		(VipsForeignLoadTiffBuffer *) object;
  414|       |
  415|  8.12k|	if (buffer->blob &&
  ------------------
  |  Branch (415:6): [True: 8.12k, False: 0]
  ------------------
  416|  8.12k|		!(tiff->source = vips_source_new_from_memory(
  ------------------
  |  Branch (416:3): [True: 0, False: 8.12k]
  ------------------
  417|  8.12k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  8.12k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  418|  8.12k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  8.12k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  419|      0|		return -1;
  420|       |
  421|  8.12k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_tiff_buffer_parent_class)
  ------------------
  |  |  435|  8.12k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  8.12k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  8.12k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (421:6): [True: 2.30k, False: 5.82k]
  ------------------
  422|  8.12k|			->build(object))
  423|  2.30k|		return -1;
  424|       |
  425|  5.82k|	return 0;
  426|  8.12k|}
tiffload.c:vips_foreign_load_tiff_buffer_is_a_buffer:
  430|  20.9k|{
  431|  20.9k|	VipsSource *source;
  432|  20.9k|	gboolean result;
  433|       |
  434|  20.9k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (434:6): [True: 0, False: 20.9k]
  ------------------
  435|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  436|  20.9k|	result = vips_foreign_load_tiff_source_is_a_source(source);
  437|  20.9k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  20.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  20.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  20.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  20.9k|	{ \
  |  |  |  |   43|  20.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 20.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  20.9k|			(void) F((S)); \
  |  |  |  |   45|  20.9k|			(S) = 0; \
  |  |  |  |   46|  20.9k|		} \
  |  |  |  |   47|  20.9k|	} \
  |  |  |  |   48|  20.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  20.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  438|       |
  439|  20.9k|	return result;
  440|  20.9k|}
tiffload.c:vips_foreign_load_tiff_buffer_init:
  469|  8.12k|{
  470|  8.12k|}

tiffsave.c:vips_foreign_save_tiff_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  240|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  241|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  242|       |
  243|      1|	gobject_class->dispose = vips_foreign_save_tiff_dispose;
  244|      1|	gobject_class->set_property = vips_object_set_property;
  245|      1|	gobject_class->get_property = vips_object_get_property;
  246|       |
  247|      1|	object_class->nickname = "tiffsave_base";
  248|      1|	object_class->description = _("save image as tiff");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  249|      1|	object_class->build = vips_foreign_save_tiff_build;
  250|       |
  251|      1|	foreign_class->suffs = vips__foreign_tiff_suffs;
  252|       |
  253|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  254|      1|	save_class->coding[VIPS_CODING_LABQ] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  255|       |
  256|      1|	VIPS_ARG_ENUM(class, "compression", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  257|      1|		_("Compression"),
  258|      1|		_("Compression for this file"),
  259|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  260|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, compression),
  261|      1|		VIPS_TYPE_FOREIGN_TIFF_COMPRESSION,
  262|      1|		VIPS_FOREIGN_TIFF_COMPRESSION_NONE);
  263|       |
  264|      1|	VIPS_ARG_INT(class, "Q", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  265|      1|		_("Q"),
  266|      1|		_("Q factor"),
  267|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  268|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, Q),
  269|      1|		1, 100, 75);
  270|       |
  271|      1|	VIPS_ARG_ENUM(class, "predictor", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  272|      1|		_("Predictor"),
  273|      1|		_("Compression prediction"),
  274|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  275|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, predictor),
  276|      1|		VIPS_TYPE_FOREIGN_TIFF_PREDICTOR,
  277|      1|		VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL);
  278|       |
  279|      1|	VIPS_ARG_BOOL(class, "tile", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  280|      1|		_("Tile"),
  281|      1|		_("Write a tiled tiff"),
  282|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  283|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile),
  284|      1|		FALSE);
  285|       |
  286|      1|	VIPS_ARG_INT(class, "tile_width", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  287|      1|		_("Tile width"),
  288|      1|		_("Tile width in pixels"),
  289|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  290|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_width),
  291|      1|		1, 32768, 128);
  292|       |
  293|      1|	VIPS_ARG_INT(class, "tile_height", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Tile height"),
  295|      1|		_("Tile height in pixels"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_height),
  298|      1|		1, 32768, 128);
  299|       |
  300|      1|	VIPS_ARG_BOOL(class, "pyramid", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  301|      1|		_("Pyramid"),
  302|      1|		_("Write a pyramidal tiff"),
  303|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  304|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, pyramid),
  305|      1|		FALSE);
  306|       |
  307|      1|	VIPS_ARG_BOOL(class, "miniswhite", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  308|      1|		_("Miniswhite"),
  309|      1|		_("Use 0 for white in 1-bit images"),
  310|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, miniswhite),
  312|      1|		FALSE);
  313|       |
  314|      1|	VIPS_ARG_INT(class, "bitdepth", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  315|      1|		_("Bit depth"),
  316|      1|		_("Write as a 1, 2, 4 or 8 bit image"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, bitdepth),
  319|      1|		0, 8, 0);
  320|       |
  321|      1|	VIPS_ARG_ENUM(class, "resunit", 16,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  322|      1|		_("Resolution unit"),
  323|      1|		_("Resolution unit"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, resunit),
  326|      1|		VIPS_TYPE_FOREIGN_TIFF_RESUNIT, VIPS_FOREIGN_TIFF_RESUNIT_CM);
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "xres", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Xres"),
  330|      1|		_("Horizontal resolution in pixels/mm"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, xres),
  333|      1|		0.001, 1000000, 1);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "yres", 18,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Yres"),
  337|      1|		_("Vertical resolution in pixels/mm"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, yres),
  340|      1|		0.001, 1000000, 1);
  341|       |
  342|      1|	VIPS_ARG_BOOL(class, "bigtiff", 19,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  343|      1|		_("Bigtiff"),
  344|      1|		_("Write a bigtiff image"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, bigtiff),
  347|      1|		FALSE);
  348|       |
  349|      1|	VIPS_ARG_BOOL(class, "properties", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  350|      1|		_("Properties"),
  351|      1|		_("Write a properties document to IMAGEDESCRIPTION"),
  352|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  353|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, properties),
  354|      1|		FALSE);
  355|       |
  356|      1|	VIPS_ARG_ENUM(class, "region_shrink", 22,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  357|      1|		_("Region shrink"),
  358|      1|		_("Method to shrink regions"),
  359|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  360|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, region_shrink),
  361|      1|		VIPS_TYPE_REGION_SHRINK, VIPS_REGION_SHRINK_MEAN);
  362|       |
  363|      1|	VIPS_ARG_INT(class, "level", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  364|      1|		_("Level"),
  365|      1|		_("Deflate (1-9, default 6) or ZSTD (1-22, default 9) compression level"),
  366|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  367|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, level),
  368|      1|		0, 22, 0);
  369|       |
  370|      1|	VIPS_ARG_BOOL(class, "lossless", 24,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  371|      1|		_("Lossless"),
  372|      1|		_("Enable WEBP lossless mode"),
  373|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  374|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, lossless),
  375|      1|		FALSE);
  376|       |
  377|      1|	VIPS_ARG_ENUM(class, "depth", 25,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  378|      1|		_("Depth"),
  379|      1|		_("Pyramid depth"),
  380|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  381|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, depth),
  382|      1|		VIPS_TYPE_FOREIGN_DZ_DEPTH, VIPS_FOREIGN_DZ_DEPTH_ONETILE);
  383|       |
  384|      1|	VIPS_ARG_BOOL(class, "subifd", 26,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  385|      1|		_("Sub-IFD"),
  386|      1|		_("Save pyr layers as sub-IFDs"),
  387|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  388|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, subifd),
  389|      1|		FALSE);
  390|       |
  391|      1|	VIPS_ARG_BOOL(class, "premultiply", 27,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  392|      1|		_("Premultiply"),
  393|      1|		_("Save with premultiplied alpha"),
  394|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  395|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, premultiply),
  396|      1|		FALSE);
  397|       |
  398|      1|	VIPS_ARG_BOOL(class, "rgbjpeg", 28,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  399|      1|		_("RGB JPEG"),
  400|      1|		_("Output RGB JPEG rather than YCbCr"),
  401|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  402|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, rgbjpeg),
  403|      1|		FALSE);
  404|       |
  405|      1|	VIPS_ARG_BOOL(class, "squash", 29,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  406|      1|		_("Squash"),
  407|      1|		_("Squash images down to 1 bit"),
  408|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  409|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, squash),
  410|      1|		FALSE);
  411|      1|}
tiffsave.c:vips_foreign_save_tiff_target_class_init:
  462|      1|{
  463|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  465|       |
  466|      1|	gobject_class->set_property = vips_object_set_property;
  467|      1|	gobject_class->get_property = vips_object_get_property;
  468|       |
  469|      1|	object_class->nickname = "tiffsave_target";
  470|      1|	object_class->description = _("save image to tiff target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  471|      1|	object_class->build = vips_foreign_save_tiff_target_build;
  472|       |
  473|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  474|      1|		_("Target"),
  475|      1|		_("Target to save to"),
  476|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  477|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffTarget, target),
  478|      1|		VIPS_TYPE_TARGET);
  479|      1|}
tiffsave.c:vips_foreign_save_tiff_file_class_init:
  515|      1|{
  516|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  518|       |
  519|      1|	gobject_class->set_property = vips_object_set_property;
  520|      1|	gobject_class->get_property = vips_object_get_property;
  521|       |
  522|      1|	object_class->nickname = "tiffsave";
  523|      1|	object_class->description = _("save image to tiff file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  524|      1|	object_class->build = vips_foreign_save_tiff_file_build;
  525|       |
  526|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  527|      1|		_("Filename"),
  528|      1|		_("Filename to save to"),
  529|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  530|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffFile, filename),
  531|      1|		NULL);
  532|      1|}
tiffsave.c:vips_foreign_save_tiff_buffer_class_init:
  576|      1|{
  577|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  578|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  579|       |
  580|      1|	gobject_class->set_property = vips_object_set_property;
  581|      1|	gobject_class->get_property = vips_object_get_property;
  582|       |
  583|      1|	object_class->nickname = "tiffsave_buffer";
  584|      1|	object_class->description = _("save image to tiff buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  585|      1|	object_class->build = vips_foreign_save_tiff_buffer_build;
  586|       |
  587|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  588|      1|		_("Buffer"),
  589|      1|		_("Buffer to save to"),
  590|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  591|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffBuffer, buf),
  592|      1|		VIPS_TYPE_BLOB);
  593|      1|}

vips__new_output_message:
  172|  15.9k|{
  173|  15.9k|	char buffer[JMSG_LENGTH_MAX];
  174|       |
  175|  15.9k|	(*cinfo->err->format_message)(cinfo, buffer);
  176|  15.9k|	vips_error("VipsJpeg", _("%s"), buffer);
  ------------------
  |  |   30|  15.9k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  15.9k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  177|       |
  178|       |#ifdef DEBUG
  179|       |	printf("vips__new_output_message: \"%s\"\n", buffer);
  180|       |#endif /*DEBUG*/
  181|  15.9k|}
vips__new_error_exit:
  187|  4.51k|{
  188|  4.51k|	ErrorManager *eman = (ErrorManager *) cinfo->err;
  189|       |
  190|       |#ifdef DEBUG
  191|       |	printf("vips__new_error_exit:\n");
  192|       |#endif /*DEBUG*/
  193|       |
  194|       |	/* Close the fp if necessary.
  195|       |	 */
  196|  4.51k|	if (eman->fp) {
  ------------------
  |  Branch (196:6): [True: 0, False: 4.51k]
  ------------------
  197|      0|		(void) fclose(eman->fp);
  198|      0|		eman->fp = NULL;
  199|      0|	}
  200|       |
  201|       |	/* Send the error message to VIPS. This method is overridden above.
  202|       |	 */
  203|  4.51k|	(*cinfo->err->output_message)(cinfo);
  204|       |
  205|       |	/* Jump back.
  206|       |	 */
  207|  4.51k|	longjmp(eman->jmp, 1);
  208|  4.51k|}

vipsload.c:vips_foreign_load_vips_class_init:
  147|      1|{
  148|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  150|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  151|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  152|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  153|       |
  154|      1|	gobject_class->dispose = vips_foreign_load_vips_dispose;
  155|       |
  156|      1|	object_class->nickname = "vipsload_base";
  157|      1|	object_class->description = _("load vips base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  158|       |
  159|       |	/* You're unlikely to want to use this on untrusted files.
  160|       |	 */
  161|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  162|       |
  163|       |	/* We are fast at is_a(), so high priority.
  164|       |	 */
  165|      1|	foreign_class->priority = 200;
  166|       |
  167|      1|	load_class->get_flags = vips_foreign_load_vips_get_flags;
  168|      1|	load_class->get_flags_filename =
  169|      1|		vips_foreign_load_vips_get_flags_filename;
  170|      1|	load_class->header = vips_foreign_load_vips_header;
  171|      1|	load_class->load = NULL;
  172|      1|}
vipsload.c:vips_foreign_load_vips_file_class_init:
  218|      1|{
  219|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  221|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  222|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  223|       |
  224|      1|	gobject_class->set_property = vips_object_set_property;
  225|      1|	gobject_class->get_property = vips_object_get_property;
  226|       |
  227|      1|	object_class->nickname = "vipsload";
  228|      1|	object_class->description = _("load vips from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  229|      1|	object_class->build = vips_foreign_load_vips_file_build;
  230|       |
  231|      1|	foreign_class->suffs = vips__suffs;
  232|       |
  233|      1|	load_class->is_a = vips_foreign_load_vips_file_is_a;
  234|       |
  235|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  236|      1|		_("Filename"),
  237|      1|		_("Filename to load from"),
  238|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsForeignLoadVipsFile, filename),
  240|      1|		NULL);
  241|      1|}
vipsload.c:vips_foreign_load_vips_source_class_init:
  293|      1|{
  294|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  296|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  297|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  298|       |
  299|      1|	gobject_class->set_property = vips_object_set_property;
  300|      1|	gobject_class->get_property = vips_object_get_property;
  301|       |
  302|      1|	object_class->nickname = "vipsload_source";
  303|      1|	object_class->description = _("load vips from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  304|      1|	object_class->build = vips_foreign_load_vips_source_build;
  305|       |
  306|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  307|       |
  308|      1|	load_class->is_a_source =
  309|      1|		vips_foreign_load_vips_source_is_a_source;
  310|       |
  311|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  312|      1|		_("Source"),
  313|      1|		_("Source to load from"),
  314|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  315|      1|		G_STRUCT_OFFSET(VipsForeignLoadVipsSource, source),
  316|      1|		VIPS_TYPE_SOURCE);
  317|      1|}

vipssave.c:vips_foreign_save_vips_class_init:
  130|      1|{
  131|      1|	int i;
  132|       |
  133|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  135|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  136|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  137|       |
  138|      1|	gobject_class->dispose = vips_foreign_save_vips_dispose;
  139|       |
  140|      1|	object_class->nickname = "vipssave_base";
  141|      1|	object_class->description = _("save vips base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  142|      1|	object_class->build = vips_foreign_save_vips_build;
  143|       |
  144|      1|	foreign_class->suffs = vips__suffs;
  145|       |
  146|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  147|      8|	for (i = 0; i < VIPS_CODING_LAST; i++)
  ------------------
  |  Branch (147:14): [True: 7, False: 1]
  ------------------
  148|      7|		save_class->coding[i] = TRUE;
  ------------------
  |  |  798|      7|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      7|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  149|      1|}
vipssave.c:vips_foreign_save_vips_file_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  188|       |
  189|      1|	gobject_class->set_property = vips_object_set_property;
  190|      1|	gobject_class->get_property = vips_object_get_property;
  191|       |
  192|      1|	object_class->nickname = "vipssave";
  193|      1|	object_class->description = _("save image to file in vips format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  194|      1|	object_class->build = vips_foreign_save_vips_file_build;
  195|       |
  196|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  197|      1|		_("Filename"),
  198|      1|		_("Filename to save to"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  200|      1|		G_STRUCT_OFFSET(VipsForeignSaveVipsFile, filename),
  201|      1|		NULL);
  202|      1|}
vipssave.c:vips_foreign_save_vips_target_class_init:
  241|      1|{
  242|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  244|       |
  245|      1|	gobject_class->set_property = vips_object_set_property;
  246|      1|	gobject_class->get_property = vips_object_get_property;
  247|       |
  248|      1|	object_class->nickname = "vipssave_target";
  249|      1|	object_class->description = _("save image to target in vips format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  250|      1|	object_class->build = vips_foreign_save_vips_target_build;
  251|       |
  252|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  253|      1|		_("Target"),
  254|      1|		_("Target to save to"),
  255|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsForeignSaveVipsTarget, target),
  257|      1|		VIPS_TYPE_TARGET);
  258|      1|}

vips__iswebp_source:
  318|  30.3k|{
  319|  30.3k|	const unsigned char *p;
  320|       |
  321|       |	/* WebP is "RIFF xxxx WEBP" at the start, so we need 12 bytes.
  322|       |	 */
  323|  30.3k|	if ((p = vips_source_sniff(source, 12)) &&
  ------------------
  |  Branch (323:6): [True: 29.6k, False: 732]
  ------------------
  324|  30.3k|		vips_isprefix("RIFF", (char *) p) &&
  ------------------
  |  Branch (324:3): [True: 2.04k, False: 27.6k]
  ------------------
  325|  30.3k|		vips_isprefix("WEBP", (char *) p + 8))
  ------------------
  |  Branch (325:3): [True: 2.04k, False: 2]
  ------------------
  326|  2.04k|		return 1;
  327|       |
  328|  28.3k|	return 0;
  329|  30.3k|}
vips__webp_read_header_source:
  808|  2.04k|{
  809|  2.04k|	Read *read;
  810|       |
  811|  2.04k|	if (!(read = read_new(out, source, page, n, scale)) ||
  ------------------
  |  Branch (811:6): [True: 0, False: 2.04k]
  ------------------
  812|  2.04k|		read_header(read, out))
  ------------------
  |  Branch (812:3): [True: 436, False: 1.60k]
  ------------------
  813|    436|		return -1;
  814|       |
  815|  1.60k|	return 0;
  816|  2.04k|}
vips__webp_read_source:
  821|  1.41k|{
  822|  1.41k|	Read *read;
  823|       |
  824|  1.41k|	if (!(read = read_new(out, source, page, n, scale)) ||
  ------------------
  |  Branch (824:6): [True: 0, False: 1.41k]
  ------------------
  825|  1.41k|		read_image(read, out))
  ------------------
  |  Branch (825:3): [True: 979, False: 435]
  ------------------
  826|    979|		return -1;
  827|       |
  828|    435|	return 0;
  829|  1.41k|}
webp2vips.c:read_new:
  354|  3.45k|{
  355|  3.45k|	Read *read;
  356|       |
  357|  3.45k|	if (!(read = VIPS_NEW(NULL, Read)))
  ------------------
  |  |   70|  3.45k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.45k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.45k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.45k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.45k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (357:6): [True: 0, False: 3.45k]
  ------------------
  358|      0|		return NULL;
  359|       |
  360|  3.45k|	read->out = out;
  361|  3.45k|	read->source = source;
  362|  3.45k|	g_object_ref(source);
  363|  3.45k|	read->page = page;
  364|  3.45k|	read->n = n;
  365|  3.45k|	read->scale = scale;
  366|  3.45k|	read->delays = NULL;
  367|  3.45k|	read->demux = NULL;
  368|  3.45k|	read->frame = NULL;
  369|  3.45k|	read->dispose_method = WEBP_MUX_DISPOSE_NONE;
  370|  3.45k|	read->frame_no = 0;
  371|       |
  372|       |	/* Everything has to stay open until read has finished, unfortunately,
  373|       |	 * since webp relies on us mapping the whole source.
  374|       |	 */
  375|  3.45k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  3.45k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  376|  3.45k|		G_CALLBACK(read_close_cb), read);
  377|       |
  378|  3.45k|	WebPInitDecoderConfig(&read->config);
  379|  3.45k|	read->config.options.use_threads = 1;
  380|  3.45k|	read->config.output.is_external_memory = 1;
  381|       |
  382|       |	/* Map the whole source into memory.
  383|       |	 */
  384|  3.45k|	if (!(read->data.bytes =
  ------------------
  |  Branch (384:6): [True: 0, False: 3.45k]
  ------------------
  385|  3.45k|				vips_source_map(source, &read->data.size)))
  386|      0|		return NULL;
  387|       |
  388|  3.45k|	return read;
  389|  3.45k|}
webp2vips.c:read_close_cb:
  348|  3.45k|{
  349|  3.45k|	read_free(read);
  350|  3.45k|}
webp2vips.c:read_free:
  333|  3.45k|{
  334|  3.45k|	WebPDemuxReleaseIterator(&read->iter);
  335|  3.45k|	VIPS_UNREF(read->frame);
  ------------------
  |  |   57|  3.45k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  3.45k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.45k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.45k|	{ \
  |  |  |  |   43|  3.45k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.01k, False: 436]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.01k|			(void) F((S)); \
  |  |  |  |   45|  3.01k|			(S) = 0; \
  |  |  |  |   46|  3.01k|		} \
  |  |  |  |   47|  3.45k|	} \
  |  |  |  |   48|  3.45k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.45k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|  3.45k|	VIPS_FREEF(WebPDemuxDelete, read->demux);
  ------------------
  |  |   41|  3.45k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.45k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  3.45k|	{ \
  |  |   43|  3.45k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 3.02k, False: 434]
  |  |  ------------------
  |  |   44|  3.02k|			(void) F((S)); \
  |  |   45|  3.02k|			(S) = 0; \
  |  |   46|  3.02k|		} \
  |  |   47|  3.45k|	} \
  |  |   48|  3.45k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.45k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|  3.45k|	WebPFreeDecBuffer(&read->config.output);
  338|       |
  339|  3.45k|	VIPS_UNREF(read->source);
  ------------------
  |  |   57|  3.45k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  3.45k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.45k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.45k|	{ \
  |  |  |  |   43|  3.45k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.45k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.45k|			(void) F((S)); \
  |  |  |  |   45|  3.45k|			(S) = 0; \
  |  |  |  |   46|  3.45k|		} \
  |  |  |  |   47|  3.45k|	} \
  |  |  |  |   48|  3.45k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.45k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|  3.45k|	VIPS_FREE(read->delays);
  ------------------
  |  |   50|  3.45k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.45k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.45k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.45k|	{ \
  |  |  |  |   43|  3.45k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 3.45k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  3.45k|	} \
  |  |  |  |   48|  3.45k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.45k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|  3.45k|	VIPS_FREE(read);
  ------------------
  |  |   50|  3.45k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.45k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.45k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.45k|	{ \
  |  |  |  |   43|  3.45k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.45k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.45k|			(void) F((S)); \
  |  |  |  |   45|  3.45k|			(S) = 0; \
  |  |  |  |   46|  3.45k|		} \
  |  |  |  |   47|  3.45k|	} \
  |  |  |  |   48|  3.45k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.45k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|  3.45k|	return 0;
  344|  3.45k|}
webp2vips.c:read_header:
  402|  3.45k|{
  403|  3.45k|	int flags;
  404|  3.45k|	int i;
  405|       |
  406|  3.45k|	if (!(read->demux = WebPDemux(&read->data))) {
  ------------------
  |  Branch (406:6): [True: 434, False: 3.02k]
  ------------------
  407|    434|		vips_error("webp", "%s", _("unable to parse image"));
  ------------------
  |  |   30|    434|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    434|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  408|    434|		return -1;
  409|    434|	}
  410|       |
  411|  3.02k|	flags = WebPDemuxGetI(read->demux, WEBP_FF_FORMAT_FLAGS);
  412|       |
  413|  3.02k|	read->alpha = flags & ALPHA_FLAG;
  414|       |
  415|       |	/* We do everything as RGBA and then, if we can, drop the alpha on
  416|       |	 * save.
  417|       |	 */
  418|  3.02k|	read->config.output.colorspace = MODE_RGBA;
  419|       |
  420|  3.02k|	read->canvas_width =
  421|  3.02k|		WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_WIDTH);
  422|  3.02k|	read->canvas_height =
  423|  3.02k|		WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_HEIGHT);
  424|       |
  425|  3.02k|	if (flags & ANIMATION_FLAG) {
  ------------------
  |  Branch (425:6): [True: 0, False: 3.02k]
  ------------------
  426|      0|		int loop_count;
  427|      0|		WebPIterator iter;
  428|       |
  429|      0|		loop_count = WebPDemuxGetI(read->demux, WEBP_FF_LOOP_COUNT);
  430|      0|		read->frame_count = WebPDemuxGetI(read->demux,
  431|      0|			WEBP_FF_FRAME_COUNT);
  432|       |
  433|       |#ifdef DEBUG
  434|       |		printf("webp2vips: animation\n");
  435|       |		printf("webp2vips: loop_count = %d\n", loop_count);
  436|       |		printf("webp2vips: frame_count = %d\n", read->frame_count);
  437|       |#endif /*DEBUG*/
  438|       |
  439|      0|		vips_image_set_int(out, "loop", loop_count);
  440|       |
  441|       |		/* DEPRECATED "gif-loop"
  442|       |		 *
  443|       |		 * Not the correct behavior as loop=1 became gif-loop=0
  444|       |		 * but we want to keep the old behavior untouched!
  445|       |		 */
  446|      0|		vips_image_set_int(out, "gif-loop",
  447|      0|			loop_count == 0 ? 0 : loop_count - 1);
  ------------------
  |  Branch (447:4): [True: 0, False: 0]
  ------------------
  448|       |
  449|      0|		if (WebPDemuxGetFrame(read->demux, 1, &iter)) {
  ------------------
  |  Branch (449:7): [True: 0, False: 0]
  ------------------
  450|      0|			int i;
  451|       |
  452|      0|			read->delays = (int *)
  453|      0|				g_malloc0(read->frame_count * sizeof(int));
  454|      0|			for (i = 0; i < read->frame_count; i++)
  ------------------
  |  Branch (454:16): [True: 0, False: 0]
  ------------------
  455|      0|				read->delays[i] = 40;
  456|       |
  457|      0|			do {
  458|      0|				g_assert(iter.frame_num >= 1 &&
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|      0|					iter.frame_num <= read->frame_count);
  460|       |
  461|      0|				read->delays[iter.frame_num - 1] =
  462|      0|					iter.duration;
  463|       |
  464|       |				/* We need the alpha in an animation if:
  465|       |				 *   - any frame has transparent pixels
  466|       |				 *   - any frame doesn't fill the whole canvas.
  467|       |				 */
  468|      0|				if (iter.has_alpha ||
  ------------------
  |  Branch (468:9): [True: 0, False: 0]
  ------------------
  469|      0|					iter.width != read->canvas_width ||
  ------------------
  |  Branch (469:6): [True: 0, False: 0]
  ------------------
  470|      0|					iter.height != read->canvas_height)
  ------------------
  |  Branch (470:6): [True: 0, False: 0]
  ------------------
  471|      0|					read->alpha = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  472|       |
  473|       |				/* We must disable shrink-on-load if any frame
  474|       |				 * does not fill the whole canvas. We won't be
  475|       |				 * able to shrink-on-load it to the exact
  476|       |				 * position in a downsized canvas.
  477|       |				 */
  478|      0|				if (iter.width != read->canvas_width ||
  ------------------
  |  Branch (478:9): [True: 0, False: 0]
  ------------------
  479|      0|					iter.height != read->canvas_height)
  ------------------
  |  Branch (479:6): [True: 0, False: 0]
  ------------------
  480|      0|					read->scale = 1.0;
  481|      0|			} while (WebPDemuxNextFrame(&iter));
  ------------------
  |  Branch (481:13): [True: 0, False: 0]
  ------------------
  482|       |
  483|      0|			vips_image_set_array_int(out,
  484|      0|				"delay", read->delays, read->frame_count);
  485|       |
  486|       |			/* webp uses ms for delays, gif uses centiseconds.
  487|       |			 */
  488|      0|			vips_image_set_int(out, "gif-delay",
  489|      0|				VIPS_RINT(read->delays[0] / 10.0));
  ------------------
  |  |   74|      0|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  490|      0|		}
  491|       |
  492|      0|		WebPDemuxReleaseIterator(&iter);
  493|       |
  494|      0|		if (read->n == -1)
  ------------------
  |  Branch (494:7): [True: 0, False: 0]
  ------------------
  495|      0|			read->n = read->frame_count - read->page;
  496|       |
  497|      0|		if (read->page < 0 ||
  ------------------
  |  Branch (497:7): [True: 0, False: 0]
  ------------------
  498|      0|			read->n <= 0 ||
  ------------------
  |  Branch (498:4): [True: 0, False: 0]
  ------------------
  499|      0|			read->page + read->n > read->frame_count) {
  ------------------
  |  Branch (499:4): [True: 0, False: 0]
  ------------------
  500|      0|			vips_error("webp",
  501|      0|				"%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  502|      0|			return -1;
  503|      0|		}
  504|       |
  505|       |		/* Note that n-pages is the number of pages in the original,
  506|       |		 * not the number of pages in the image we are writing.
  507|       |		 */
  508|      0|		vips_image_set_int(out, VIPS_META_N_PAGES, read->frame_count);
  ------------------
  |  |  165|      0|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  509|      0|	}
  510|       |
  511|       |	/* We round-to-nearest cf. pdfload etc.
  512|       |	 */
  513|  3.02k|	read->frame_width = VIPS_RINT(read->canvas_width * read->scale);
  ------------------
  |  |   74|  3.02k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  514|  3.02k|	read->frame_height = VIPS_RINT(read->canvas_height * read->scale);
  ------------------
  |  |   74|  3.02k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  515|       |
  516|       |#ifdef DEBUG
  517|       |	printf("webp2vips: canvas_width = %d\n", read->canvas_width);
  518|       |	printf("webp2vips: canvas_height = %d\n", read->canvas_height);
  519|       |	printf("webp2vips: frame_width = %d\n", read->frame_width);
  520|       |	printf("webp2vips: frame_height = %d\n", read->frame_height);
  521|       |#endif /*DEBUG*/
  522|       |
  523|  3.02k|	if (flags & ANIMATION_FLAG) {
  ------------------
  |  Branch (523:6): [True: 0, False: 3.02k]
  ------------------
  524|       |		/* Only set page-height if we have more than one page, or
  525|       |		 * this could accidentally turn into an animated image later.
  526|       |		 */
  527|      0|		if (read->n > 1)
  ------------------
  |  Branch (527:7): [True: 0, False: 0]
  ------------------
  528|      0|			vips_image_set_int(out,
  529|      0|				VIPS_META_PAGE_HEIGHT, read->frame_height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  530|       |
  531|      0|		read->width = read->frame_width;
  532|      0|		read->height = read->n * read->frame_height;
  533|      0|	}
  534|  3.02k|	else {
  535|  3.02k|		read->width = read->frame_width;
  536|  3.02k|		read->height = read->frame_height;
  537|  3.02k|		read->frame_count = 1;
  538|  3.02k|	}
  539|       |
  540|       |	/* height can be huge if this is an animated webp image.
  541|       |	 */
  542|  3.02k|	if (read->width <= 0 ||
  ------------------
  |  Branch (542:6): [True: 0, False: 3.02k]
  ------------------
  543|  3.02k|		read->height <= 0 ||
  ------------------
  |  Branch (543:3): [True: 0, False: 3.02k]
  ------------------
  544|  3.02k|		read->width > 0x3FFF ||
  ------------------
  |  Branch (544:3): [True: 1, False: 3.02k]
  ------------------
  545|  3.02k|		read->height >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  6.04k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (545:3): [True: 0, False: 3.02k]
  ------------------
  546|  3.02k|		read->frame_width <= 0 ||
  ------------------
  |  Branch (546:3): [True: 0, False: 3.02k]
  ------------------
  547|  3.02k|		read->frame_height <= 0 ||
  ------------------
  |  Branch (547:3): [True: 0, False: 3.02k]
  ------------------
  548|  3.02k|		read->frame_width > 0x3FFF ||
  ------------------
  |  Branch (548:3): [True: 0, False: 3.02k]
  ------------------
  549|  3.02k|		read->frame_height > 0x3FFF) {
  ------------------
  |  Branch (549:3): [True: 1, False: 3.01k]
  ------------------
  550|      2|		vips_error("webp", "%s", _("bad image dimensions"));
  ------------------
  |  |   30|      2|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  551|      2|		return -1;
  552|      2|	}
  553|       |
  554|  12.0k|	for (i = 0; i < vips__n_webp_names; i++) {
  ------------------
  |  Branch (554:14): [True: 9.05k, False: 3.01k]
  ------------------
  555|  9.05k|		const char *vips = vips__webp_names[i].vips;
  556|  9.05k|		const char *webp = vips__webp_names[i].webp;
  557|       |
  558|  9.05k|		if (flags & vips__webp_names[i].flags) {
  ------------------
  |  Branch (558:7): [True: 156, False: 8.90k]
  ------------------
  559|    156|			WebPChunkIterator iter;
  560|       |
  561|    156|			WebPDemuxGetChunk(read->demux, webp, 1, &iter);
  562|    156|			vips_image_set_blob_copy(out,
  563|    156|				vips, iter.chunk.bytes, iter.chunk.size);
  564|    156|			WebPDemuxReleaseChunkIterator(&iter);
  565|    156|		}
  566|  9.05k|	}
  567|       |
  568|       |	/* The canvas is always RGBA, we drop alpha to RGB on output if we
  569|       |	 * can.
  570|       |	 */
  571|  3.01k|	read->frame = vips_image_new_memory();
  572|  3.01k|	vips_image_init_fields(read->frame,
  573|  3.01k|		read->frame_width, read->frame_height, 4,
  574|  3.01k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  575|  3.01k|		VIPS_INTERPRETATION_sRGB,
  576|  3.01k|		1.0, 1.0);
  577|  3.01k|	if (vips_image_pipelinev(read->frame,
  ------------------
  |  Branch (577:6): [True: 0, False: 3.01k]
  ------------------
  578|  3.01k|			VIPS_DEMAND_STYLE_THINSTRIP, NULL) ||
  579|  3.01k|		vips_image_write_prepare(read->frame))
  ------------------
  |  Branch (579:3): [True: 0, False: 3.01k]
  ------------------
  580|      0|		return -1;
  581|       |
  582|  3.01k|	vips_image_init_fields(out,
  583|  3.01k|		read->width, read->height,
  584|  3.01k|		read->alpha ? 4 : 3,
  ------------------
  |  Branch (584:3): [True: 83, False: 2.93k]
  ------------------
  585|  3.01k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  586|  3.01k|		VIPS_INTERPRETATION_sRGB,
  587|  3.01k|		1.0, 1.0);
  588|  3.01k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (588:6): [True: 0, False: 3.01k]
  ------------------
  589|      0|		return -1;
  590|  3.01k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  3.01k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.01k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  3.01k|	{ \
  |  |   55|  3.01k|		const char *sst = (V); \
  |  |   56|  3.01k|		\
  |  |   57|  3.01k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 3.01k, False: 0]
  |  |  ------------------
  |  |   58|  3.01k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 3.01k]
  |  |  |  Branch (58:16): [True: 3.01k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  3.01k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  3.01k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  3.01k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  3.01k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  3.01k|	{ \
  |  |  |  |  |  |   43|  3.01k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 3.01k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  3.01k|			(void) F((S)); \
  |  |  |  |  |  |   45|  3.01k|			(S) = 0; \
  |  |  |  |  |  |   46|  3.01k|		} \
  |  |  |  |  |  |   47|  3.01k|	} \
  |  |  |  |  |  |   48|  3.01k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  3.01k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  3.01k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 3.01k]
  |  |  ------------------
  |  |   61|  3.01k|					(S) = g_strdup(sst); \
  |  |   62|  3.01k|			} \
  |  |   63|  3.01k|		} \
  |  |   64|  3.01k|	} \
  |  |   65|  3.01k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.01k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|  3.01k|		vips_connection_filename(VIPS_CONNECTION(read->source)));
  592|       |
  593|  3.01k|	if (!WebPDemuxGetFrame(read->demux, 1, &read->iter)) {
  ------------------
  |  Branch (593:6): [True: 0, False: 3.01k]
  ------------------
  594|      0|		vips_error("webp",
  595|      0|			"%s", _("unable to loop through frames"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  596|      0|		return -1;
  597|      0|	}
  598|       |
  599|  3.01k|	return 0;
  600|  3.01k|}
webp2vips.c:read_image:
  786|  1.41k|{
  787|  1.41k|	VipsImage **t = (VipsImage **)
  788|  1.41k|		vips_object_local_array(VIPS_OBJECT(out), 2);
  ------------------
  |  |  433|  1.41k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.41k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.41k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|       |
  790|       |	/* Make the output pipeline.
  791|       |	 */
  792|  1.41k|	t[0] = vips_image_new();
  793|  1.41k|	if (read_header(read, t[0]))
  ------------------
  |  Branch (793:6): [True: 0, False: 1.41k]
  ------------------
  794|      0|		return -1;
  795|       |
  796|  1.41k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (796:6): [True: 0, False: 1.41k]
  ------------------
  797|  1.41k|			NULL, read_webp_generate, NULL, read, NULL) ||
  798|  1.41k|		vips_sequential(t[0], &t[1], NULL) ||
  ------------------
  |  Branch (798:3): [True: 0, False: 1.41k]
  ------------------
  799|  1.41k|		vips_image_write(t[1], out))
  ------------------
  |  Branch (799:3): [True: 979, False: 435]
  ------------------
  800|    979|		return -1;
  801|       |
  802|    435|	return 0;
  803|  1.41k|}
webp2vips.c:read_webp_generate:
  735|  25.9k|{
  736|  25.9k|	VipsRect *r = &out_region->valid;
  737|  25.9k|	Read *read = (Read *) a;
  738|       |
  739|       |	/* iter.frame_num numbers from 1.
  740|       |	 */
  741|  25.9k|	int frame = 1 + r->top / read->frame_height + read->page;
  742|  25.9k|	int line = r->top % read->frame_height;
  743|       |
  744|       |#ifdef DEBUG_VERBOSE
  745|       |	printf("read_webp_generate: line %d\n", r->top);
  746|       |#endif /*DEBUG_VERBOSE*/
  747|       |
  748|  25.9k|	g_assert(r->height == 1);
  ------------------
  |  |  166|  25.9k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|       |
  750|  26.3k|	while (read->frame_no < frame) {
  ------------------
  |  Branch (750:9): [True: 1.41k, False: 24.9k]
  ------------------
  751|  1.41k|		if (read_next_frame(read))
  ------------------
  |  Branch (751:7): [True: 979, False: 435]
  ------------------
  752|    979|			return -1;
  753|       |
  754|    435|		read->frame_no += 1;
  755|    435|	}
  756|       |
  757|  24.9k|	if (out_region->im->Bands == 4)
  ------------------
  |  Branch (757:6): [True: 0, False: 24.9k]
  ------------------
  758|      0|		memcpy(VIPS_REGION_ADDR(out_region, 0, r->top),
  ------------------
  |  |  227|      0|	((R)->data + \
  |  |  228|      0|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      0|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      0|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  759|      0|			VIPS_IMAGE_ADDR(read->frame, 0, line),
  ------------------
  |  |  418|      0|	((I)->data + \
  |  |  419|      0|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|      0|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|      0|			VIPS_IMAGE_SIZEOF_LINE(read->frame));
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  761|  24.9k|	else {
  762|  24.9k|		int x;
  763|  24.9k|		VipsPel *p;
  764|  24.9k|		VipsPel *q;
  765|       |
  766|       |		/* We know that alpha is solid, so we can just drop the 4th
  767|       |		 * band.
  768|       |		 */
  769|  24.9k|		p = VIPS_IMAGE_ADDR(read->frame, 0, line);
  ------------------
  |  |  418|  24.9k|	((I)->data + \
  |  |  419|  24.9k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  24.9k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  24.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  24.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  24.9k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  24.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  24.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|  24.9k|		q = VIPS_REGION_ADDR(out_region, 0, r->top);
  ------------------
  |  |  227|  24.9k|	((R)->data + \
  |  |  228|  24.9k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  24.9k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  24.9k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  24.9k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  24.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  24.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|  1.24M|		for (x = 0; x < r->width; x++) {
  ------------------
  |  Branch (771:15): [True: 1.22M, False: 24.9k]
  ------------------
  772|  1.22M|			q[0] = p[0];
  773|  1.22M|			q[1] = p[1];
  774|  1.22M|			q[2] = p[2];
  775|       |
  776|  1.22M|			q += 3;
  777|  1.22M|			p += 4;
  778|  1.22M|		}
  779|  24.9k|	}
  780|       |
  781|  24.9k|	return 0;
  782|  25.9k|}
webp2vips.c:read_next_frame:
  647|  1.41k|{
  648|  1.41k|	VipsImage *frame;
  649|  1.41k|	VipsRect area;
  650|       |
  651|       |#ifdef DEBUG
  652|       |	printf("read_next_frame:\n");
  653|       |#endif /*DEBUG*/
  654|       |
  655|       |	/* Area of this frame, in output image coordinates. We must rint(),
  656|       |	 * since we need the same rules as the overall image scale, or we'll
  657|       |	 * sometimes have missing pixels on edges.
  658|       |	 */
  659|  1.41k|	area.left = VIPS_RINT(read->iter.x_offset * read->scale);
  ------------------
  |  |   74|  1.41k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  660|  1.41k|	area.top = VIPS_RINT(read->iter.y_offset * read->scale);
  ------------------
  |  |   74|  1.41k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  661|  1.41k|	area.width = VIPS_RINT(read->iter.width * read->scale);
  ------------------
  |  |   74|  1.41k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  662|  1.41k|	area.height = VIPS_RINT(read->iter.height * read->scale);
  ------------------
  |  |   74|  1.41k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  663|       |
  664|       |	/* Dispose from the previous frame.
  665|       |	 */
  666|  1.41k|	if (read->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) {
  ------------------
  |  Branch (666:6): [True: 0, False: 1.41k]
  ------------------
  667|       |		/* We must clear the pixels occupied by the previous webp
  668|       |		 * frame (not the whole of the read frame) to 0 (transparent).
  669|       |		 *
  670|       |		 * We do not clear to WEBP_FF_BACKGROUND_COLOR. That's only
  671|       |		 * used to composite down to RGB. Perhaps we
  672|       |		 * should attach background as metadata.
  673|       |		 */
  674|      0|		guint32 zero = 0;
  675|       |
  676|      0|		vips_image_paint_area(read->frame,
  677|      0|			&read->dispose_rect, (VipsPel *) &zero);
  678|      0|	}
  679|       |
  680|       |	/* Note this frame's dispose for next time.
  681|       |	 */
  682|  1.41k|	read->dispose_method = read->iter.dispose_method;
  683|  1.41k|	read->dispose_rect = area;
  684|       |
  685|       |#ifdef DEBUG
  686|       |	printf("webp2vips: frame_num = %d\n", read->iter.frame_num);
  687|       |	printf("   left = %d\n", area.left);
  688|       |	printf("   top = %d\n", area.top);
  689|       |	printf("   width = %d\n", area.width);
  690|       |	printf("   height = %d\n", area.height);
  691|       |	printf("   duration = %d\n", read->iter.duration);
  692|       |	printf("   dispose = ");
  693|       |	if (read->iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
  694|       |		printf("clear to background\n");
  695|       |	else
  696|       |		printf("none\n");
  697|       |	printf("   has_alpha = %d\n", read->iter.has_alpha);
  698|       |	printf("   blend_method = ");
  699|       |	if (read->iter.blend_method == WEBP_MUX_BLEND)
  700|       |		printf("blend with previous\n");
  701|       |	else
  702|       |		printf("don't blend\n");
  703|       |#endif /*DEBUG*/
  704|       |
  705|  1.41k|	if (!(frame = read_frame(read,
  ------------------
  |  Branch (705:6): [True: 979, False: 435]
  ------------------
  706|  1.41k|			  area.width, area.height,
  707|  1.41k|			  read->iter.fragment.bytes, read->iter.fragment.size)))
  708|    979|		return -1;
  709|       |
  710|       |	/* Now blend or copy the new pixels into our accumulator.
  711|       |	 */
  712|    435|	vips_image_paint_image(read->frame, frame,
  713|    435|		area.left, area.top,
  714|    435|		read->iter.frame_num > 1 &&
  ------------------
  |  Branch (714:3): [True: 0, False: 435]
  ------------------
  715|    435|			read->iter.blend_method == WEBP_MUX_BLEND);
  ------------------
  |  Branch (715:4): [True: 0, False: 0]
  ------------------
  716|       |
  717|    435|	g_object_unref(frame);
  718|       |
  719|       |	/* If there's another frame, move on.
  720|       |	 */
  721|    435|	if (read->iter.frame_num < read->frame_count) {
  ------------------
  |  Branch (721:6): [True: 0, False: 435]
  ------------------
  722|      0|		if (!WebPDemuxNextFrame(&read->iter)) {
  ------------------
  |  Branch (722:7): [True: 0, False: 0]
  ------------------
  723|      0|			vips_error("webp2vips",
  724|      0|				"%s", _("not enough frames"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  725|      0|			return -1;
  726|      0|		}
  727|      0|	}
  728|       |
  729|    435|	return 0;
  730|    435|}
webp2vips.c:read_frame:
  608|  1.41k|{
  609|  1.41k|	VipsImage *frame;
  610|       |
  611|       |#ifdef DEBUG
  612|       |	printf("read_frame:\n");
  613|       |#endif /*DEBUG*/
  614|       |
  615|  1.41k|	frame = vips_image_new_memory();
  616|  1.41k|	vips_image_init_fields(frame,
  617|  1.41k|		width, height, 4,
  618|  1.41k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  619|  1.41k|		VIPS_INTERPRETATION_sRGB,
  620|  1.41k|		1.0, 1.0);
  621|  1.41k|	if (vips_image_pipelinev(frame, VIPS_DEMAND_STYLE_THINSTRIP, NULL) ||
  ------------------
  |  Branch (621:6): [True: 0, False: 1.41k]
  ------------------
  622|  1.41k|		vips_image_write_prepare(frame)) {
  ------------------
  |  Branch (622:3): [True: 0, False: 1.41k]
  ------------------
  623|      0|		g_object_unref(frame);
  624|      0|		return NULL;
  625|      0|	}
  626|       |
  627|  1.41k|	read->config.output.u.RGBA.rgba = VIPS_IMAGE_ADDR(frame, 0, 0);
  ------------------
  |  |  418|  1.41k|	((I)->data + \
  |  |  419|  1.41k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  1.41k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.41k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.41k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  1.41k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  1.41k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  1.41k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|  1.41k|	read->config.output.u.RGBA.stride = VIPS_IMAGE_SIZEOF_LINE(frame);
  ------------------
  |  |  386|  1.41k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  1.41k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  1.41k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|  1.41k|	read->config.output.u.RGBA.size = VIPS_IMAGE_SIZEOF_IMAGE(frame);
  ------------------
  |  |  388|  1.41k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  1.41k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.41k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.41k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  630|  1.41k|	if (read->scale != 1.0) {
  ------------------
  |  Branch (630:6): [True: 0, False: 1.41k]
  ------------------
  631|      0|		read->config.options.use_scaling = 1;
  632|      0|		read->config.options.scaled_width = width;
  633|      0|		read->config.options.scaled_height = height;
  634|      0|	}
  635|       |
  636|  1.41k|	if (WebPDecode(data, length, &read->config) != VP8_STATUS_OK) {
  ------------------
  |  Branch (636:6): [True: 979, False: 435]
  ------------------
  637|    979|		g_object_unref(frame);
  638|    979|		vips_error("webp2vips", "%s", _("unable to read pixels"));
  ------------------
  |  |   30|    979|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    979|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  639|    979|		return NULL;
  640|    979|	}
  641|       |
  642|    435|	return frame;
  643|  1.41k|}
webp2vips.c:vips_image_paint_image:
  281|    435|{
  282|    435|	VipsRect frame_rect = { 0, 0, frame->Xsize, frame->Ysize };
  283|    435|	VipsRect sub_rect = { left, top, sub->Xsize, sub->Ysize };
  284|    435|	int ps = VIPS_IMAGE_SIZEOF_PEL(frame);
  ------------------
  |  |  384|    435|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|    435|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  285|       |
  286|    435|	VipsRect ovl;
  287|       |
  288|    435|	g_assert(VIPS_IMAGE_SIZEOF_PEL(sub) == ps);
  ------------------
  |  |  166|    435|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    435|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    435|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|       |
  290|    435|	vips_rect_intersectrect(&frame_rect, &sub_rect, &ovl);
  291|    435|	if (!vips_rect_isempty(&ovl)) {
  ------------------
  |  Branch (291:6): [True: 435, False: 0]
  ------------------
  292|    435|		VipsPel *p, *q;
  293|    435|		int x, y;
  294|       |
  295|    435|		p = VIPS_IMAGE_ADDR(sub, ovl.left - left, ovl.top - top);
  ------------------
  |  |  418|    435|	((I)->data + \
  |  |  419|    435|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    435|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    435|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    435|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    435|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    435|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    435|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    435|		q = VIPS_IMAGE_ADDR(frame, ovl.left, ovl.top);
  ------------------
  |  |  418|    435|	((I)->data + \
  |  |  419|    435|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    435|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    435|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    435|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    435|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    435|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    435|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|       |
  298|  25.4k|		for (y = 0; y < ovl.height; y++) {
  ------------------
  |  Branch (298:15): [True: 24.9k, False: 435]
  ------------------
  299|  24.9k|			if (blend) {
  ------------------
  |  Branch (299:8): [True: 0, False: 24.9k]
  ------------------
  300|      0|				guint32 *A = (guint32 *) p;
  301|      0|				guint32 *B = (guint32 *) q;
  302|       |
  303|      0|				for (x = 0; x < ovl.width; x++)
  ------------------
  |  Branch (303:17): [True: 0, False: 0]
  ------------------
  304|      0|					B[x] = blend_pixel(A[x], B[x]);
  305|      0|			}
  306|  24.9k|			else
  307|  24.9k|				memcpy((char *) q, (char *) p,
  308|  24.9k|					ovl.width * ps);
  309|       |
  310|  24.9k|			p += VIPS_IMAGE_SIZEOF_LINE(sub);
  ------------------
  |  |  386|  24.9k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  24.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  24.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|  24.9k|			q += VIPS_IMAGE_SIZEOF_LINE(frame);
  ------------------
  |  |  386|  24.9k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  24.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  24.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|  24.9k|		}
  313|    435|	}
  314|    435|}

webpload.c:vips_foreign_load_webp_class_init:
  153|      1|{
  154|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  156|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  157|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  158|       |
  159|      1|	gobject_class->dispose = vips_foreign_load_webp_dispose;
  160|      1|	gobject_class->set_property = vips_object_set_property;
  161|      1|	gobject_class->get_property = vips_object_get_property;
  162|       |
  163|      1|	object_class->nickname = "webpload_base";
  164|      1|	object_class->description = _("load webp");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  165|      1|	object_class->build = vips_foreign_load_webp_build;
  166|       |
  167|       |	/* We are fast at is_a(), so high priority.
  168|       |	 */
  169|      1|	foreign_class->priority = 200;
  170|       |
  171|      1|	load_class->get_flags_filename =
  172|      1|		vips_foreign_load_webp_get_flags_filename;
  173|      1|	load_class->get_flags = vips_foreign_load_webp_get_flags;
  174|      1|	load_class->header = vips_foreign_load_webp_header;
  175|      1|	load_class->load = vips_foreign_load_webp_load;
  176|       |
  177|      1|	VIPS_ARG_INT(class, "page", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  178|      1|		_("Page"),
  179|      1|		_("First page to load"),
  180|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  181|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, page),
  182|      1|		0, 100000, 0);
  183|       |
  184|      1|	VIPS_ARG_INT(class, "n", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  185|      1|		_("n"),
  186|      1|		_("Number of pages to load, -1 for all"),
  187|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, n),
  189|      1|		-1, 100000, 1);
  190|       |
  191|      1|	VIPS_ARG_DOUBLE(class, "scale", 22,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  192|      1|		_("Scale"),
  193|      1|		_("Factor to scale by"),
  194|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, scale),
  196|      1|		0.0, 1024.0, 1.0);
  197|       |
  198|      1|	VIPS_ARG_INT(class, "shrink", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  199|      1|		_("Shrink"),
  200|      1|		_("Shrink factor on load"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  202|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, shrink),
  203|      1|		1, 1024, 1);
  204|      1|}
webpload.c:vips_foreign_load_webp_dispose:
   89|  2.04k|{
   90|  2.04k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) gobject;
   91|       |
   92|  2.04k|	VIPS_UNREF(webp->source);
  ------------------
  |  |   57|  2.04k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  2.04k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.04k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.04k|	{ \
  |  |  |  |   43|  2.04k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.04k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.04k|			(void) F((S)); \
  |  |  |  |   45|  2.04k|			(S) = 0; \
  |  |  |  |   46|  2.04k|		} \
  |  |  |  |   47|  2.04k|	} \
  |  |  |  |   48|  2.04k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.04k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|       |
   94|  2.04k|	G_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  2.04k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.04k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.04k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|  2.04k|}
webpload.c:vips_foreign_load_webp_build:
   99|  2.04k|{
  100|  2.04k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object;
  101|       |
  102|       |	/* BC for the old API.
  103|       |	 */
  104|  2.04k|	if (!vips_object_argument_isset(VIPS_OBJECT(webp), "scale") &&
  ------------------
  |  |  433|  2.04k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.04k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.04k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (104:6): [True: 2.04k, False: 0]
  ------------------
  105|  2.04k|		vips_object_argument_isset(VIPS_OBJECT(webp), "shrink") &&
  ------------------
  |  |  433|  2.04k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.04k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.04k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (105:3): [True: 0, False: 2.04k]
  ------------------
  106|  2.04k|		webp->shrink != 0)
  ------------------
  |  Branch (106:3): [True: 0, False: 0]
  ------------------
  107|      0|		webp->scale = 1.0 / webp->shrink; // FIXME: Invalidates operation cache
  108|       |
  109|  2.04k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->build(object))
  ------------------
  |  |  435|  2.04k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.04k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.04k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (109:6): [True: 436, False: 1.60k]
  ------------------
  110|    436|		return -1;
  111|       |
  112|  1.60k|	return 0;
  113|  2.04k|}
webpload.c:vips_foreign_load_webp_get_flags:
  117|  2.04k|{
  118|  2.04k|	return 0;
  119|  2.04k|}
webpload.c:vips_foreign_load_webp_header:
  129|  2.04k|{
  130|  2.04k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load;
  131|       |
  132|  2.04k|	if (vips__webp_read_header_source(webp->source, load->out,
  ------------------
  |  Branch (132:6): [True: 436, False: 1.60k]
  ------------------
  133|  2.04k|			webp->page, webp->n, webp->scale))
  134|    436|		return -1;
  135|       |
  136|  1.60k|	return 0;
  137|  2.04k|}
webpload.c:vips_foreign_load_webp_load:
  141|  1.41k|{
  142|  1.41k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load;
  143|       |
  144|  1.41k|	if (vips__webp_read_source(webp->source, load->real,
  ------------------
  |  Branch (144:6): [True: 979, False: 435]
  ------------------
  145|  1.41k|			webp->page, webp->n, webp->scale))
  146|    979|		return -1;
  147|       |
  148|    435|	return 0;
  149|  1.41k|}
webpload.c:vips_foreign_load_webp_init:
  208|  2.04k|{
  209|  2.04k|	webp->n = 1;
  210|  2.04k|	webp->shrink = 1;
  211|  2.04k|	webp->scale = 1.0;
  212|  2.04k|}
webpload.c:vips_foreign_load_webp_source_class_init:
  248|      1|{
  249|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  251|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  252|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  253|       |
  254|      1|	gobject_class->set_property = vips_object_set_property;
  255|      1|	gobject_class->get_property = vips_object_get_property;
  256|       |
  257|      1|	object_class->nickname = "webpload_source";
  258|      1|	object_class->description = _("load webp from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  259|      1|	object_class->build = vips_foreign_load_webp_source_build;
  260|       |
  261|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  262|       |
  263|      1|	load_class->is_a_source = vips__iswebp_source;
  264|       |
  265|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  266|      1|		_("Source"),
  267|      1|		_("Source to load from"),
  268|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  269|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpSource, source),
  270|      1|		VIPS_TYPE_SOURCE);
  271|      1|}
webpload.c:vips_foreign_load_webp_file_class_init:
  328|      1|{
  329|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  331|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  332|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  333|       |
  334|      1|	gobject_class->set_property = vips_object_set_property;
  335|      1|	gobject_class->get_property = vips_object_get_property;
  336|       |
  337|      1|	object_class->nickname = "webpload";
  338|      1|	object_class->description = _("load webp from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  339|      1|	object_class->build = vips_foreign_load_webp_file_build;
  340|       |
  341|      1|	foreign_class->suffs = vips__webp_suffs;
  342|       |
  343|      1|	load_class->is_a = vips_foreign_load_webp_file_is_a;
  344|       |
  345|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  346|      1|		_("Filename"),
  347|      1|		_("Filename to load from"),
  348|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  349|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpFile, filename),
  350|      1|		NULL);
  351|      1|}
webpload.c:vips_foreign_load_webp_buffer_class_init:
  409|      1|{
  410|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  412|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  413|       |
  414|      1|	gobject_class->set_property = vips_object_set_property;
  415|      1|	gobject_class->get_property = vips_object_get_property;
  416|       |
  417|      1|	object_class->nickname = "webpload_buffer";
  418|      1|	object_class->description = _("load webp from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  419|      1|	object_class->build = vips_foreign_load_webp_buffer_build;
  420|       |
  421|      1|	load_class->is_a_buffer = vips_foreign_load_webp_buffer_is_a_buffer;
  422|       |
  423|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  424|      1|		_("Buffer"),
  425|      1|		_("Buffer to load from"),
  426|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  427|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpBuffer, blob),
  428|      1|		VIPS_TYPE_BLOB);
  429|      1|}
webpload.c:vips_foreign_load_webp_buffer_build:
  374|  2.04k|{
  375|  2.04k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object;
  376|  2.04k|	VipsForeignLoadWebpBuffer *buffer =
  377|  2.04k|		(VipsForeignLoadWebpBuffer *) object;
  378|       |
  379|  2.04k|	if (buffer->blob &&
  ------------------
  |  Branch (379:6): [True: 2.04k, False: 0]
  ------------------
  380|  2.04k|		!(webp->source = vips_source_new_from_memory(
  ------------------
  |  Branch (380:3): [True: 0, False: 2.04k]
  ------------------
  381|  2.04k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  2.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  382|  2.04k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  2.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  383|      0|		return -1;
  384|       |
  385|  2.04k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_buffer_parent_class)
  ------------------
  |  |  435|  2.04k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.04k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.04k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (385:6): [True: 436, False: 1.60k]
  ------------------
  386|  2.04k|			->build(object))
  387|    436|		return -1;
  388|       |
  389|  1.60k|	return 0;
  390|  2.04k|}
webpload.c:vips_foreign_load_webp_buffer_is_a_buffer:
  394|  30.3k|{
  395|  30.3k|	VipsSource *source;
  396|  30.3k|	gboolean result;
  397|       |
  398|  30.3k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (398:6): [True: 0, False: 30.3k]
  ------------------
  399|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  400|  30.3k|	result = vips__iswebp_source(source);
  401|  30.3k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  30.3k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  30.3k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  30.3k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  30.3k|	{ \
  |  |  |  |   43|  30.3k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 30.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  30.3k|			(void) F((S)); \
  |  |  |  |   45|  30.3k|			(S) = 0; \
  |  |  |  |   46|  30.3k|		} \
  |  |  |  |   47|  30.3k|	} \
  |  |  |  |   48|  30.3k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  30.3k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|       |
  403|  30.3k|	return result;
  404|  30.3k|}
webpload.c:vips_foreign_load_webp_buffer_init:
  433|  2.04k|{
  434|  2.04k|}

webpsave.c:vips_foreign_save_webp_class_init:
  806|      1|{
  807|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  809|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  810|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  811|       |
  812|      1|	gobject_class->dispose = vips_foreign_save_webp_dispose;
  813|      1|	gobject_class->set_property = vips_object_set_property;
  814|      1|	gobject_class->get_property = vips_object_get_property;
  815|       |
  816|      1|	object_class->nickname = "webpsave_base";
  817|      1|	object_class->description = _("save as WebP");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  818|      1|	object_class->build = vips_foreign_save_webp_build;
  819|       |
  820|      1|	foreign_class->suffs = vips__save_webp_suffs;
  821|       |
  822|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  823|      1|	save_class->format_table = bandfmt_webp;
  824|       |
  825|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  826|      1|		_("Q"),
  827|      1|		_("Q factor"),
  828|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  829|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, Q),
  830|      1|		0, 100, 75);
  831|       |
  832|      1|	VIPS_ARG_BOOL(class, "lossless", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  833|      1|		_("Lossless"),
  834|      1|		_("Enable lossless compression"),
  835|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  836|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, lossless),
  837|      1|		FALSE);
  838|       |
  839|      1|	VIPS_ARG_ENUM(class, "preset", 12,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  840|      1|		_("Preset"),
  841|      1|		_("Preset for lossy compression"),
  842|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  843|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, preset),
  844|      1|		VIPS_TYPE_FOREIGN_WEBP_PRESET,
  845|      1|		VIPS_FOREIGN_WEBP_PRESET_DEFAULT);
  846|       |
  847|      1|	VIPS_ARG_BOOL(class, "smart_subsample", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  848|      1|		_("Smart subsampling"),
  849|      1|		_("Enable high quality chroma subsampling"),
  850|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  851|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, smart_subsample),
  852|      1|		FALSE);
  853|       |
  854|      1|	VIPS_ARG_BOOL(class, "near_lossless", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  855|      1|		_("Near lossless"),
  856|      1|		_("Enable preprocessing in lossless mode (uses Q)"),
  857|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  858|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, near_lossless),
  859|      1|		FALSE);
  860|       |
  861|      1|	VIPS_ARG_INT(class, "alpha_q", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  862|      1|		_("Alpha quality"),
  863|      1|		_("Change alpha plane fidelity for lossy compression"),
  864|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  865|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, alpha_q),
  866|      1|		0, 100, 100);
  867|       |
  868|      1|	VIPS_ARG_BOOL(class, "min_size", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  869|      1|		_("Minimise size"),
  870|      1|		_("Optimise for minimum size"),
  871|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  872|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, min_size),
  873|      1|		FALSE);
  874|       |
  875|      1|	VIPS_ARG_INT(class, "kmin", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  876|      1|		_("Minimum keyframe spacing"),
  877|      1|		_("Minimum number of frames between key frames"),
  878|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  879|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, kmin),
  880|      1|		0, INT_MAX, INT_MAX - 1);
  881|       |
  882|      1|	VIPS_ARG_INT(class, "kmax", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  883|      1|		_("Maximum keyframe spacing"),
  884|      1|		_("Maximum number of frames between key frames"),
  885|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  886|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, kmax),
  887|      1|		0, INT_MAX, INT_MAX);
  888|       |
  889|      1|	VIPS_ARG_INT(class, "effort", 19,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  890|      1|		_("Effort"),
  891|      1|		_("Level of CPU effort to reduce file size"),
  892|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  893|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, effort),
  894|      1|		0, 6, 4);
  895|       |
  896|      1|	VIPS_ARG_INT(class, "target_size", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  897|      1|		_("Target size"),
  898|      1|		_("Desired target size in bytes"),
  899|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  900|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, target_size),
  901|      1|		0, INT_MAX, 0);
  902|       |
  903|      1|	VIPS_ARG_INT(class, "passes", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  904|      1|		_("Passes"),
  905|      1|		_("Number of entropy-analysis passes (in [1..10])"),
  906|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  907|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, passes),
  908|      1|		1, 10, 1);
  909|       |
  910|      1|	VIPS_ARG_INT(class, "reduction_effort", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  911|      1|		_("Reduction effort"),
  912|      1|		_("Level of CPU effort to reduce file size"),
  913|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  914|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, effort),
  915|      1|		0, 6, 4);
  916|       |
  917|      1|	VIPS_ARG_BOOL(class, "mixed", 22,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  918|      1|		_("Mixed encoding"),
  919|      1|		_("Allow mixed encoding (might reduce file size)"),
  920|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  921|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, mixed),
  922|      1|		FALSE);
  923|       |
  924|      1|	VIPS_ARG_BOOL(class, "smart_deblock", 23,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  925|      1|		_("Smart deblocking"),
  926|      1|		_("Enable auto-adjusting of the deblocking filter"),
  927|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  928|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, smart_deblock),
  929|      1|		FALSE);
  930|      1|}
webpsave.c:vips_foreign_save_webp_target_class_init:
  976|      1|{
  977|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  978|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  979|       |
  980|      1|	gobject_class->set_property = vips_object_set_property;
  981|      1|	gobject_class->get_property = vips_object_get_property;
  982|       |
  983|      1|	object_class->nickname = "webpsave_target";
  984|      1|	object_class->build = vips_foreign_save_webp_target_build;
  985|       |
  986|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  987|      1|		_("Target"),
  988|      1|		_("Target to save to"),
  989|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  990|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpTarget, target),
  991|      1|		VIPS_TYPE_TARGET);
  992|      1|}
webpsave.c:vips_foreign_save_webp_file_class_init:
 1027|      1|{
 1028|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1029|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1030|       |
 1031|      1|	gobject_class->set_property = vips_object_set_property;
 1032|      1|	gobject_class->get_property = vips_object_get_property;
 1033|       |
 1034|      1|	object_class->nickname = "webpsave";
 1035|      1|	object_class->build = vips_foreign_save_webp_file_build;
 1036|       |
 1037|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1038|      1|		_("Filename"),
 1039|      1|		_("Filename to save to"),
 1040|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1041|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpFile, filename),
 1042|      1|		NULL);
 1043|      1|}
webpsave.c:vips_foreign_save_webp_buffer_class_init:
 1085|      1|{
 1086|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1088|       |
 1089|      1|	gobject_class->set_property = vips_object_set_property;
 1090|      1|	gobject_class->get_property = vips_object_get_property;
 1091|       |
 1092|      1|	object_class->nickname = "webpsave_buffer";
 1093|      1|	object_class->build = vips_foreign_save_webp_buffer_build;
 1094|       |
 1095|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1096|      1|		_("Buffer"),
 1097|      1|		_("Buffer to save to"),
 1098|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1099|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpBuffer, buf),
 1100|      1|		VIPS_TYPE_BLOB);
 1101|      1|}
webpsave.c:vips_foreign_save_webp_mime_class_init:
 1152|      1|{
 1153|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1154|       |
 1155|      1|	object_class->nickname = "webpsave_mime";
 1156|      1|	object_class->description = _("save image to webp mime");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1157|      1|	object_class->build = vips_foreign_save_webp_mime_build;
 1158|      1|}

vips_freqfilt_operation_init:
  163|      2|{
  164|      2|#ifdef HAVE_FFTW
  165|      2|	extern GType vips_fwfft_get_type(void);
  166|      2|	extern GType vips_invfft_get_type(void);
  167|      2|#endif /*HAVE_FFTW*/
  168|      2|	extern GType vips_freqmult_get_type(void);
  169|      2|	extern GType vips_spectrum_get_type(void);
  170|      2|	extern GType vips_phasecor_get_type(void);
  171|       |
  172|      2|#ifdef HAVE_FFTW
  173|      2|	vips_fwfft_get_type();
  174|      2|	vips_invfft_get_type();
  175|      2|#endif /*HAVE_FFTW*/
  176|      2|	vips_freqmult_get_type();
  177|      2|	vips_spectrum_get_type();
  178|      2|	vips_phasecor_get_type();
  179|      2|}
freqfilt.c:vips_freqfilt_class_init:
   86|      1|{
   87|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|       |
   90|      1|	gobject_class->set_property = vips_object_set_property;
   91|      1|	gobject_class->get_property = vips_object_get_property;
   92|       |
   93|      1|	vobject_class->nickname = "freqfilt";
   94|      1|	vobject_class->description = _("frequency-domain filter operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   95|      1|	vobject_class->build = vips_freqfilt_build;
   96|       |
   97|      1|	VIPS_ARG_IMAGE(class, "in", -1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   98|      1|		_("Input"),
   99|      1|		_("Input image"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsFreqfilt, in));
  102|       |
  103|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  104|      1|		_("Output"),
  105|      1|		_("Output image"),
  106|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  107|      1|		G_STRUCT_OFFSET(VipsFreqfilt, out));
  108|      1|}

freqmult.c:vips_freqmult_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	vobject_class->nickname = "freqmult";
  126|      1|	vobject_class->description = _("frequency-domain filtering");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	vobject_class->build = vips_freqmult_build;
  128|       |
  129|      1|	VIPS_ARG_IMAGE(class, "mask", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  130|      1|		_("Mask"),
  131|      1|		_("Input mask image"),
  132|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  133|      1|		G_STRUCT_OFFSET(VipsFreqmult, mask));
  134|      1|}

fwfft.c:vips_fwfft_class_init:
  347|      1|{
  348|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|       |
  350|      1|	vobject_class->nickname = "fwfft";
  351|      1|	vobject_class->description = _("forward FFT");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  352|      1|	vobject_class->build = vips_fwfft_build;
  353|      1|}

invfft.c:vips_invfft_class_init:
  255|      1|{
  256|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|       |
  259|      1|	gobject_class->set_property = vips_object_set_property;
  260|      1|	gobject_class->get_property = vips_object_get_property;
  261|       |
  262|      1|	vobject_class->nickname = "invfft";
  263|      1|	vobject_class->description = _("inverse FFT");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  264|      1|	vobject_class->build = vips_invfft_build;
  265|       |
  266|      1|	VIPS_ARG_BOOL(class, "real", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  267|      1|		_("Real"),
  268|      1|		_("Output only the real part of the transform"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsInvfft, real),
  271|      1|		FALSE);
  272|      1|}

phasecor.c:vips_phasecor_class_init:
   99|      1|{
  100|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|       |
  103|      1|	gobject_class->set_property = vips_object_set_property;
  104|      1|	gobject_class->get_property = vips_object_get_property;
  105|       |
  106|      1|	vobject_class->nickname = "phasecor";
  107|      1|	vobject_class->description = _("calculate phase correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  108|      1|	vobject_class->build = vips_phasecor_build;
  109|       |
  110|      1|	VIPS_ARG_IMAGE(class, "in2", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  111|      1|		_("in2"),
  112|      1|		_("Second input image"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsPhasecor, in2));
  115|      1|}

spectrum.c:vips_spectrum_class_init:
   96|      1|{
   97|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|       |
   99|      1|	vobject_class->nickname = "spectrum";
  100|      1|	vobject_class->description = _("make displayable power spectrum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  101|      1|	vobject_class->build = vips_spectrum_build;
  102|      1|}

case.c:vips_case_class_init:
  223|      1|{
  224|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  227|       |
  228|      1|	gobject_class->set_property = vips_object_set_property;
  229|      1|	gobject_class->get_property = vips_object_get_property;
  230|       |
  231|      1|	object_class->nickname = "case";
  232|      1|	object_class->description =
  233|      1|		_("use pixel values to pick cases from an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  234|      1|	object_class->build = vips_case_build;
  235|       |
  236|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  237|       |
  238|      1|	VIPS_ARG_IMAGE(class, "index", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  239|      1|		_("Index"),
  240|      1|		_("Index image"),
  241|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsCase, index));
  243|       |
  244|      1|	VIPS_ARG_BOXED(class, "cases", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  245|      1|		_("Cases"),
  246|      1|		_("Array of case images"),
  247|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  248|      1|		G_STRUCT_OFFSET(VipsCase, cases),
  249|      1|		VIPS_TYPE_ARRAY_IMAGE);
  250|       |
  251|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  252|      1|		_("Output"),
  253|      1|		_("Output image"),
  254|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  255|      1|		G_STRUCT_OFFSET(VipsCase, out));
  256|      1|}

hist_cum.c:vips_hist_cum_class_init:
  153|      1|{
  154|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  155|      1|	VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_HISTOGRAM, VipsHistogramClass))
  ------------------
  156|       |
  157|      1|	object_class->nickname = "hist_cum";
  158|      1|	object_class->description = _("form cumulative histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  159|       |
  160|      1|	hclass->format_table = vips_hist_cum_format_table;
  161|      1|	hclass->process = vips_hist_cum_process;
  162|      1|}

hist_entropy.c:vips_hist_entropy_class_init:
   99|      1|{
  100|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  102|       |
  103|      1|	gobject_class->set_property = vips_object_set_property;
  104|      1|	gobject_class->get_property = vips_object_get_property;
  105|       |
  106|      1|	object_class->nickname = "hist_entropy";
  107|      1|	object_class->description = _("estimate image entropy");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  108|      1|	object_class->build = vips_hist_entropy_build;
  109|       |
  110|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  111|      1|		_("Input"),
  112|      1|		_("Input histogram image"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsHistEntropy, in));
  115|       |
  116|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  117|      1|		_("Output"),
  118|      1|		_("Output value"),
  119|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  120|      1|		G_STRUCT_OFFSET(VipsHistEntropy, out),
  121|      1|		-INFINITY, INFINITY, 0.0);
  122|      1|}

hist_equal.c:vips_hist_equal_class_init:
  102|      1|{
  103|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  105|       |
  106|      1|	gobject_class->set_property = vips_object_set_property;
  107|      1|	gobject_class->get_property = vips_object_get_property;
  108|       |
  109|      1|	object_class->nickname = "hist_equal";
  110|      1|	object_class->description = _("histogram equalisation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  111|      1|	object_class->build = vips_hist_equal_build;
  112|       |
  113|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  114|      1|		_("Input"),
  115|      1|		_("Input image"),
  116|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsHistEqual, in));
  118|       |
  119|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  120|      1|		_("Output"),
  121|      1|		_("Output image"),
  122|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  123|      1|		G_STRUCT_OFFSET(VipsHistEqual, out));
  124|       |
  125|      1|	VIPS_ARG_INT(class, "band", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  126|      1|		_("Band"),
  127|      1|		_("Equalise with this band"),
  128|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  129|      1|		G_STRUCT_OFFSET(VipsHistEqual, which),
  130|      1|		-1, 100000, -1);
  131|      1|}

hist_ismonotonic.c:vips_hist_ismonotonic_class_init:
  106|      1|{
  107|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	object_class->nickname = "hist_ismonotonic";
  114|      1|	object_class->description = _("test for monotonicity");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|      1|	object_class->build = vips_hist_ismonotonic_build;
  116|       |
  117|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  118|      1|		_("Input"),
  119|      1|		_("Input histogram image"),
  120|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  121|      1|		G_STRUCT_OFFSET(VipsHistIsmonotonic, in));
  122|       |
  123|      1|	VIPS_ARG_BOOL(class, "monotonic", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  124|      1|		_("Monotonic"),
  125|      1|		_("true if in is monotonic"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsHistIsmonotonic, monotonic),
  128|      1|		FALSE);
  129|      1|}

hist_local.c:vips_hist_local_class_init:
  346|      1|{
  347|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  349|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  350|       |
  351|      1|	gobject_class->set_property = vips_object_set_property;
  352|      1|	gobject_class->get_property = vips_object_get_property;
  353|       |
  354|      1|	object_class->nickname = "hist_local";
  355|      1|	object_class->description = _("local histogram equalisation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  356|      1|	object_class->build = vips_hist_local_build;
  357|       |
  358|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  359|       |
  360|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  361|      1|		_("Input"),
  362|      1|		_("Input image"),
  363|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  364|      1|		G_STRUCT_OFFSET(VipsHistLocal, in));
  365|       |
  366|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  367|      1|		_("Output"),
  368|      1|		_("Output image"),
  369|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  370|      1|		G_STRUCT_OFFSET(VipsHistLocal, out));
  371|       |
  372|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  373|      1|		_("Width"),
  374|      1|		_("Window width in pixels"),
  375|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  376|      1|		G_STRUCT_OFFSET(VipsHistLocal, width),
  377|      1|		1, VIPS_MAX_COORD, 1);
  378|       |
  379|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  380|      1|		_("Height"),
  381|      1|		_("Window height in pixels"),
  382|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  383|      1|		G_STRUCT_OFFSET(VipsHistLocal, height),
  384|      1|		1, VIPS_MAX_COORD, 1);
  385|       |
  386|      1|	VIPS_ARG_INT(class, "max_slope", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  387|      1|		_("Max slope"),
  388|      1|		_("Maximum slope (CLAHE)"),
  389|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  390|      1|		G_STRUCT_OFFSET(VipsHistLocal, max_slope),
  391|      1|		0, 100, 0);
  392|      1|}

hist_match.c:vips_hist_match_class_init:
  145|      1|{
  146|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|      1|	VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_HISTOGRAM, VipsHistogramClass))
  ------------------
  149|       |
  150|      1|	gobject_class->set_property = vips_object_set_property;
  151|      1|	gobject_class->get_property = vips_object_get_property;
  152|       |
  153|      1|	vobject_class->nickname = "hist_match";
  154|      1|	vobject_class->description = _("match two histograms");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  155|      1|	vobject_class->build = vips_hist_match_build;
  156|       |
  157|      1|	hclass->input_format = VIPS_FORMAT_UINT;
  158|      1|	hclass->process = vips_hist_match_process;
  159|       |
  160|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  161|      1|		_("Input"),
  162|      1|		_("Input histogram"),
  163|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsHistMatch, in));
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "ref", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Reference"),
  168|      1|		_("Reference histogram"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsHistMatch, ref));
  171|      1|}

hist_norm.c:vips_hist_norm_class_init:
  129|      1|{
  130|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  132|       |
  133|      1|	gobject_class->set_property = vips_object_set_property;
  134|      1|	gobject_class->get_property = vips_object_get_property;
  135|       |
  136|      1|	object_class->nickname = "hist_norm";
  137|      1|	object_class->description = _("normalise histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|      1|	object_class->build = vips_hist_norm_build;
  139|       |
  140|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  141|      1|		_("Input"),
  142|      1|		_("Input image"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsHistNorm, in));
  145|       |
  146|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  147|      1|		_("Output"),
  148|      1|		_("Output image"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  150|      1|		G_STRUCT_OFFSET(VipsHistNorm, out));
  151|      1|}

hist_plot.c:vips_hist_plot_class_init:
  321|      1|{
  322|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  324|       |
  325|      1|	gobject_class->set_property = vips_object_set_property;
  326|      1|	gobject_class->get_property = vips_object_get_property;
  327|       |
  328|      1|	object_class->nickname = "hist_plot";
  329|      1|	object_class->description = _("plot histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  330|      1|	object_class->build = vips_hist_plot_build;
  331|       |
  332|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  333|      1|		_("Input"),
  334|      1|		_("Input image"),
  335|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  336|      1|		G_STRUCT_OFFSET(VipsHistPlot, in));
  337|       |
  338|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  339|      1|		_("Output"),
  340|      1|		_("Output image"),
  341|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  342|      1|		G_STRUCT_OFFSET(VipsHistPlot, out));
  343|      1|}

hist_unary.c:vips_hist_unary_class_init:
   76|      1|{
   77|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|       |
   80|      1|	gobject_class->set_property = vips_object_set_property;
   81|      1|	gobject_class->get_property = vips_object_get_property;
   82|       |
   83|      1|	vobject_class->nickname = "hist_unary";
   84|      1|	vobject_class->description = _("hist_unary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   85|      1|	vobject_class->build = vips_hist_unary_build;
   86|       |
   87|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Input image"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsHistUnary, in));
   92|      1|}

vips_histogram_operation_init:
  251|      2|{
  252|      2|	extern GType vips_maplut_get_type(void);
  253|      2|	extern GType vips_case_get_type(void);
  254|      2|	extern GType vips_percent_get_type(void);
  255|      2|	extern GType vips_hist_cum_get_type(void);
  256|      2|	extern GType vips_hist_norm_get_type(void);
  257|      2|	extern GType vips_hist_equal_get_type(void);
  258|      2|	extern GType vips_hist_plot_get_type(void);
  259|      2|	extern GType vips_hist_match_get_type(void);
  260|      2|	extern GType vips_hist_local_get_type(void);
  261|      2|	extern GType vips_hist_ismonotonic_get_type(void);
  262|      2|	extern GType vips_hist_entropy_get_type(void);
  263|      2|	extern GType vips_stdif_get_type(void);
  264|       |
  265|      2|	vips_maplut_get_type();
  266|      2|	vips_case_get_type();
  267|      2|	vips_percent_get_type();
  268|      2|	vips_stdif_get_type();
  269|      2|	vips_hist_cum_get_type();
  270|      2|	vips_hist_norm_get_type();
  271|      2|	vips_hist_equal_get_type();
  272|      2|	vips_hist_plot_get_type();
  273|      2|	vips_hist_match_get_type();
  274|      2|	vips_hist_local_get_type();
  275|      2|	vips_hist_ismonotonic_get_type();
  276|      2|	vips_hist_entropy_get_type();
  277|      2|}
histogram.c:vips_histogram_class_init:
  215|      1|{
  216|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|       |
  219|      1|	gobject_class->set_property = vips_object_set_property;
  220|      1|	gobject_class->get_property = vips_object_get_property;
  221|       |
  222|      1|	vobject_class->nickname = "histogram";
  223|      1|	vobject_class->description = _("histogram operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  224|      1|	vobject_class->build = vips_histogram_build;
  225|       |
  226|      1|	class->input_format = VIPS_FORMAT_NOTSET;
  227|       |
  228|       |	/* Inputs set by subclassess.
  229|       |	 */
  230|       |
  231|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  232|      1|		_("Output"),
  233|      1|		_("Output image"),
  234|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  235|      1|		G_STRUCT_OFFSET(VipsHistogram, out));
  236|      1|}

maplut.c:vips_maplut_class_init:
  729|      1|{
  730|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  731|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  733|       |
  734|      1|	gobject_class->set_property = vips_object_set_property;
  735|      1|	gobject_class->get_property = vips_object_get_property;
  736|       |
  737|      1|	object_class->nickname = "maplut";
  738|      1|	object_class->description = _("map an image though a lut");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  739|      1|	object_class->build = vips_maplut_build;
  740|       |
  741|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  742|       |
  743|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  744|      1|		_("Input"),
  745|      1|		_("Input image"),
  746|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  747|      1|		G_STRUCT_OFFSET(VipsMaplut, in));
  748|       |
  749|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  750|      1|		_("Output"),
  751|      1|		_("Output image"),
  752|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  753|      1|		G_STRUCT_OFFSET(VipsMaplut, out));
  754|       |
  755|      1|	VIPS_ARG_IMAGE(class, "lut", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  756|      1|		_("LUT"),
  757|      1|		_("Look-up table image"),
  758|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  759|      1|		G_STRUCT_OFFSET(VipsMaplut, lut));
  760|       |
  761|      1|	VIPS_ARG_INT(class, "band", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  762|      1|		_("Band"),
  763|      1|		_("Apply one-band lut to this band of in"),
  764|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  765|      1|		G_STRUCT_OFFSET(VipsMaplut, band),
  766|      1|		-1, 10000, -1);
  767|      1|}

percent.c:vips_percent_class_init:
   97|      1|{
   98|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  100|       |
  101|      1|	gobject_class->set_property = vips_object_set_property;
  102|      1|	gobject_class->get_property = vips_object_get_property;
  103|       |
  104|      1|	object_class->nickname = "percent";
  105|      1|	object_class->description = _("find threshold for percent of pixels");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  106|      1|	object_class->build = vips_percent_build;
  107|       |
  108|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  109|      1|		_("Input"),
  110|      1|		_("Input image"),
  111|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  112|      1|		G_STRUCT_OFFSET(VipsPercent, in));
  113|       |
  114|      1|	VIPS_ARG_DOUBLE(class, "percent", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  115|      1|		_("Percent"),
  116|      1|		_("Percent of pixels"),
  117|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  118|      1|		G_STRUCT_OFFSET(VipsPercent, percent),
  119|      1|		0, 100, 50);
  120|       |
  121|      1|	VIPS_ARG_INT(class, "threshold", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  122|      1|		_("Threshold"),
  123|      1|		_("Threshold above which lie percent of pixels"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  125|      1|		G_STRUCT_OFFSET(VipsPercent, threshold),
  126|      1|		0, 65535, 0);
  127|      1|}

stdif.c:vips_stdif_class_init:
  282|      1|{
  283|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  285|       |
  286|      1|	gobject_class->set_property = vips_object_set_property;
  287|      1|	gobject_class->get_property = vips_object_get_property;
  288|       |
  289|      1|	object_class->nickname = "stdif";
  290|      1|	object_class->description = _("statistical difference");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  291|      1|	object_class->build = vips_stdif_build;
  292|       |
  293|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  294|      1|		_("Input"),
  295|      1|		_("Input image"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsStdif, in));
  298|       |
  299|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  300|      1|		_("Output"),
  301|      1|		_("Output image"),
  302|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  303|      1|		G_STRUCT_OFFSET(VipsStdif, out));
  304|       |
  305|       |	/* Windows larger than 256x256 will overflow sum2, see above.
  306|       |	 */
  307|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  308|      1|		_("Width"),
  309|      1|		_("Window width in pixels"),
  310|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsStdif, width),
  312|      1|		1, 256, 11);
  313|       |
  314|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  315|      1|		_("Height"),
  316|      1|		_("Window height in pixels"),
  317|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsStdif, height),
  319|      1|		1, 256, 11);
  320|       |
  321|      1|	VIPS_ARG_DOUBLE(class, "a", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  322|      1|		_("Mean weight"),
  323|      1|		_("Weight of new mean"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsStdif, a),
  326|      1|		0.0, 1.0, 0.5);
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "m0", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Mean"),
  330|      1|		_("New mean"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsStdif, m0),
  333|      1|		-INFINITY, INFINITY, 128);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "b", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Deviation weight"),
  337|      1|		_("Weight of new deviation"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsStdif, b),
  340|      1|		0.0, 2.0, 0.5);
  341|       |
  342|      1|	VIPS_ARG_DOUBLE(class, "s0", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  343|      1|		_("Deviation"),
  344|      1|		_("New deviation"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsStdif, s0),
  347|      1|		-INFINITY, INFINITY, 50);
  348|      1|}

vips_buf_rewind:
   96|  12.8k|{
   97|  12.8k|	buf->i = 0;
   98|  12.8k|	buf->lasti = 0;
   99|  12.8k|	buf->full = FALSE;
  ------------------
  |  |  794|  12.8k|#define	FALSE	(0)
  ------------------
  100|       |
  101|  12.8k|	if (buf->base)
  ------------------
  |  Branch (101:6): [True: 12.8k, False: 0]
  ------------------
  102|  12.8k|		buf->base[0] = '\0';
  103|  12.8k|}
vips_buf_appendns:
  257|  1.10M|{
  258|  1.10M|	int len;
  259|  1.10M|	int n;
  260|  1.10M|	int avail;
  261|  1.10M|	int cpy;
  262|       |
  263|  1.10M|	if (buf->full)
  ------------------
  |  Branch (263:6): [True: 877k, False: 229k]
  ------------------
  264|   877k|		return FALSE;
  ------------------
  |  |  794|   877k|#define	FALSE	(0)
  ------------------
  265|   229k|	if (!str)
  ------------------
  |  Branch (265:6): [True: 0, False: 229k]
  ------------------
  266|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  267|       |
  268|       |	/* Amount we want to copy.
  269|       |	 */
  270|   229k|	len = strlen(str);
  271|   229k|	if (sz >= 0)
  ------------------
  |  Branch (271:6): [True: 0, False: 229k]
  ------------------
  272|      0|		n = VIPS_MIN(sz, len);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  273|   229k|	else
  274|   229k|		n = len;
  275|       |
  276|       |	/* Space available.
  277|       |	 */
  278|   229k|	avail = buf->mx - buf->i - 4;
  279|       |
  280|   229k|	cpy = VIPS_MIN(n, avail);
  ------------------
  |  |   55|   229k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 229k, False: 636]
  |  |  ------------------
  ------------------
  281|       |
  282|       |	/* Can't use g_strlcpy() here, we don't want to drop the end of the
  283|       |	 * string.
  284|       |	 *
  285|       |	 * gcc10.3 (I think?) issues a false-positive warning about this.
  286|       |	 */
  287|   229k|	strncpy(buf->base + buf->i, str, cpy);
  288|   229k|	buf->i += cpy;
  289|       |
  290|   229k|	if (buf->i >= buf->mx - 4) {
  ------------------
  |  Branch (290:6): [True: 636, False: 229k]
  ------------------
  291|    636|		buf->full = TRUE;
  ------------------
  |  |  798|    636|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    636|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  292|    636|		strcpy(buf->base + buf->mx - 4, "...");
  293|    636|		buf->i = buf->mx - 1;
  294|    636|		return FALSE;
  ------------------
  |  |  794|    636|#define	FALSE	(0)
  ------------------
  295|    636|	}
  296|       |
  297|   229k|	return TRUE;
  ------------------
  |  |  798|   229k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   229k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  298|   229k|}
vips_buf_appends:
  311|  1.10M|{
  312|  1.10M|	return vips_buf_appendns(buf, str, -1);
  313|  1.10M|}
vips_buf_vappendf:
  413|  2.47M|{
  414|  2.47M|	int avail;
  415|  2.47M|	char *p;
  416|       |
  417|  2.47M|	if (buf->full)
  ------------------
  |  Branch (417:6): [True: 1.75M, False: 715k]
  ------------------
  418|  1.75M|		return FALSE;
  ------------------
  |  |  794|  1.75M|#define	FALSE	(0)
  ------------------
  419|       |
  420|   715k|	avail = buf->mx - buf->i - 4;
  421|   715k|	p = buf->base + buf->i;
  422|   715k|	(void) g_vsnprintf(p, avail, fmt, ap);
  423|   715k|	buf->i += strlen(p);
  424|       |
  425|   715k|	if (buf->i >= buf->mx - 4) {
  ------------------
  |  Branch (425:6): [True: 0, False: 715k]
  ------------------
  426|      0|		buf->full = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  427|      0|		strcpy(buf->base + buf->mx - 4, "...");
  428|      0|		buf->i = buf->mx - 1;
  429|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  430|      0|	}
  431|       |
  432|   715k|	return TRUE;
  ------------------
  |  |  798|   715k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   715k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  433|   715k|}
vips_buf_appendf:
  447|  1.36M|{
  448|  1.36M|	va_list ap;
  449|  1.36M|	gboolean result;
  450|       |
  451|  1.36M|	va_start(ap, fmt);
  452|  1.36M|	result = vips_buf_vappendf(buf, fmt, ap);
  453|  1.36M|	va_end(ap);
  454|       |
  455|  1.36M|	return result;
  456|  1.36M|}
vips_buf_all:
  724|   266k|{
  725|   266k|	buf->base[buf->i] = '\0';
  726|       |
  727|   266k|	return buf->base;
  728|   266k|}

vips_buffer_done:
  368|  56.2k|{
  369|  56.2k|	VipsImage *im = buffer->im;
  370|  56.2k|	VipsBufferCache *cache;
  371|       |
  372|  56.2k|	if (!buffer->done &&
  ------------------
  |  Branch (372:6): [True: 56.2k, False: 0]
  ------------------
  373|  56.2k|		(cache = buffer_cache_get(im))) {
  ------------------
  |  Branch (373:3): [True: 56.2k, False: 0]
  ------------------
  374|  56.2k|		g_assert(!g_slist_find(cache->buffers, buffer));
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|  56.2k|		g_assert(!buffer->cache);
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|       |
  377|  56.2k|		buffer->done = TRUE;
  ------------------
  |  |  798|  56.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  56.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  378|  56.2k|		buffer->cache = cache;
  379|       |
  380|  56.2k|		cache->buffers = g_slist_prepend(cache->buffers, buffer);
  381|       |
  382|       |#ifdef DEBUG_VERBOSE
  383|       |		printf("vips_buffer_done: thread %p adding buffer %p to cache %p\n",
  384|       |			g_thread_self(), buffer, cache);
  385|       |		vips_buffer_print(buffer);
  386|       |#endif /*DEBUG_VERBOSE*/
  387|  56.2k|	}
  388|  56.2k|}
vips_buffer_undone:
  394|   613k|{
  395|   613k|	if (buffer->done) {
  ------------------
  |  Branch (395:6): [True: 56.2k, False: 557k]
  ------------------
  396|  56.2k|		VipsBufferCache *cache = buffer->cache;
  397|       |
  398|       |#ifdef DEBUG_VERBOSE
  399|       |		printf("vips_buffer_undone: thread %p removing "
  400|       |			   "buffer %p from cache %p\n",
  401|       |			g_thread_self(), buffer, cache);
  402|       |#endif /*DEBUG_VERBOSE*/
  403|       |
  404|  56.2k|		g_assert(cache->thread == g_thread_self());
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|  56.2k|		g_assert(cache->buffer_thread->thread == cache->thread);
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|  56.2k|		g_assert(g_slist_find(cache->buffers, buffer));
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  407|  56.2k|		g_assert(buffer_thread_get());
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  56.2k|		g_assert(cache->buffer_thread == buffer_thread_get());
  ------------------
  |  |  166|  56.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|       |
  410|  56.2k|		cache->buffers = g_slist_remove(cache->buffers, buffer);
  411|  56.2k|		buffer->done = FALSE;
  ------------------
  |  |  794|  56.2k|#define	FALSE	(0)
  ------------------
  412|       |
  413|       |#ifdef DEBUG_VERBOSE
  414|       |		printf("vips_buffer_undone: %d buffers left\n",
  415|       |			g_slist_length(cache->buffers));
  416|       |#endif /*DEBUG_VERBOSE*/
  417|  56.2k|	}
  418|       |
  419|   613k|	buffer->cache = NULL;
  420|   613k|	buffer->area.width = 0;
  421|   613k|	buffer->area.height = 0;
  422|   613k|}
vips_buffer_unref:
  426|   282k|{
  427|       |#ifdef DEBUG_VERBOSE
  428|       |	printf("** vips_buffer_unref: left = %d, top = %d, "
  429|       |		   "width = %d, height = %d (%p)\n",
  430|       |		buffer->area.left, buffer->area.top,
  431|       |		buffer->area.width, buffer->area.height,
  432|       |		buffer);
  433|       |#endif /*DEBUG_VERBOSE*/
  434|       |
  435|   282k|	g_assert(buffer->ref_count > 0);
  ------------------
  |  |  166|   282k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   282k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   282k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|       |
  437|   282k|	buffer->ref_count -= 1;
  438|       |
  439|   282k|	if (buffer->ref_count == 0) {
  ------------------
  |  Branch (439:6): [True: 282k, False: 0]
  ------------------
  440|   282k|		VipsBufferCache *cache;
  441|       |
  442|       |#ifdef DEBUG_VERBOSE
  443|       |		if (!buffer->done)
  444|       |			printf("vips_buffer_unref: buffer was not done\n");
  445|       |#endif /*DEBUG_VERBOSE*/
  446|       |
  447|   282k|		vips_buffer_undone(buffer);
  448|       |
  449|       |		/* Place on this thread's reserve list for reuse.
  450|       |		 */
  451|   282k|		if ((cache = buffer_cache_get(buffer->im)) &&
  ------------------
  |  Branch (451:7): [True: 266k, False: 16.0k]
  ------------------
  452|   282k|			cache->n_reserve < buffer_cache_max_reserve) {
  ------------------
  |  Branch (452:4): [True: 182k, False: 83.6k]
  ------------------
  453|   182k|			g_assert(!buffer->cache);
  ------------------
  |  |  166|   182k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   182k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   182k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|   182k|			cache->reserve =
  456|   182k|				g_slist_prepend(cache->reserve, buffer);
  457|   182k|			cache->n_reserve += 1;
  458|       |
  459|   182k|			buffer->cache = cache;
  460|   182k|			buffer->area.width = 0;
  461|   182k|			buffer->area.height = 0;
  462|   182k|		}
  463|  99.6k|		else
  464|  99.6k|			vips_buffer_free(buffer);
  465|   282k|	}
  466|   282k|}
vips_buffer_new:
  512|   282k|{
  513|   282k|	VipsBufferCache *cache;
  514|   282k|	VipsBuffer *buffer;
  515|       |
  516|   282k|	if ((cache = buffer_cache_get(im)) &&
  ------------------
  |  Branch (516:6): [True: 267k, False: 14.8k]
  ------------------
  517|   282k|		cache->reserve) {
  ------------------
  |  Branch (517:3): [True: 52.4k, False: 214k]
  ------------------
  518|  52.4k|		buffer = (VipsBuffer *) cache->reserve->data;
  519|  52.4k|		cache->reserve = g_slist_remove(cache->reserve, buffer);
  520|  52.4k|		cache->n_reserve -= 1;
  521|       |
  522|  52.4k|		g_assert(buffer->im == im);
  ------------------
  |  |  166|  52.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  52.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  52.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|  52.4k|		g_assert(buffer->done == FALSE);
  ------------------
  |  |  166|  52.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  52.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  52.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|  52.4k|		g_assert(buffer->cache);
  ------------------
  |  |  166|  52.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  52.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  52.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  525|       |
  526|  52.4k|		buffer->ref_count = 1;
  527|  52.4k|		buffer->done = FALSE;
  ------------------
  |  |  794|  52.4k|#define	FALSE	(0)
  ------------------
  528|  52.4k|		buffer->cache = NULL;
  529|  52.4k|	}
  530|   229k|	else {
  531|   229k|		buffer = g_new0(VipsBuffer, 1);
  ------------------
  |  |  299|   229k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|   229k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   229k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   229k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   229k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   229k|	  gpointer __p;						\
  |  |  |  |  231|   229k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 229k]
  |  |  |  |  ------------------
  |  |  |  |  232|   229k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   229k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 229k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   229k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 229k]
  |  |  |  |  |  Branch (234:26): [True: 229k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   229k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   229k|	  else							\
  |  |  |  |  237|   229k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   229k|	  __p;							\
  |  |  |  |  239|   229k|	}))
  |  |  ------------------
  ------------------
  532|   229k|		buffer->ref_count = 1;
  533|   229k|		buffer->im = im;
  534|   229k|		buffer->done = FALSE;
  ------------------
  |  |  794|   229k|#define	FALSE	(0)
  ------------------
  535|   229k|		buffer->cache = NULL;
  536|   229k|		buffer->buf = NULL;
  537|   229k|		buffer->bsize = 0;
  538|       |
  539|       |#ifdef DEBUG
  540|       |		g_mutex_lock(&vips__global_lock);
  541|       |		vips__buffer_all =
  542|       |			g_slist_prepend(vips__buffer_all, buffer);
  543|       |		g_mutex_unlock(&vips__global_lock);
  544|       |#endif /*DEBUG*/
  545|   229k|	}
  546|       |
  547|   282k|	if (buffer_move(buffer, area)) {
  ------------------
  |  Branch (547:6): [True: 0, False: 282k]
  ------------------
  548|      0|		vips_buffer_free(buffer);
  549|      0|		return NULL;
  550|      0|	}
  551|       |
  552|   282k|	return buffer;
  553|   282k|}
vips_buffer_unref_ref:
  621|   316k|{
  622|   316k|	VipsBuffer *buffer;
  623|       |
  624|   316k|	g_assert(!old_buffer ||
  ------------------
  |  |  166|   316k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   316k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   316k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|   316k|		old_buffer->im == im);
  626|       |
  627|       |	/* Is the current buffer OK?
  628|       |	 */
  629|   316k|	if (old_buffer &&
  ------------------
  |  Branch (629:6): [True: 34.2k, False: 282k]
  ------------------
  630|   316k|		vips_rect_includesrect(&old_buffer->area, area))
  ------------------
  |  Branch (630:3): [True: 0, False: 34.2k]
  ------------------
  631|      0|		return old_buffer;
  632|       |
  633|       |	/* Does the new area already have a buffer?
  634|       |	 */
  635|   316k|	if ((buffer = buffer_find(im, area))) {
  ------------------
  |  Branch (635:6): [True: 0, False: 316k]
  ------------------
  636|      0|		VIPS_FREEF(vips_buffer_unref, old_buffer);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|      0|		return buffer;
  638|      0|	}
  639|       |
  640|       |	/* Is the current buffer unshared? We can just move it.
  641|       |	 */
  642|   316k|	if (old_buffer &&
  ------------------
  |  Branch (642:6): [True: 34.2k, False: 282k]
  ------------------
  643|   316k|		old_buffer->ref_count == 1) {
  ------------------
  |  Branch (643:3): [True: 34.2k, False: 0]
  ------------------
  644|  34.2k|		if (buffer_move(old_buffer, area)) {
  ------------------
  |  Branch (644:7): [True: 0, False: 34.2k]
  ------------------
  645|      0|			vips_buffer_unref(old_buffer);
  646|      0|			return NULL;
  647|      0|		}
  648|       |
  649|  34.2k|		return old_buffer;
  650|  34.2k|	}
  651|       |
  652|       |	/* Fallback ... unref the old one, make a new one.
  653|       |	 */
  654|   316k|	VIPS_FREEF(vips_buffer_unref, old_buffer);
  ------------------
  |  |   41|   282k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   282k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   282k|	{ \
  |  |   43|   282k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 282k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   282k|	} \
  |  |   48|   316k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   316k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|   282k|	if (!(buffer = vips_buffer_new(im, area)))
  ------------------
  |  Branch (655:6): [True: 0, False: 282k]
  ------------------
  656|      0|		return NULL;
  657|       |
  658|   282k|	return buffer;
  659|   282k|}
vips__buffer_init:
  677|      2|{
  678|      2|	if (buffer_cache_max_reserve < 1)
  ------------------
  |  Branch (678:6): [Folded - Ignored]
  ------------------
  679|      0|		printf("vips__buffer_init: buffer reserve disabled\n");
  680|       |
  681|       |#ifdef DEBUG
  682|       |	printf("vips__buffer_init: DEBUG enabled\n");
  683|       |#endif /*DEBUG*/
  684|       |
  685|       |#ifdef DEBUG_CREATE
  686|       |	printf("vips__buffer_init: DEBUG_CREATE enabled\n");
  687|       |#endif /*DEBUG_CREATE*/
  688|      2|}
vips__buffer_shutdown:
  692|  55.6k|{
  693|  55.6k|	VipsBufferThread *buffer_thread;
  694|       |
  695|  55.6k|	if ((buffer_thread = g_private_get(&buffer_thread_key))) {
  ------------------
  |  Branch (695:6): [True: 25.9k, False: 29.7k]
  ------------------
  696|  25.9k|		buffer_thread_free(buffer_thread);
  697|  25.9k|		g_private_set(&buffer_thread_key, NULL);
  698|  25.9k|	}
  699|  55.6k|}
buffer.c:buffer_cache_get:
  345|   936k|{
  346|   936k|	VipsBufferThread *buffer_thread;
  347|   936k|	VipsBufferCache *cache;
  348|       |
  349|   936k|	if ((buffer_thread = buffer_thread_get())) {
  ------------------
  |  Branch (349:6): [True: 891k, False: 45.7k]
  ------------------
  350|   891k|		if (!(cache = (VipsBufferCache *)
  ------------------
  |  Branch (350:7): [True: 135k, False: 755k]
  ------------------
  351|   891k|					g_hash_table_lookup(buffer_thread->hash, im))) {
  352|   135k|			cache = buffer_cache_new(buffer_thread, im);
  353|   135k|			g_hash_table_insert(buffer_thread->hash, im, cache);
  354|   135k|		}
  355|       |
  356|   891k|		g_assert(cache->thread == g_thread_self());
  ------------------
  |  |  166|   891k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   891k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   891k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|   891k|	}
  358|  45.7k|	else
  359|  45.7k|		cache = NULL;
  360|       |
  361|   936k|	return cache;
  362|   936k|}
buffer.c:buffer_thread_get:
  318|   936k|{
  319|   936k|	VipsBufferThread *buffer_thread;
  320|       |
  321|   936k|	if (vips_thread_isvips()) {
  ------------------
  |  Branch (321:6): [True: 891k, False: 45.7k]
  ------------------
  322|       |		/* Our threads get a set of private buffers, since we know we
  323|       |		 * will be calling vips_thread_shutdown() on thread
  324|       |		 * termination.
  325|       |		 */
  326|   891k|		if (!(buffer_thread = g_private_get(&buffer_thread_key))) {
  ------------------
  |  Branch (326:7): [True: 25.9k, False: 865k]
  ------------------
  327|  25.9k|			buffer_thread = buffer_thread_new();
  328|  25.9k|			g_private_set(&buffer_thread_key, buffer_thread);
  329|  25.9k|		}
  330|       |
  331|   891k|		g_assert(buffer_thread->thread == g_thread_self());
  ------------------
  |  |  166|   891k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   891k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   891k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|   891k|	}
  333|  45.7k|	else
  334|       |		/* Non-vips threads don't have one.
  335|       |		 */
  336|  45.7k|		buffer_thread = NULL;
  337|       |
  338|   936k|	return buffer_thread;
  339|   936k|}
buffer.c:buffer_thread_new:
  302|  25.9k|{
  303|  25.9k|	VipsBufferThread *buffer_thread;
  304|       |
  305|  25.9k|	buffer_thread = g_new(VipsBufferThread, 1);
  ------------------
  |  |  282|  25.9k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  25.9k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  25.9k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  25.9k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  25.9k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  25.9k|	  gpointer __p;						\
  |  |  |  |  231|  25.9k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 25.9k]
  |  |  |  |  ------------------
  |  |  |  |  232|  25.9k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  25.9k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  25.9k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 25.9k]
  |  |  |  |  |  Branch (234:26): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  25.9k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  25.9k|	  else							\
  |  |  |  |  237|  25.9k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  25.9k|	  __p;							\
  |  |  |  |  239|  25.9k|	}))
  |  |  ------------------
  ------------------
  306|  25.9k|	buffer_thread->hash = g_hash_table_new_full(
  307|  25.9k|		g_direct_hash, g_direct_equal,
  308|  25.9k|		NULL, (GDestroyNotify) buffer_cache_free);
  309|  25.9k|	buffer_thread->thread = g_thread_self();
  310|       |
  311|  25.9k|	return buffer_thread;
  312|  25.9k|}
buffer.c:buffer_cache_free:
  233|   135k|{
  234|   135k|	GSList *p;
  235|       |
  236|       |#ifdef DEBUG_CREATE
  237|       |	g_mutex_lock(&vips__global_lock);
  238|       |	vips__buffer_cache_all =
  239|       |		g_slist_remove(vips__buffer_cache_all, cache);
  240|       |	g_mutex_unlock(&vips__global_lock);
  241|       |
  242|       |	printf("buffer_cache_free: freeing cache %p on thread %p\n",
  243|       |		cache, g_thread_self());
  244|       |	printf("\t(%d caches left)\n",
  245|       |		g_slist_length(vips__buffer_cache_all));
  246|       |#endif /*DEBUG_CREATE*/
  247|       |
  248|       |	/* Need to mark undone so we don't try and take them off this cache on
  249|       |	 * unref.
  250|       |	 */
  251|   135k|	for (p = cache->buffers; p; p = p->next) {
  ------------------
  |  Branch (251:27): [True: 0, False: 135k]
  ------------------
  252|      0|		VipsBuffer *buffer = (VipsBuffer *) p->data;
  253|       |
  254|      0|		g_assert(buffer->done);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      0|		g_assert(buffer->cache == cache);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|       |
  257|      0|		buffer->done = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  258|      0|		buffer->cache = NULL;
  259|      0|	}
  260|   135k|	VIPS_FREEF(g_slist_free, cache->buffers);
  ------------------
  |  |   41|   135k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   135k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   135k|	{ \
  |  |   43|   135k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 135k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   135k|	} \
  |  |   48|   135k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   135k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|       |
  262|   265k|	for (p = cache->reserve; p; p = p->next) {
  ------------------
  |  Branch (262:27): [True: 130k, False: 135k]
  ------------------
  263|   130k|		VipsBuffer *buffer = (VipsBuffer *) p->data;
  264|       |
  265|   130k|		vips_buffer_free(buffer);
  266|   130k|	}
  267|   135k|	VIPS_FREEF(g_slist_free, cache->reserve);
  ------------------
  |  |   41|   135k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   135k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   135k|	{ \
  |  |   43|   135k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 123k, False: 12.3k]
  |  |  ------------------
  |  |   44|   123k|			(void) F((S)); \
  |  |   45|   123k|			(S) = 0; \
  |  |   46|   123k|		} \
  |  |   47|   135k|	} \
  |  |   48|   135k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   135k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|       |
  269|   135k|	g_free(cache);
  270|   135k|}
buffer.c:buffer_cache_new:
  274|   135k|{
  275|   135k|	VipsBufferCache *cache;
  276|       |
  277|   135k|	cache = g_new(VipsBufferCache, 1);
  ------------------
  |  |  282|   135k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   135k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   135k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   135k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   135k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   135k|	  gpointer __p;						\
  |  |  |  |  231|   135k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 135k]
  |  |  |  |  ------------------
  |  |  |  |  232|   135k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   135k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 135k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   135k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 135k]
  |  |  |  |  |  Branch (234:26): [True: 135k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   135k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   135k|	  else							\
  |  |  |  |  237|   135k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   135k|	  __p;							\
  |  |  |  |  239|   135k|	}))
  |  |  ------------------
  ------------------
  278|   135k|	cache->buffers = NULL;
  279|   135k|	cache->thread = g_thread_self();
  280|   135k|	cache->im = im;
  281|   135k|	cache->buffer_thread = buffer_thread;
  282|   135k|	cache->reserve = NULL;
  283|   135k|	cache->n_reserve = 0;
  284|       |
  285|       |#ifdef DEBUG_CREATE
  286|       |	g_mutex_lock(&vips__global_lock);
  287|       |	vips__buffer_cache_all =
  288|       |		g_slist_prepend(vips__buffer_cache_all, cache);
  289|       |	g_mutex_unlock(&vips__global_lock);
  290|       |
  291|       |	printf("buffer_cache_new: new cache %p for thread %p on image %p\n",
  292|       |		cache, g_thread_self(), im);
  293|       |	printf("\t(%d caches now)\n",
  294|       |		g_slist_length(vips__buffer_cache_all));
  295|       |#endif /*DEBUG_CREATE*/
  296|       |
  297|   135k|	return cache;
  298|   135k|}
buffer.c:vips_buffer_free:
  203|   229k|{
  204|   229k|	VIPS_FREEF(vips_tracked_aligned_free, buffer->buf);
  ------------------
  |  |   41|   229k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   229k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   229k|	{ \
  |  |   43|   229k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 229k, False: 0]
  |  |  ------------------
  |  |   44|   229k|			(void) F((S)); \
  |  |   45|   229k|			(S) = 0; \
  |  |   46|   229k|		} \
  |  |   47|   229k|	} \
  |  |   48|   229k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   229k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|   229k|	buffer->bsize = 0;
  206|   229k|	g_free(buffer);
  207|       |
  208|       |#ifdef DEBUG
  209|       |	g_mutex_lock(&vips__global_lock);
  210|       |
  211|       |	g_assert(g_slist_find(vips__buffer_all, buffer));
  212|       |	vips__buffer_all = g_slist_remove(vips__buffer_all, buffer);
  213|       |
  214|       |	g_mutex_unlock(&vips__global_lock);
  215|       |#endif /*DEBUG*/
  216|       |
  217|       |#ifdef DEBUG_VERBOSE
  218|       |	printf("vips_buffer_free: freeing buffer %p\n", buffer);
  219|       |#endif /*DEBUG_VERBOSE*/
  220|   229k|}
buffer.c:buffer_move:
  470|   316k|{
  471|   316k|	VipsImage *im = buffer->im;
  472|   316k|	size_t new_bsize;
  473|   316k|	size_t align;
  474|       |
  475|   316k|	g_assert(buffer->ref_count == 1);
  ------------------
  |  |  166|   316k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   316k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   316k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|       |
  477|   316k|	vips_buffer_undone(buffer);
  478|   316k|	g_assert(!buffer->done);
  ------------------
  |  |  166|   316k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   316k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   316k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|       |
  480|   316k|	buffer->area = *area;
  481|       |
  482|   316k|	new_bsize = (size_t) VIPS_IMAGE_SIZEOF_PEL(im) *
  ------------------
  |  |  384|   316k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   316k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  483|   316k|		area->width * area->height;
  484|       |
  485|       |	/* Need to pad buffer size to be aligned-up to
  486|       |	 * 64 bytes for the vips_reduce{h,v} highway path.
  487|       |	 */
  488|   316k|#ifdef HAVE_HWY
  489|   316k|	if (im->BandFmt == VIPS_FORMAT_UCHAR) {
  ------------------
  |  Branch (489:6): [True: 183k, False: 133k]
  ------------------
  490|   183k|		new_bsize += /*HWY_ALIGNMENT*/ 64 - 1;
  491|   183k|		align = /*HWY_ALIGNMENT*/ 64;
  492|   183k|	}
  493|   133k|	else
  494|   133k|#endif /*HAVE_HWY*/
  495|   133k|		align = 16;
  496|       |
  497|   316k|	if (buffer->bsize < new_bsize ||
  ------------------
  |  Branch (497:6): [True: 229k, False: 86.6k]
  ------------------
  498|   316k|		!buffer->buf) {
  ------------------
  |  Branch (498:3): [True: 0, False: 86.6k]
  ------------------
  499|   229k|		buffer->bsize = new_bsize;
  500|   229k|		VIPS_FREEF(vips_tracked_aligned_free, buffer->buf);
  ------------------
  |  |   41|   229k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   229k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   229k|	{ \
  |  |   43|   229k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 229k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   229k|	} \
  |  |   48|   229k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   229k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|   229k|		if (!(buffer->buf = vips_tracked_aligned_alloc(buffer->bsize, align)))
  ------------------
  |  Branch (501:7): [True: 0, False: 229k]
  ------------------
  502|      0|			return -1;
  503|   229k|	}
  504|       |
  505|   316k|	return 0;
  506|   316k|}
buffer.c:buffer_find:
  560|   316k|{
  561|   316k|	VipsBufferCache *cache;
  562|   316k|	VipsBuffer *buffer;
  563|   316k|	GSList *p;
  564|   316k|	VipsRect *area;
  565|       |
  566|   316k|	if (!(cache = buffer_cache_get(im)))
  ------------------
  |  Branch (566:6): [True: 14.8k, False: 301k]
  ------------------
  567|  14.8k|		return NULL;
  568|       |
  569|       |	/* This needs to be quick :-( don't use
  570|       |	 * vips_slist_map2()/vips_rect_includesrect(), do the search
  571|       |	 * inline.
  572|       |	 *
  573|       |	 * FIXME we return the first enclosing buffer, perhaps we should
  574|       |	 * search for the largest?
  575|       |	 */
  576|   335k|	for (p = cache->buffers; p; p = p->next) {
  ------------------
  |  Branch (576:27): [True: 34.2k, False: 301k]
  ------------------
  577|  34.2k|		buffer = (VipsBuffer *) p->data;
  578|  34.2k|		area = &buffer->area;
  579|       |
  580|  34.2k|		if (area->left <= r->left &&
  ------------------
  |  Branch (580:7): [True: 34.2k, False: 0]
  ------------------
  581|  34.2k|			area->top <= r->top &&
  ------------------
  |  Branch (581:4): [True: 34.2k, False: 0]
  ------------------
  582|  34.2k|			area->left + area->width >= r->left + r->width &&
  ------------------
  |  Branch (582:4): [True: 34.2k, False: 0]
  ------------------
  583|  34.2k|			area->top + area->height >= r->top + r->height) {
  ------------------
  |  Branch (583:4): [True: 0, False: 34.2k]
  ------------------
  584|      0|			buffer->ref_count += 1;
  585|       |
  586|       |#ifdef DEBUG_VERBOSE
  587|       |			printf("buffer_find: left = %d, top = %d, "
  588|       |				   "width = %d, height = %d, count = %d (%p)\n",
  589|       |				buffer->area.left, buffer->area.top,
  590|       |				buffer->area.width, buffer->area.height,
  591|       |				buffer->ref_count,
  592|       |				buffer);
  593|       |#endif /*DEBUG_VERBOSE*/
  594|       |
  595|      0|			return buffer;
  596|      0|		}
  597|  34.2k|	}
  598|       |
  599|   301k|	return NULL;
  600|   301k|}
buffer.c:buffer_thread_free:
  224|  25.9k|{
  225|  25.9k|	VIPS_FREEF(g_hash_table_destroy, buffer_thread->hash);
  ------------------
  |  |   41|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  25.9k|	{ \
  |  |   43|  25.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  ------------------
  |  |   44|  25.9k|			(void) F((S)); \
  |  |   45|  25.9k|			(S) = 0; \
  |  |   46|  25.9k|		} \
  |  |   47|  25.9k|	} \
  |  |   48|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|  25.9k|	VIPS_FREE(buffer_thread);
  ------------------
  |  |   50|  25.9k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  25.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  25.9k|	{ \
  |  |  |  |   43|  25.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  25.9k|			(void) F((S)); \
  |  |  |  |   45|  25.9k|			(S) = 0; \
  |  |  |  |   46|  25.9k|		} \
  |  |  |  |   47|  25.9k|	} \
  |  |  |  |   48|  25.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|  25.9k|}

vips_operation_hash:
  342|   684k|{
  343|   684k|	guint hash;
  344|       |
  345|   684k|	if (operation->found_hash)
  ------------------
  |  Branch (345:6): [True: 391k, False: 293k]
  ------------------
  346|   391k|		hash = operation->hash;
  347|   293k|	else {
  348|       |		/* Include the operation type in the hash.
  349|       |		 */
  350|   293k|		hash = (guint) G_OBJECT_TYPE(operation);
  ------------------
  |  |   95|   293k|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|   293k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|   293k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|   293k|		(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|   293k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   293k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   293k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|   293k|			vips_object_hash_arg, &hash, NULL);
  353|       |
  354|       |		/* Make sure we can't have a zero hash value.
  355|       |		 */
  356|   293k|		hash |= 1;
  357|       |
  358|       |		/* The hash can change up to the moment of construction. After that,
  359|       |		 * it should be fixed.
  360|       |		 */
  361|   293k|		if (VIPS_OBJECT(operation)->constructed) {
  ------------------
  |  |  433|   293k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   293k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   293k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (361:7): [True: 138k, False: 155k]
  ------------------
  362|   138k|			operation->hash = hash;
  363|   138k|			operation->found_hash = TRUE;
  ------------------
  |  |  798|   138k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   138k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  364|   138k|		}
  365|   293k|	}
  366|       |
  367|   684k|	return hash;
  368|   684k|}
vips__cache_once_init:
  473|      2|{
  474|      2|	vips_cache_table = g_hash_table_new(
  475|      2|		(GHashFunc) vips_operation_hash,
  476|      2|		(GEqualFunc) vips_operation_equal);
  477|       |
  478|      2|	return NULL;
  479|      2|}
vips__cache_init:
  483|      2|{
  484|      2|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      2|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  485|       |
  486|      2|	VIPS_ONCE(&once, vips__cache_once_init, NULL);
  ------------------
  |  |   93|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      2|	{ \
  |  |   95|      2|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      2|   else                                         \
  |  |  |  |  |  |  931|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      2|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  242|      2|   (once)->retval : \
  |  |  |  |  243|      2|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      2|	} \
  |  |   98|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|      2|}
vips_cache_operation_buildp:
  884|   155k|{
  885|       |	/* Any flags for this new operation we are building.
  886|       |	 */
  887|   155k|	VipsOperationFlags flags = vips_operation_get_flags(*operation);
  888|       |
  889|   155k|	VipsOperationCacheEntry *hit;
  890|       |
  891|   155k|	g_assert(VIPS_IS_OPERATION(*operation));
  ------------------
  |  |  166|   155k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  892|       |
  893|       |#ifdef VIPS_DEBUG
  894|       |	printf("vips_cache_operation_buildp: %p %s\n",
  895|       |		*operation,
  896|       |		VIPS_OBJECT_GET_CLASS(*operation)->nickname);
  897|       |	vips_object_print_dump(VIPS_OBJECT(*operation));
  898|       |#endif /*VIPS_DEBUG*/
  899|       |
  900|   155k|	g_mutex_lock(&vips_cache_lock);
  901|       |
  902|   155k|	hit = vips_cache_operation_get(*operation);
  903|       |
  904|       |	/* We need to remove the existing cache entry if it's been tagged
  905|       |	 * as invalid, if it's been blocked, or someone has requested
  906|       |	 * revalidation.
  907|       |	 */
  908|   155k|	if (hit) {
  ------------------
  |  Branch (908:6): [True: 11, False: 155k]
  ------------------
  909|     11|		if (hit->invalid ||
  ------------------
  |  Branch (909:7): [True: 0, False: 11]
  ------------------
  910|     11|			(flags & VIPS_OPERATION_BLOCKED) ||
  ------------------
  |  Branch (910:4): [True: 0, False: 11]
  ------------------
  911|     11|			(flags & VIPS_OPERATION_REVALIDATE)) {
  ------------------
  |  Branch (911:4): [True: 0, False: 11]
  ------------------
  912|      0|			vips_cache_remove(hit->operation);
  913|      0|			hit = NULL;
  914|      0|		}
  915|     11|	}
  916|       |
  917|       |	/* If we still have a hit, return that and junk the operation we were
  918|       |	 * passed.
  919|       |	 */
  920|   155k|	if (hit) {
  ------------------
  |  Branch (920:6): [True: 11, False: 155k]
  ------------------
  921|     11|		vips_cache_ref(hit->operation);
  922|     11|		g_object_unref(*operation);
  923|     11|		*operation = hit->operation;
  924|       |
  925|     11|		if (vips__cache_trace) {
  ------------------
  |  Branch (925:7): [True: 0, False: 11]
  ------------------
  926|      0|			printf("vips cache*: ");
  927|      0|			vips_object_print_summary(VIPS_OBJECT(*operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|      0|		}
  929|     11|	}
  930|       |
  931|   155k|	g_mutex_unlock(&vips_cache_lock);
  932|       |
  933|       |	/* If there was a miss, we need to build this operation and add
  934|       |	 * it to the cache, if appropriate.
  935|       |	 */
  936|   155k|	if (!hit) {
  ------------------
  |  Branch (936:6): [True: 155k, False: 11]
  ------------------
  937|   155k|		unsigned int hash_before = 0;
  938|   155k|		VipsOperation *operation_before = NULL;
  939|       |
  940|       |		/* The _build method must not change the object hash. If it does, the
  941|       |		 * finished operation won't detect hits with next identical call.
  942|       |		 */
  943|   155k|		if (vips__leak) {
  ------------------
  |  Branch (943:7): [True: 0, False: 155k]
  ------------------
  944|      0|			hash_before = vips_operation_hash(*operation);
  945|      0|			operation_before = vips_operation_copy(*operation);
  946|      0|		}
  947|       |
  948|   155k|		if (vips_object_build(VIPS_OBJECT(*operation)))
  ------------------
  |  |  433|   155k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   155k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   155k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (948:7): [True: 17.4k, False: 138k]
  ------------------
  949|  17.4k|			return -1;
  950|       |
  951|   138k|		if (vips__leak &&
  ------------------
  |  Branch (951:7): [True: 0, False: 138k]
  ------------------
  952|   138k|			!(flags & VIPS_OPERATION_NOCACHE) &&
  ------------------
  |  Branch (952:4): [True: 0, False: 0]
  ------------------
  953|   138k|			hash_before != vips_operation_hash(*operation)) {
  ------------------
  |  Branch (953:4): [True: 0, False: 0]
  ------------------
  954|      0|			const char *name = (const char *)
  955|      0|				vips_argument_map(VIPS_OBJECT(*operation),
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|      0|					vips_object_equal_arg, operation_before, NULL);
  957|      0|			VipsObject *object = VIPS_OBJECT(*operation);
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  958|      0|			VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|      0|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|       |
  960|      0|			char txt[256];
  961|      0|			VipsBuf buf = VIPS_BUF_STATIC(txt);
  ------------------
  |  |   60|      0|	{ \
  |  |   61|      0|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|      0|	}
  ------------------
  962|       |
  963|      0|			VIPS_UNREF(operation_before);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  964|       |
  965|      0|			vips_object_summary_class(class, &buf);
  966|      0|			vips_buf_appends(&buf, ", ");
  967|      0|			vips_object_summary(object, &buf);
  968|      0|			vips_buf_appends(&buf, ", ");
  969|      0|			vips_error(class->nickname, "arg \"%s\" changed during build, %s",
  970|      0|				name, vips_buf_all(&buf));
  971|       |
  972|      0|			return -1;
  973|      0|		}
  974|       |
  975|   138k|		VIPS_UNREF(operation_before);
  ------------------
  |  |   57|   138k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|   138k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   138k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   138k|	{ \
  |  |  |  |   43|   138k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 138k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   138k|	} \
  |  |  |  |   48|   138k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   138k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  976|       |
  977|       |		/* Retrieve the flags again, as vips_foreign_load_build() may
  978|       |		 * set load->nocache.
  979|       |		 */
  980|   138k|		flags = vips_operation_get_flags(*operation);
  981|       |
  982|   138k|		g_mutex_lock(&vips_cache_lock);
  983|       |
  984|       |		/* If two threads build the same operation at the same time,
  985|       |		 * we can get multiple adds. Let the first one win. See
  986|       |		 * https://github.com/libvips/libvips/pull/181
  987|       |		 */
  988|   138k|		if (!vips_cache_operation_get(*operation)) {
  ------------------
  |  Branch (988:7): [True: 138k, False: 0]
  ------------------
  989|       |			/* Has to be after _build() so we can see output args.
  990|       |			 */
  991|   138k|			if (vips__cache_trace) {
  ------------------
  |  Branch (991:8): [True: 0, False: 138k]
  ------------------
  992|      0|				if (flags & VIPS_OPERATION_NOCACHE)
  ------------------
  |  Branch (992:9): [True: 0, False: 0]
  ------------------
  993|      0|					printf("vips cache : ");
  994|      0|				else
  995|      0|					printf("vips cache+: ");
  996|      0|				vips_object_print_summary(VIPS_OBJECT(*operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|      0|			}
  998|       |
  999|   138k|			if (!(flags & VIPS_OPERATION_NOCACHE))
  ------------------
  |  Branch (999:8): [True: 79.4k, False: 58.7k]
  ------------------
 1000|  79.4k|				vips_cache_insert(*operation);
 1001|   138k|		}
 1002|       |
 1003|   138k|		g_mutex_unlock(&vips_cache_lock);
 1004|   138k|	}
 1005|       |
 1006|   138k|	vips_cache_trim();
 1007|       |
 1008|   138k|	return 0;
 1009|   155k|}
cache.c:vips_object_hash_arg:
  318|  3.22M|{
  319|  3.22M|	unsigned int *hash = (unsigned int *) a;
  320|       |
  321|  3.22M|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (321:6): [True: 2.63M, False: 587k]
  ------------------
  322|  3.22M|		(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (322:3): [True: 2.32M, False: 313k]
  ------------------
  323|  3.22M|		!(argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) &&
  ------------------
  |  Branch (323:3): [True: 2.28M, False: 42.7k]
  ------------------
  324|  3.22M|		argument_instance->assigned) {
  ------------------
  |  Branch (324:3): [True: 486k, False: 1.79M]
  ------------------
  325|   486k|		const char *name = g_param_spec_get_name(pspec);
  326|   486k|		GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|   486k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   486k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   486k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   486k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|   486k|		GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|   486k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  328|       |
  329|   486k|		g_value_init(&value, type);
  330|   486k|		g_object_get_property(G_OBJECT(object), name, &value);
  ------------------
  |  |   51|   486k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   486k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   486k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|   486k|		*hash = (*hash << 1) ^ vips_value_hash(pspec, &value);
  332|   486k|		g_value_unset(&value);
  333|   486k|	}
  334|       |
  335|  3.22M|	return NULL;
  336|  3.22M|}
cache.c:vips_value_hash:
  135|   486k|{
  136|   486k|	GType generic = G_PARAM_SPEC_TYPE(pspec);
  ------------------
  |  |   89|   486k|#define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
  |  |  ------------------
  |  |  |  |  602|   486k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|   486k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|       |
  138|       |	/* Not compile-time constants, so we have to use a set of if()s. Could
  139|       |	 * make a table at run time I guess.
  140|       |	 */
  141|       |
  142|   486k|	if (generic == G_TYPE_PARAM_BOOLEAN)
  ------------------
  |  |   85|   486k|#define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
  ------------------
  |  Branch (142:6): [True: 2.42k, False: 484k]
  ------------------
  143|  2.42k|		return (unsigned int) g_value_get_boolean(value);
  144|   484k|	else if (generic == G_TYPE_PARAM_CHAR)
  ------------------
  |  |   39|   484k|#define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
  ------------------
  |  Branch (144:11): [True: 0, False: 484k]
  ------------------
  145|      0|		return (unsigned int) g_value_get_schar(value);
  146|   484k|	else if (generic == G_TYPE_PARAM_UCHAR)
  ------------------
  |  |   62|   484k|#define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
  ------------------
  |  Branch (146:11): [True: 0, False: 484k]
  ------------------
  147|      0|		return (unsigned int) g_value_get_uchar(value);
  148|   484k|	else if (generic == G_TYPE_PARAM_INT)
  ------------------
  |  |  108|   484k|#define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
  ------------------
  |  Branch (148:11): [True: 89.3k, False: 394k]
  ------------------
  149|  89.3k|		return (unsigned int) g_value_get_int(value);
  150|   394k|	else if (generic == G_TYPE_PARAM_UINT)
  ------------------
  |  |  131|   394k|#define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
  ------------------
  |  Branch (150:11): [True: 0, False: 394k]
  ------------------
  151|      0|		return (unsigned int) g_value_get_uint(value);
  152|   394k|	else if (generic == G_TYPE_PARAM_LONG)
  ------------------
  |  |  154|   394k|#define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
  ------------------
  |  Branch (152:11): [True: 0, False: 394k]
  ------------------
  153|      0|		return (unsigned int) g_value_get_long(value);
  154|   394k|	else if (generic == G_TYPE_PARAM_ULONG)
  ------------------
  |  |  177|   394k|#define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
  ------------------
  |  Branch (154:11): [True: 0, False: 394k]
  ------------------
  155|      0|		return (unsigned int) g_value_get_ulong(value);
  156|   394k|	else if (generic == G_TYPE_PARAM_ENUM)
  ------------------
  |  |  269|   394k|#define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
  ------------------
  |  Branch (156:11): [True: 69.2k, False: 325k]
  ------------------
  157|  69.2k|		return (unsigned int) g_value_get_enum(value);
  158|   325k|	else if (generic == G_TYPE_PARAM_FLAGS)
  ------------------
  |  |  292|   325k|#define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
  ------------------
  |  Branch (158:11): [True: 0, False: 325k]
  ------------------
  159|      0|		return (unsigned int) g_value_get_flags(value);
  160|   325k|	else if (generic == G_TYPE_PARAM_UINT64) {
  ------------------
  |  |  223|   325k|#define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
  ------------------
  |  Branch (160:11): [True: 0, False: 325k]
  ------------------
  161|      0|		guint64 i = g_value_get_uint64(value);
  162|       |
  163|      0|		return g_int64_hash((gint64 *) &i);
  164|      0|	}
  165|   325k|	else if (generic == G_TYPE_PARAM_INT64) {
  ------------------
  |  |  200|   325k|#define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
  ------------------
  |  Branch (165:11): [True: 0, False: 325k]
  ------------------
  166|      0|		gint64 i = g_value_get_int64(value);
  167|       |
  168|      0|		return g_int64_hash(&i);
  169|      0|	}
  170|   325k|	else if (generic == G_TYPE_PARAM_FLOAT) {
  ------------------
  |  |  315|   325k|#define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
  ------------------
  |  Branch (170:11): [True: 0, False: 325k]
  ------------------
  171|      0|		float f = g_value_get_float(value);
  172|       |
  173|      0|		return g_direct_hash((void *) &f);
  174|      0|	}
  175|   325k|	else if (generic == G_TYPE_PARAM_DOUBLE) {
  ------------------
  |  |  338|   325k|#define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
  ------------------
  |  Branch (175:11): [True: 0, False: 325k]
  ------------------
  176|      0|		double d = g_value_get_double(value);
  177|       |
  178|      0|		return g_double_hash(&d);
  179|      0|	}
  180|   325k|	else if (generic == G_TYPE_PARAM_STRING) {
  ------------------
  |  |  361|   325k|#define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
  ------------------
  |  Branch (180:11): [True: 0, False: 325k]
  ------------------
  181|      0|		const char *s = g_value_get_string(value);
  182|       |
  183|      0|		return s ? g_str_hash(s) : 0;
  ------------------
  |  Branch (183:10): [True: 0, False: 0]
  ------------------
  184|      0|	}
  185|   325k|	else if (generic == G_TYPE_PARAM_BOXED) {
  ------------------
  |  |  407|   325k|#define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
  ------------------
  |  Branch (185:11): [True: 51.8k, False: 273k]
  ------------------
  186|  51.8k|		void *p = g_value_get_boxed(value);
  187|       |
  188|  51.8k|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (188:10): [True: 51.8k, False: 0]
  ------------------
  189|  51.8k|	}
  190|   273k|	else if (generic == G_TYPE_PARAM_POINTER) {
  ------------------
  |  |  430|   273k|#define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
  ------------------
  |  Branch (190:11): [True: 0, False: 273k]
  ------------------
  191|      0|		void *p = g_value_get_pointer(value);
  192|       |
  193|      0|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (193:10): [True: 0, False: 0]
  ------------------
  194|      0|	}
  195|   273k|	else if (generic == G_TYPE_PARAM_OBJECT) {
  ------------------
  |  |  482|   273k|#define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
  ------------------
  |  Branch (195:11): [True: 273k, False: 0]
  ------------------
  196|   273k|		void *p = g_value_get_object(value);
  197|       |
  198|   273k|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (198:10): [True: 273k, False: 0]
  ------------------
  199|   273k|	}
  200|      0|	else {
  201|       |		/* Fallback: convert to a string and hash that.
  202|       |		 * This is very slow, print a warning if we use it
  203|       |		 * so we can add another case.
  204|       |		 */
  205|      0|		char *s;
  206|      0|		unsigned int hash;
  207|       |
  208|      0|		s = g_strdup_value_contents(value);
  209|      0|		hash = g_str_hash(s);
  210|       |
  211|      0|		printf("vips_value_hash: no case for %s\n", s);
  212|      0|		printf("\ttype %d, %s\n",
  213|      0|			(int) G_VALUE_TYPE(value),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  214|      0|			g_type_name(G_VALUE_TYPE(value)));
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  215|      0|		printf("\tgeneric %d, %s\n",
  216|      0|			(int) G_VALUE_TYPE(generic),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  217|      0|			g_type_name(generic));
  218|       |
  219|      0|		g_free(s);
  220|       |
  221|      0|		return hash;
  222|      0|	}
  223|   486k|}
cache.c:vips_operation_equal:
  422|   311k|{
  423|   311k|	if (a == b)
  ------------------
  |  Branch (423:6): [True: 311k, False: 35]
  ------------------
  424|   311k|		return TRUE;
  ------------------
  |  |  798|   311k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   311k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  425|       |
  426|     35|	if (G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b) &&
  ------------------
  |  |   95|     35|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|     35|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|     35|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	if (G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b) &&
  ------------------
  |  |   95|     70|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|     35|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|     35|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (426:6): [True: 11, False: 24]
  ------------------
  427|     35|		vips_operation_hash(a) == vips_operation_hash(b) &&
  ------------------
  |  Branch (427:3): [True: 11, False: 0]
  ------------------
  428|     35|		!vips_argument_map(VIPS_OBJECT(a), vips_object_equal_arg, b, NULL))
  ------------------
  |  |  433|     11|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|     11|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     11|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (428:3): [True: 11, False: 0]
  ------------------
  429|     11|		return TRUE;
  ------------------
  |  |  798|     11|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     11|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  430|       |
  431|     24|	return FALSE;
  ------------------
  |  |  794|     24|#define	FALSE	(0)
  ------------------
  432|     35|}
cache.c:vips_cache_remove:
  585|  79.3k|{
  586|  79.3k|	VipsOperationCacheEntry *entry = vips_cache_operation_get(operation);
  587|       |
  588|       |#ifdef DEBUG
  589|       |	printf("vips_cache_remove: ");
  590|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  591|       |#endif /*DEBUG*/
  592|       |
  593|  79.3k|	g_assert(entry);
  ------------------
  |  |  166|  79.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  79.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  79.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|       |
  595|  79.3k|	if (entry->invalidate_id) {
  ------------------
  |  Branch (595:6): [True: 79.3k, False: 0]
  ------------------
  596|  79.3k|		g_signal_handler_disconnect(operation, entry->invalidate_id);
  597|  79.3k|		entry->invalidate_id = 0;
  598|  79.3k|	}
  599|       |
  600|  79.3k|	g_hash_table_remove(vips_cache_table, operation);
  601|  79.3k|	vips_cache_unref(operation);
  602|       |
  603|  79.3k|	g_free(entry);
  604|  79.3k|}
cache.c:vips_cache_unref:
  564|  79.3k|{
  565|       |#ifdef DEBUG
  566|       |	printf("vips_cache_unref: ");
  567|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  568|       |#endif /*DEBUG*/
  569|       |
  570|  79.3k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|  79.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  79.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  79.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|  79.3k|		vips_object_unref_arg, operation, NULL);
  572|  79.3k|	g_object_unref(operation);
  573|  79.3k|}
cache.c:vips_object_unref_arg:
  535|   670k|{
  536|   670k|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (536:6): [True: 512k, False: 158k]
  ------------------
  537|   670k|		(argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (537:3): [True: 96.0k, False: 416k]
  ------------------
  538|   670k|		argument_instance->assigned &&
  ------------------
  |  Branch (538:3): [True: 96.0k, False: 0]
  ------------------
  539|   670k|		G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|  96.0k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  96.0k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  96.0k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  96.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  96.0k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  96.0k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 96.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  96.0k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  96.0k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 96.0k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 79.3k, False: 16.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  96.0k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  79.3k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  79.3k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  96.0k|  else \
  |  |  |  |  |  | 2321|  96.0k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  96.0k|  __r; \
  |  |  |  |  |  | 2323|  96.0k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 79.3k, False: 16.7k]
  |  |  ------------------
  ------------------
  540|  79.3k|		GObject *value;
  541|       |
  542|       |		/* This will up the ref count for us.
  543|       |		 */
  544|  79.3k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|  79.3k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  79.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  79.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|  79.3k|			g_param_spec_get_name(pspec), &value, NULL);
  546|       |
  547|       |		/* This operation is probably going, so we must wipe the operation
  548|       |		 * pointer on the object.
  549|       |		 */
  550|  79.3k|		g_object_set_data(value, "libvips-operation", NULL);
  551|       |
  552|       |		/* Drop the ref we just got, then drop the ref we make when we
  553|       |		 * added to the cache.
  554|       |		 */
  555|  79.3k|		g_object_unref(value);
  556|  79.3k|		g_object_unref(value);
  557|  79.3k|	}
  558|       |
  559|   670k|	return NULL;
  560|   670k|}
cache.c:vips_cache_operation_get:
  577|   525k|{
  578|   525k|	return g_hash_table_lookup(vips_cache_table, operation);
  579|   525k|}
cache.c:vips_cache_ref:
  703|  79.4k|{
  704|       |#ifdef DEBUG
  705|       |	printf("vips_cache_ref: ");
  706|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  707|       |#endif /*DEBUG*/
  708|       |
  709|  79.4k|	g_object_ref(operation);
  710|  79.4k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|  79.4k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  79.4k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  79.4k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|  79.4k|		vips_object_ref_arg, operation, NULL);
  712|       |
  713|  79.4k|	vips_operation_touch(operation);
  714|  79.4k|}
cache.c:vips_object_ref_arg:
  612|   671k|{
  613|   671k|	VipsOperation *operation = VIPS_OPERATION(a);
  ------------------
  |  |   57|   671k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   671k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   671k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   671k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  614|       |
  615|   671k|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (615:6): [True: 513k, False: 158k]
  ------------------
  616|   671k|		(argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (616:3): [True: 96.2k, False: 416k]
  ------------------
  617|   671k|		argument_instance->assigned &&
  ------------------
  |  Branch (617:3): [True: 96.2k, False: 0]
  ------------------
  618|   671k|		G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|  96.2k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  96.2k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  96.2k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  96.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  96.2k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  96.2k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  96.2k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  96.2k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 96.2k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 79.4k, False: 16.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  96.2k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  79.4k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  79.4k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  96.2k|  else \
  |  |  |  |  |  | 2321|  96.2k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  96.2k|  __r; \
  |  |  |  |  |  | 2323|  96.2k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 79.4k, False: 16.8k]
  |  |  ------------------
  ------------------
  619|  79.4k|		GObject *value;
  620|       |
  621|       |		/* This will up the ref count for us.
  622|       |		 */
  623|  79.4k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|  79.4k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  79.4k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  79.4k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|  79.4k|			g_param_spec_get_name(pspec), &value, NULL);
  625|       |
  626|       |		/* This object has been made by this operation.
  627|       |		 */
  628|  79.4k|		g_object_set_data(value, "libvips-operation", operation);
  629|  79.4k|	}
  630|       |
  631|   671k|	return NULL;
  632|   671k|}
cache.c:vips_operation_touch:
  685|  79.4k|{
  686|  79.4k|	vips_cache_time += 1;
  687|       |
  688|       |	/* Touch the operations on the upstream trees on all input images.
  689|       |	 */
  690|  79.4k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|  79.4k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  79.4k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  79.4k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|  79.4k|		vips_object_touch_arg, NULL, NULL);
  692|       |
  693|       |	/* And this operation.
  694|       |	 */
  695|  79.4k|	vips_operation_touch_operation(operation);
  696|  79.4k|}
cache.c:vips_object_touch_arg:
  664|   671k|{
  665|   671k|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (665:6): [True: 513k, False: 158k]
  ------------------
  666|   671k|		(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (666:3): [True: 416k, False: 96.2k]
  ------------------
  667|   671k|		argument_instance->assigned &&
  ------------------
  |  Branch (667:3): [True: 164k, False: 252k]
  ------------------
  668|   671k|		g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  103|   164k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   164k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   164k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   164k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  169|   164k|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  ------------------
  |  Branch (668:3): [True: 62.5k, False: 101k]
  ------------------
  669|  62.5k|		VipsImage *image;
  670|       |
  671|  62.5k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|  62.5k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  62.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  62.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  62.5k|			g_param_spec_get_name(pspec), &image, NULL);
  673|       |
  674|  62.5k|		(void) vips__link_map(image, TRUE,
  ------------------
  |  |  798|  62.5k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  62.5k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  675|  62.5k|			(VipsSListMap2Fn) vips_image_touch_cb, NULL, NULL);
  676|       |
  677|  62.5k|		VIPS_UNREF(image);
  ------------------
  |  |   57|  62.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  62.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  62.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  62.5k|	{ \
  |  |  |  |   43|  62.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 62.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  62.5k|			(void) F((S)); \
  |  |  |  |   45|  62.5k|			(S) = 0; \
  |  |  |  |   46|  62.5k|		} \
  |  |  |  |   47|  62.5k|	} \
  |  |  |  |   48|  62.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  62.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  678|  62.5k|	}
  679|       |
  680|   671k|	return NULL;
  681|   671k|}
cache.c:vips_image_touch_cb:
  648|   132k|{
  649|   132k|	VipsOperation *operation =
  650|   132k|		VIPS_OPERATION(g_object_get_data(G_OBJECT(image), "libvips-operation"));
  ------------------
  |  |   57|   132k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   132k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   132k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   132k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  651|       |
  652|   132k|	if (operation)
  ------------------
  |  Branch (652:6): [True: 73.5k, False: 58.9k]
  ------------------
  653|  73.5k|		vips_operation_touch_operation(operation);
  654|       |
  655|   132k|	return NULL;
  656|   132k|}
cache.c:vips_operation_touch_operation:
  636|   153k|{
  637|   153k|	VipsOperationCacheEntry *entry = vips_cache_operation_get(operation);
  638|       |
  639|       |	/* Don't up the time for invalid items -- we want them to fall out of
  640|       |	 * cache.
  641|       |	 */
  642|   153k|	if (!entry->invalid)
  ------------------
  |  Branch (642:6): [True: 153k, False: 0]
  ------------------
  643|   153k|		entry->time = vips_cache_time;
  644|   153k|}
cache.c:vips_object_equal_arg:
  376|     66|{
  377|     66|	VipsObject *other = (VipsObject *) a;
  378|       |
  379|     66|	const char *name = g_param_spec_get_name(pspec);
  380|     66|	GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|     66|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|     66|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|     66|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|     66|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|     66|	GValue v1 = G_VALUE_INIT;
  ------------------
  |  |  191|     66|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  382|     66|	GValue v2 = G_VALUE_INIT;
  ------------------
  |  |  191|     66|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  383|       |
  384|     66|	gboolean equal;
  385|       |
  386|       |	/* Only test assigned input constructor args. Avoid the nohash args as
  387|       |	 * well.
  388|       |	 */
  389|     66|	if (!(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) ||
  ------------------
  |  Branch (389:6): [True: 22, False: 44]
  ------------------
  390|     66|		!(argument_class->flags & VIPS_ARGUMENT_INPUT) ||
  ------------------
  |  Branch (390:3): [True: 11, False: 33]
  ------------------
  391|     66|		(argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) ||
  ------------------
  |  Branch (391:3): [True: 0, False: 33]
  ------------------
  392|     66|		!argument_instance->assigned)
  ------------------
  |  Branch (392:3): [True: 0, False: 33]
  ------------------
  393|     33|		return NULL;
  394|       |
  395|       |	/* If this is an optional arg, we need to check that this was
  396|       |	 * assigned on @other as well.
  397|       |	 */
  398|     33|	if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (398:6): [True: 11, False: 22]
  ------------------
  399|     33|		!vips_object_argument_isset(other, name))
  ------------------
  |  Branch (399:3): [True: 0, False: 11]
  ------------------
  400|       |		/* Optional and was not set on other ... we've found a
  401|       |		 * difference!
  402|       |		 */
  403|      0|		return (void *) name;
  404|       |
  405|     33|	g_value_init(&v1, type);
  406|     33|	g_value_init(&v2, type);
  407|     33|	g_object_get_property(G_OBJECT(object), name, &v1);
  ------------------
  |  |   51|     33|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|     33|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     33|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|     33|	g_object_get_property(G_OBJECT(other), name, &v2);
  ------------------
  |  |   51|     33|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|     33|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     33|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|     33|	equal = vips_value_equal(pspec, &v1, &v2);
  410|     33|	g_value_unset(&v1);
  411|     33|	g_value_unset(&v2);
  412|       |
  413|       |	/* Stop (return non-NULL) if we've found a difference.
  414|       |	 */
  415|     33|	return !equal ? (void *) name : NULL;
  ------------------
  |  Branch (415:9): [True: 0, False: 33]
  ------------------
  416|     33|}
cache.c:vips_value_equal:
  231|     33|{
  232|     33|	GType generic = G_PARAM_SPEC_TYPE(pspec);
  ------------------
  |  |   89|     33|#define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
  |  |  ------------------
  |  |  |  |  602|     33|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|     33|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|     33|	GType t1 = G_VALUE_TYPE(v1);
  ------------------
  |  |   59|     33|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  234|     33|	GType t2 = G_VALUE_TYPE(v2);
  ------------------
  |  |   59|     33|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  235|       |
  236|     33|	if (t1 != t2)
  ------------------
  |  Branch (236:6): [True: 0, False: 33]
  ------------------
  237|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  238|       |
  239|       |	/* Not compile-time constants, so we have to use a set of if()s. Could
  240|       |	 * make a table at run time I guess.
  241|       |	 */
  242|       |
  243|     33|	if (generic == G_TYPE_PARAM_BOOLEAN)
  ------------------
  |  |   85|     33|#define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
  ------------------
  |  Branch (243:6): [True: 0, False: 33]
  ------------------
  244|      0|		return g_value_get_boolean(v1) == g_value_get_boolean(v2);
  245|     33|	else if (generic == G_TYPE_PARAM_CHAR)
  ------------------
  |  |   39|     33|#define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
  ------------------
  |  Branch (245:11): [True: 0, False: 33]
  ------------------
  246|      0|		return g_value_get_schar(v1) == g_value_get_schar(v2);
  247|     33|	if (generic == G_TYPE_PARAM_UCHAR)
  ------------------
  |  |   62|     33|#define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
  ------------------
  |  Branch (247:6): [True: 0, False: 33]
  ------------------
  248|      0|		return g_value_get_uchar(v1) == g_value_get_uchar(v2);
  249|     33|	if (generic == G_TYPE_PARAM_INT)
  ------------------
  |  |  108|     33|#define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
  ------------------
  |  Branch (249:6): [True: 33, False: 0]
  ------------------
  250|     33|		return g_value_get_int(v1) == g_value_get_int(v2);
  251|      0|	if (generic == G_TYPE_PARAM_UINT)
  ------------------
  |  |  131|      0|#define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
  ------------------
  |  Branch (251:6): [True: 0, False: 0]
  ------------------
  252|      0|		return g_value_get_uint(v1) == g_value_get_uint(v2);
  253|      0|	if (generic == G_TYPE_PARAM_LONG)
  ------------------
  |  |  154|      0|#define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
  ------------------
  |  Branch (253:6): [True: 0, False: 0]
  ------------------
  254|      0|		return g_value_get_long(v1) == g_value_get_long(v2);
  255|      0|	if (generic == G_TYPE_PARAM_ULONG)
  ------------------
  |  |  177|      0|#define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
  ------------------
  |  Branch (255:6): [True: 0, False: 0]
  ------------------
  256|      0|		return g_value_get_ulong(v1) == g_value_get_ulong(v2);
  257|      0|	if (generic == G_TYPE_PARAM_ENUM)
  ------------------
  |  |  269|      0|#define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
  ------------------
  |  Branch (257:6): [True: 0, False: 0]
  ------------------
  258|      0|		return g_value_get_enum(v1) == g_value_get_enum(v2);
  259|      0|	if (generic == G_TYPE_PARAM_FLAGS)
  ------------------
  |  |  292|      0|#define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
  ------------------
  |  Branch (259:6): [True: 0, False: 0]
  ------------------
  260|      0|		return g_value_get_flags(v1) == g_value_get_flags(v2);
  261|      0|	if (generic == G_TYPE_PARAM_UINT64)
  ------------------
  |  |  223|      0|#define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
  ------------------
  |  Branch (261:6): [True: 0, False: 0]
  ------------------
  262|      0|		return g_value_get_uint64(v1) == g_value_get_uint64(v2);
  263|      0|	if (generic == G_TYPE_PARAM_INT64)
  ------------------
  |  |  200|      0|#define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
  ------------------
  |  Branch (263:6): [True: 0, False: 0]
  ------------------
  264|      0|		return g_value_get_int64(v1) == g_value_get_int64(v2);
  265|      0|	if (generic == G_TYPE_PARAM_FLOAT)
  ------------------
  |  |  315|      0|#define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
  ------------------
  |  Branch (265:6): [True: 0, False: 0]
  ------------------
  266|      0|		return g_value_get_float(v1) == g_value_get_float(v2);
  267|      0|	if (generic == G_TYPE_PARAM_DOUBLE)
  ------------------
  |  |  338|      0|#define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
  ------------------
  |  Branch (267:6): [True: 0, False: 0]
  ------------------
  268|      0|		return g_value_get_double(v1) == g_value_get_double(v2);
  269|      0|	if (generic == G_TYPE_PARAM_STRING) {
  ------------------
  |  |  361|      0|#define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
  ------------------
  |  Branch (269:6): [True: 0, False: 0]
  ------------------
  270|      0|		const char *s1 = g_value_get_string(v1);
  271|      0|		const char *s2 = g_value_get_string(v2);
  272|       |
  273|      0|		if (s1 == s2)
  ------------------
  |  Branch (273:7): [True: 0, False: 0]
  ------------------
  274|      0|			return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  275|      0|		else
  276|      0|			return s1 && s2 && strcmp(s1, s2) == 0;
  ------------------
  |  Branch (276:11): [True: 0, False: 0]
  |  Branch (276:17): [True: 0, False: 0]
  |  Branch (276:23): [True: 0, False: 0]
  ------------------
  277|      0|	}
  278|      0|	if (generic == G_TYPE_PARAM_BOXED)
  ------------------
  |  |  407|      0|#define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
  ------------------
  |  Branch (278:6): [True: 0, False: 0]
  ------------------
  279|      0|		return g_value_get_boxed(v1) == g_value_get_boxed(v2);
  280|      0|	if (generic == G_TYPE_PARAM_POINTER)
  ------------------
  |  |  430|      0|#define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
  ------------------
  |  Branch (280:6): [True: 0, False: 0]
  ------------------
  281|      0|		return g_value_get_pointer(v1) == g_value_get_pointer(v2);
  282|      0|	if (generic == G_TYPE_PARAM_OBJECT)
  ------------------
  |  |  482|      0|#define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
  ------------------
  |  Branch (282:6): [True: 0, False: 0]
  ------------------
  283|      0|		return g_value_get_object(v1) == g_value_get_object(v2);
  284|      0|	else {
  285|       |		/* Fallback: convert to a string and compare that.
  286|       |		 * This is very slow, print a warning if we use it
  287|       |		 * so we can add another case.
  288|       |		 */
  289|      0|		char *s1;
  290|      0|		char *s2;
  291|      0|		gboolean equal;
  292|       |
  293|      0|		s1 = g_strdup_value_contents(v1);
  294|      0|		s2 = g_strdup_value_contents(v2);
  295|      0|		equal = strcmp(s1, s2) == 0;
  296|       |
  297|      0|		printf("vips_value_equal: no case for %s, %s\n",
  298|      0|			s1, s2);
  299|      0|		printf("\tt1 %d, %s\n", (int) t1, g_type_name(t1));
  300|      0|		printf("\tt2 %d, %s\n", (int) t2, g_type_name(t2));
  301|      0|		printf("\tgeneric %d, %s\n",
  302|      0|			(int) G_VALUE_TYPE(generic),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  303|      0|			g_type_name(generic));
  304|       |
  305|      0|		g_free(s1);
  306|      0|		g_free(s2);
  307|       |
  308|      0|		return equal;
  309|      0|	}
  310|      0|}
cache.c:vips_cache_insert:
  730|  79.4k|{
  731|  79.4k|	VipsOperationCacheEntry *entry = g_new(VipsOperationCacheEntry, 1);
  ------------------
  |  |  282|  79.4k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  79.4k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  79.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  79.4k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  79.4k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  79.4k|	  gpointer __p;						\
  |  |  |  |  231|  79.4k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 79.4k]
  |  |  |  |  ------------------
  |  |  |  |  232|  79.4k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  79.4k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 79.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  79.4k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 79.4k]
  |  |  |  |  |  Branch (234:26): [True: 79.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  79.4k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  79.4k|	  else							\
  |  |  |  |  237|  79.4k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  79.4k|	  __p;							\
  |  |  |  |  239|  79.4k|	}))
  |  |  ------------------
  ------------------
  732|       |
  733|       |#ifdef VIPS_DEBUG
  734|       |	printf("vips_cache_insert: adding to cache");
  735|       |	vips_object_print_dump(VIPS_OBJECT(operation));
  736|       |#endif /*VIPS_DEBUG*/
  737|       |
  738|  79.4k|	entry->operation = operation;
  739|  79.4k|	entry->time = 0;
  740|  79.4k|	entry->invalidate_id = 0;
  741|  79.4k|	entry->invalid = FALSE;
  ------------------
  |  |  794|  79.4k|#define	FALSE	(0)
  ------------------
  742|       |
  743|  79.4k|	g_hash_table_insert(vips_cache_table, operation, entry);
  744|  79.4k|	vips_cache_ref(operation);
  745|       |
  746|       |	/* If the operation signals "invalidate", we must tag this cache entry
  747|       |	 * for removal.
  748|       |	 */
  749|  79.4k|	entry->invalidate_id = g_signal_connect(operation, "invalidate",
  ------------------
  |  |  491|  79.4k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  750|  79.4k|		G_CALLBACK(vips_cache_invalidate_cb), entry);
  751|  79.4k|}
cache.c:vips_cache_invalidate_cb:
  719|  18.6k|{
  720|       |#ifdef DEBUG
  721|       |	printf("vips_cache_invalidate_cb: ");
  722|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  723|       |#endif /*DEBUG*/
  724|       |
  725|  18.6k|	entry->invalid = TRUE;
  ------------------
  |  |  798|  18.6k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  18.6k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  726|  18.6k|}
cache.c:vips_cache_trim:
  840|   138k|{
  841|   138k|	VipsOperation *operation;
  842|       |
  843|   138k|	g_mutex_lock(&vips_cache_lock);
  844|       |
  845|   217k|	while (vips_cache_table &&
  ------------------
  |  Branch (845:9): [True: 217k, False: 0]
  ------------------
  846|   217k|		(g_hash_table_size(vips_cache_table) > vips_cache_max ||
  ------------------
  |  Branch (846:4): [True: 68.6k, False: 148k]
  ------------------
  847|   217k|			vips_tracked_get_files() > vips_cache_max_files ||
  ------------------
  |  Branch (847:4): [True: 0, False: 148k]
  ------------------
  848|   217k|			vips_tracked_get_mem() > vips_cache_max_mem) &&
  ------------------
  |  Branch (848:4): [True: 10.8k, False: 137k]
  ------------------
  849|   217k|		(operation = vips_cache_get_lru())) {
  ------------------
  |  Branch (849:3): [True: 79.3k, False: 135]
  ------------------
  850|       |#ifdef DEBUG
  851|       |		printf("vips_cache_trim: trimming ");
  852|       |		vips_object_print_summary(VIPS_OBJECT(operation));
  853|       |#endif /*DEBUG*/
  854|       |
  855|  79.3k|		vips_cache_remove(operation);
  856|  79.3k|	}
  857|       |
  858|   138k|	g_mutex_unlock(&vips_cache_lock);
  859|   138k|}
cache.c:vips_cache_get_lru:
  823|  79.4k|{
  824|  79.4k|	VipsOperationCacheEntry *entry;
  825|       |
  826|  79.4k|	entry = NULL;
  827|  79.4k|	g_hash_table_foreach(vips_cache_table,
  828|  79.4k|		(GHFunc) vips_cache_get_lru_cb, &entry);
  829|       |
  830|  79.4k|	if (entry)
  ------------------
  |  Branch (830:6): [True: 79.3k, False: 135]
  ------------------
  831|  79.3k|		return entry->operation;
  832|       |
  833|    135|	return NULL;
  834|  79.4k|}
cache.c:vips_cache_get_lru_cb:
  811|  7.43M|{
  812|  7.43M|	if (!*best ||
  ------------------
  |  Branch (812:6): [True: 79.3k, False: 7.35M]
  ------------------
  813|  7.43M|		(*best)->time > value->time)
  ------------------
  |  Branch (813:3): [True: 278k, False: 7.07M]
  ------------------
  814|   357k|		*best = value;
  815|  7.43M|}

vips_connection_filename:
  156|  31.8k|{
  157|  31.8k|	return connection->filename;
  158|  31.8k|}
vips_connection_nick:
  169|  1.85M|{
  170|  1.85M|	return connection->filename ? connection->filename
  ------------------
  |  Branch (170:9): [True: 0, False: 1.85M]
  ------------------
  171|  1.85M|								: VIPS_OBJECT(connection)->nickname;
  ------------------
  |  |  433|  1.85M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.85M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.85M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|  1.85M|}
connection.c:vips_connection_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|       |
  121|      1|	gobject_class->finalize = vips_connection_finalize;
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	VIPS_ARG_INT(class, "descriptor", 1,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  126|      1|		_("Descriptor"),
  127|      1|		_("File descriptor for read or write"),
  128|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  129|      1|		G_STRUCT_OFFSET(VipsConnection, descriptor),
  130|      1|		-1, 1000000000, 0);
  131|       |
  132|      1|	VIPS_ARG_STRING(class, "filename", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  133|      1|		_("Filename"),
  134|      1|		_("Name of file to open"),
  135|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  136|      1|		G_STRUCT_OFFSET(VipsConnection, filename),
  137|      1|		NULL);
  138|      1|}
connection.c:vips_connection_finalize:
   88|   189k|{
   89|   189k|	VipsConnection *connection = (VipsConnection *) gobject;
   90|       |
   91|       |#ifdef VIPS_DEBUG
   92|       |	VIPS_DEBUG_MSG("vips_connection_finalize: ");
   93|       |	vips_object_print_name(VIPS_OBJECT(gobject));
   94|       |	VIPS_DEBUG_MSG("\n");
   95|       |#endif /*VIPS_DEBUG*/
   96|       |
   97|   189k|	if (connection->tracked_descriptor >= 0) {
  ------------------
  |  Branch (97:6): [True: 0, False: 189k]
  ------------------
   98|      0|		VIPS_DEBUG_MSG("    tracked_close()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      0|		vips_tracked_close(connection->tracked_descriptor);
  100|      0|		connection->tracked_descriptor = -1;
  101|      0|		connection->descriptor = -1;
  102|      0|	}
  103|       |
  104|   189k|	if (connection->close_descriptor >= 0) {
  ------------------
  |  Branch (104:6): [True: 0, False: 189k]
  ------------------
  105|      0|		VIPS_DEBUG_MSG("    close()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      0|		close(connection->close_descriptor);
  107|      0|		connection->close_descriptor = -1;
  108|      0|		connection->descriptor = -1;
  109|      0|	}
  110|       |
  111|   189k|	VIPS_FREE(connection->filename);
  ------------------
  |  |   50|   189k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   189k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   189k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   189k|	{ \
  |  |  |  |   43|   189k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 189k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   189k|	} \
  |  |  |  |   48|   189k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   189k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|       |
  113|   189k|	G_OBJECT_CLASS(vips_connection_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   189k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   189k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   189k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|   189k|}
connection.c:vips_connection_init:
  142|   189k|{
  143|   189k|	connection->descriptor = -1;
  144|   189k|	connection->tracked_descriptor = -1;
  145|   189k|	connection->close_descriptor = -1;
  146|   189k|}

vips_dbuf_minimum_size:
   73|   715k|{
   74|   715k|	if (size > dbuf->allocated_size) {
  ------------------
  |  Branch (74:6): [True: 475k, False: 240k]
  ------------------
   75|   475k|		const size_t new_allocated_size = 3 * (16 + size) / 2;
   76|       |
   77|   475k|		unsigned char *new_data;
   78|       |
   79|   475k|		if (!(new_data =
  ------------------
  |  Branch (79:7): [True: 0, False: 475k]
  ------------------
   80|   475k|					g_try_realloc(dbuf->data, new_allocated_size))) {
   81|      0|			vips_error("VipsDbuf", "%s", _("out of memory"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
   83|      0|		}
   84|       |
   85|   475k|		dbuf->data = new_data;
   86|   475k|		dbuf->allocated_size = new_allocated_size;
   87|   475k|	}
   88|       |
   89|   715k|	return TRUE;
  ------------------
  |  |  798|   715k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   715k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   90|   715k|}
vips_dbuf_allocate:
  103|   478k|{
  104|   478k|	return vips_dbuf_minimum_size(dbuf, dbuf->write_point + size);
  105|   478k|}
vips_dbuf_write:
  172|   478k|{
  173|   478k|	if (!vips_dbuf_allocate(dbuf, size))
  ------------------
  |  Branch (173:6): [True: 0, False: 478k]
  ------------------
  174|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  175|       |
  176|   478k|	memcpy(dbuf->data + dbuf->write_point, data, size);
  177|   478k|	dbuf->write_point += size;
  178|   478k|	dbuf->data_size = VIPS_MAX(dbuf->data_size, dbuf->write_point);
  ------------------
  |  |   54|   478k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 478k]
  |  |  ------------------
  ------------------
  179|       |
  180|   478k|	return TRUE;
  ------------------
  |  |  798|   478k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   478k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  181|   478k|}
vips_dbuf_writef:
  195|   478k|{
  196|   478k|	va_list ap;
  197|       |
  198|   478k|	va_start(ap, fmt);
  199|   478k|	char *line = g_strdup_vprintf(fmt, ap);
  200|   478k|	va_end(ap);
  201|       |
  202|   478k|	if (vips_dbuf_write(dbuf, (unsigned char *) line, strlen(line))) {
  ------------------
  |  Branch (202:6): [True: 478k, False: 0]
  ------------------
  203|   478k|		g_free(line);
  204|   478k|		return FALSE;
  ------------------
  |  |  794|   478k|#define	FALSE	(0)
  ------------------
  205|   478k|	}
  206|      0|	g_free(line);
  207|       |
  208|      0|	return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  209|   478k|}
vips_dbuf_reset:
  277|   237k|{
  278|   237k|	dbuf->write_point = 0;
  279|   237k|	dbuf->data_size = 0;
  280|   237k|}
vips_dbuf_destroy:
  291|   237k|{
  292|   237k|	vips_dbuf_reset(dbuf);
  293|       |
  294|   237k|	VIPS_FREE(dbuf->data);
  ------------------
  |  |   50|   237k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   237k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   237k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   237k|	{ \
  |  |  |  |   43|   237k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 237k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   237k|			(void) F((S)); \
  |  |  |  |   45|   237k|			(S) = 0; \
  |  |  |  |   46|   237k|		} \
  |  |  |  |   47|   237k|	} \
  |  |  |  |   48|   237k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   237k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|   237k|	dbuf->allocated_size = 0;
  296|   237k|}
vips_dbuf_string:
  441|   237k|{
  442|   237k|	vips_dbuf_null_terminate(dbuf);
  443|       |
  444|   237k|	if (size)
  ------------------
  |  Branch (444:6): [True: 0, False: 237k]
  ------------------
  445|      0|		*size = dbuf->data_size;
  446|       |
  447|   237k|	return dbuf->data;
  448|   237k|}
dbuf.c:vips_dbuf_null_terminate:
  387|   237k|{
  388|   237k|	if (!vips_dbuf_minimum_size(dbuf, dbuf->data_size + 1))
  ------------------
  |  Branch (388:6): [True: 0, False: 237k]
  ------------------
  389|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  390|       |
  391|   237k|	dbuf->data[dbuf->data_size] = 0;
  392|       |
  393|   237k|	return TRUE;
  ------------------
  |  |  798|   237k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   237k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  394|   237k|}

vips_error_freeze:
  146|  15.5k|{
  147|  15.5k|	g_mutex_lock(&vips__global_lock);
  148|  15.5k|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  15.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|  15.5k|	vips_error_freeze_count += 1;
  150|  15.5k|	g_mutex_unlock(&vips__global_lock);
  151|  15.5k|}
vips_error_thaw:
  160|  15.5k|{
  161|  15.5k|	g_mutex_lock(&vips__global_lock);
  162|  15.5k|	vips_error_freeze_count -= 1;
  163|  15.5k|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  15.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  15.5k|	g_mutex_unlock(&vips__global_lock);
  165|  15.5k|}
vips_error_buffer:
  179|  11.3k|{
  180|  11.3k|	const char *msg;
  181|       |
  182|  11.3k|	g_mutex_lock(&vips__global_lock);
  183|  11.3k|	msg = vips_buf_all(&vips_error_buf);
  184|  11.3k|	g_mutex_unlock(&vips__global_lock);
  185|       |
  186|  11.3k|	return msg;
  187|  11.3k|}
vips_verror:
  230|  1.10M|{
  231|       |#ifdef VIPS_DEBUG
  232|       |	{
  233|       |		char txt[256];
  234|       |		VipsBuf buf = VIPS_BUF_STATIC(txt);
  235|       |		va_list ap2;
  236|       |
  237|       |		vips_buf_appendf(&buf, "%s: ", domain);
  238|       |		va_copy(ap2, ap);
  239|       |		vips_buf_vappendf(&buf, fmt, ap2);
  240|       |		vips_buf_appends(&buf, "\n");
  241|       |		VIPS_DEBUG_MSG("vips_verror: %s", vips_buf_all(&buf));
  242|       |	}
  243|       |#endif /*VIPS_DEBUG*/
  244|       |
  245|  1.10M|	g_mutex_lock(&vips__global_lock);
  246|  1.10M|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  1.10M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.10M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.10M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|  1.10M|	if (!vips_error_freeze_count) {
  ------------------
  |  Branch (247:6): [True: 1.10M, False: 0]
  ------------------
  248|  1.10M|		if (domain)
  ------------------
  |  Branch (248:7): [True: 1.10M, False: 0]
  ------------------
  249|  1.10M|			vips_buf_appendf(&vips_error_buf, "%s: ", domain);
  250|  1.10M|		vips_buf_vappendf(&vips_error_buf, fmt, ap);
  251|  1.10M|		vips_buf_appends(&vips_error_buf, "\n");
  252|  1.10M|	}
  253|  1.10M|	g_mutex_unlock(&vips__global_lock);
  254|       |
  255|  1.10M|	if (vips__fatal)
  ------------------
  |  Branch (255:6): [True: 0, False: 1.10M]
  ------------------
  256|      0|		vips_error_exit("vips__fatal");
  257|  1.10M|}
vips_error:
  271|   147k|{
  272|   147k|	va_list ap;
  273|       |
  274|   147k|	va_start(ap, fmt);
  275|   147k|	vips_verror(domain, fmt, ap);
  276|   147k|	va_end(ap);
  277|   147k|}
vips_error_clear:
  381|  12.8k|{
  382|  12.8k|	g_mutex_lock(&vips__global_lock);
  383|  12.8k|	vips_buf_rewind(&vips_error_buf);
  384|  12.8k|	g_mutex_unlock(&vips__global_lock);
  385|  12.8k|}
vips_check_uncoded:
  441|  14.8k|{
  442|  14.8k|	if (im->Coding != VIPS_CODING_NONE) {
  ------------------
  |  Branch (442:6): [True: 0, False: 14.8k]
  ------------------
  443|      0|		vips_error(domain, "%s", _("image must be uncoded"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  444|      0|		return -1;
  445|      0|	}
  446|       |
  447|  14.8k|	return 0;
  448|  14.8k|}
vips_check_coding_known:
  493|  2.78k|{
  494|       |	/* These all have codings that extract/ifthenelse/etc can ignore.
  495|       |	 */
  496|  2.78k|	if (im->Coding != VIPS_CODING_NONE &&
  ------------------
  |  Branch (496:6): [True: 0, False: 2.78k]
  ------------------
  497|  2.78k|		im->Coding != VIPS_CODING_LABQ &&
  ------------------
  |  Branch (497:3): [True: 0, False: 0]
  ------------------
  498|  2.78k|		im->Coding != VIPS_CODING_RAD) {
  ------------------
  |  Branch (498:3): [True: 0, False: 0]
  ------------------
  499|      0|		vips_error(domain, "%s", _("unknown image coding"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  500|      0|		return -1;
  501|      0|	}
  502|       |
  503|  2.78k|	return 0;
  504|  2.78k|}
vips_check_coding:
  522|    347|{
  523|    347|	if (im->Coding != coding) {
  ------------------
  |  Branch (523:6): [True: 0, False: 347]
  ------------------
  524|      0|		vips_error(domain, _("coding '%s' only"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  525|      0|			vips_enum_nick(VIPS_TYPE_CODING, coding));
  ------------------
  |  |  148|      0|#define VIPS_TYPE_CODING (vips_coding_get_type())
  ------------------
  526|      0|		return -1;
  527|      0|	}
  528|       |
  529|    347|	return 0;
  530|    347|}
vips_check_mono:
  547|  15.5k|{
  548|  15.5k|	if (im->Bands != 1) {
  ------------------
  |  Branch (548:6): [True: 712, False: 14.8k]
  ------------------
  549|    712|		vips_error(domain, "%s", _("image must one band"));
  ------------------
  |  |   30|    712|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    712|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  550|    712|		return -1;
  551|    712|	}
  552|       |
  553|  14.8k|	return 0;
  554|  15.5k|}
vips_check_noncomplex:
  702|  6.72k|{
  703|  6.72k|	if (vips_band_format_iscomplex(im->BandFmt)) {
  ------------------
  |  Branch (703:6): [True: 0, False: 6.72k]
  ------------------
  704|      0|		vips_error(domain, "%s", _("image must be non-complex"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  705|      0|		return -1;
  706|      0|	}
  707|       |
  708|  6.72k|	return 0;
  709|  6.72k|}
vips_check_vector:
 1142|  3.45k|{
 1143|       |	/* Here it's clearer to list the cases that are OK.
 1144|       |	 */
 1145|  3.45k|	if (n == im->Bands)
  ------------------
  |  Branch (1145:6): [True: 3.39k, False: 56]
  ------------------
 1146|  3.39k|		return 0;
 1147|     56|	if (n == 1)
  ------------------
  |  Branch (1147:6): [True: 56, False: 0]
  ------------------
 1148|     56|		return 0;
 1149|      0|	if (im->Bands == 1 &&
  ------------------
  |  Branch (1149:6): [True: 0, False: 0]
  ------------------
 1150|      0|		n > 1)
  ------------------
  |  Branch (1150:3): [True: 0, False: 0]
  ------------------
 1151|      0|		return 0;
 1152|       |
 1153|      0|	if (im->Bands == 1)
  ------------------
  |  Branch (1153:6): [True: 0, False: 0]
  ------------------
 1154|      0|		vips_error(domain,
 1155|      0|			"%s", _("vector must have 1 element"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1156|      0|	else
 1157|      0|		vips_error(domain,
 1158|      0|			_("vector must have 1 or %d elements"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1159|      0|			im->Bands);
 1160|       |
 1161|      0|	return -1;
 1162|      0|}

vips__thread_profile_attach:
  232|      2|{
  233|      2|	VipsThreadProfile *profile;
  234|       |
  235|      2|	VIPS_DEBUG_MSG("vips__thread_profile_attach: %s\n", thread_name);
  ------------------
  |  |   47|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      2|	{ \
  |  |   49|      2|		; \
  |  |   50|      2|	} \
  |  |   51|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|       |
  237|      2|	profile = g_new(VipsThreadProfile, 1);
  ------------------
  |  |  282|      2|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      2|	  gpointer __p;						\
  |  |  |  |  231|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  232|      2|	    __p = g_##func (__n);				\
  |  |  |  |  233|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (234:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      2|	  else							\
  |  |  |  |  237|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      2|	  __p;							\
  |  |  |  |  239|      2|	}))
  |  |  ------------------
  ------------------
  238|      2|	profile->name = thread_name;
  239|      2|	profile->gates = g_hash_table_new_full(
  240|      2|		g_direct_hash, g_str_equal,
  241|      2|		NULL, (GDestroyNotify) vips_thread_gate_free);
  242|      2|	profile->memory = vips_thread_gate_new("memory");
  243|      2|	g_private_replace(&vips_thread_profile_key, profile);
  244|      2|}
vips__thread_profile_detach:
  259|  55.6k|{
  260|  55.6k|	VipsThreadProfile *profile;
  261|       |
  262|  55.6k|	VIPS_DEBUG_MSG("vips__thread_profile_detach:\n");
  ------------------
  |  |   47|  55.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  55.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  55.6k|	{ \
  |  |   49|  55.6k|		; \
  |  |   50|  55.6k|	} \
  |  |   51|  55.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  55.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|       |
  264|  55.6k|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (264:6): [True: 0, False: 55.6k]
  ------------------
  265|      0|		if (vips__thread_profile)
  ------------------
  |  Branch (265:7): [True: 0, False: 0]
  ------------------
  266|      0|			vips_thread_profile_save(profile);
  267|       |
  268|      0|		vips_thread_profile_free(profile);
  269|      0|		g_private_set(&vips_thread_profile_key, NULL);
  270|      0|	}
  271|  55.6k|}
vips__thread_gate_start:
  285|      4|{
  286|      4|	VipsThreadProfile *profile;
  287|       |
  288|      4|	VIPS_DEBUG_MSG_RED("vips__thread_gate_start: %s\n", gate_name);
  ------------------
  |  |   63|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      4|	{ \
  |  |   65|      4|		; \
  |  |   66|      4|	} \
  |  |   67|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|       |
  290|      4|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (290:6): [True: 4, False: 0]
  ------------------
  291|      4|		gint64 time = g_get_monotonic_time();
  292|       |
  293|      4|		VipsThreadGate *gate;
  294|       |
  295|      4|		if (!(gate =
  ------------------
  |  Branch (295:7): [True: 4, False: 0]
  ------------------
  296|      4|					g_hash_table_lookup(profile->gates, gate_name))) {
  297|      4|			gate = vips_thread_gate_new(gate_name);
  298|      4|			g_hash_table_insert(profile->gates,
  299|      4|				(char *) gate_name, gate);
  300|      4|		}
  301|       |
  302|      4|		if (gate->start->i >= VIPS_GATE_SIZE)
  ------------------
  |  |   50|      4|#define VIPS_GATE_SIZE (1000)
  ------------------
  |  Branch (302:7): [True: 0, False: 4]
  ------------------
  303|      0|			vips_thread_gate_block_add(&gate->start);
  304|       |
  305|      4|		gate->start->time[gate->start->i++] = time;
  306|       |
  307|      4|		VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time);
  ------------------
  |  |   63|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      4|	{ \
  |  |   65|      4|		; \
  |  |   66|      4|	} \
  |  |   67|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      4|	}
  309|      4|}
vips__thread_gate_stop:
  313|      2|{
  314|      2|	VipsThreadProfile *profile;
  315|       |
  316|      2|	VIPS_DEBUG_MSG_RED("vips__thread_gate_stop: %s\n", gate_name);
  ------------------
  |  |   63|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      2|	{ \
  |  |   65|      2|		; \
  |  |   66|      2|	} \
  |  |   67|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|      2|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (318:6): [True: 2, False: 0]
  ------------------
  319|      2|		gint64 time = g_get_monotonic_time();
  320|       |
  321|      2|		VipsThreadGate *gate;
  322|       |
  323|      2|		if (!(gate =
  ------------------
  |  Branch (323:7): [True: 0, False: 2]
  ------------------
  324|      2|					g_hash_table_lookup(profile->gates, gate_name))) {
  325|      0|			gate = vips_thread_gate_new(gate_name);
  326|      0|			g_hash_table_insert(profile->gates,
  327|      0|				(char *) gate_name, gate);
  328|      0|		}
  329|       |
  330|      2|		if (gate->stop->i >= VIPS_GATE_SIZE)
  ------------------
  |  |   50|      2|#define VIPS_GATE_SIZE (1000)
  ------------------
  |  Branch (330:7): [True: 0, False: 2]
  ------------------
  331|      0|			vips_thread_gate_block_add(&gate->stop);
  332|       |
  333|      2|		gate->stop->time[gate->stop->i++] = time;
  334|       |
  335|      2|		VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time);
  ------------------
  |  |   63|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      2|	{ \
  |  |   65|      2|		; \
  |  |   66|      2|	} \
  |  |   67|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      2|	}
  337|      2|}
gate.c:vips_thread_gate_new:
  219|      6|{
  220|      6|	VipsThreadGate *gate;
  221|       |
  222|      6|	gate = g_new(VipsThreadGate, 1);
  ------------------
  |  |  282|      6|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  223|      6|	gate->name = gate_name;
  224|      6|	gate->start = g_new0(VipsThreadGateBlock, 1);
  ------------------
  |  |  299|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  225|      6|	gate->stop = g_new0(VipsThreadGateBlock, 1);
  ------------------
  |  |  299|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  226|       |
  227|      6|	return gate;
  228|      6|}
gate.c:vips_thread_profile_get:
  248|  55.6k|{
  249|  55.6k|	return g_private_get(&vips_thread_profile_key);
  250|  55.6k|}

vips__link_break_all:
  183|   178k|{
  184|   178k|	g_mutex_lock(&vips__global_lock);
  185|       |
  186|   178k|	vips_slist_map2(image->upstream,
  187|   178k|		(VipsSListMap2Fn) vips__link_break, image, NULL);
  188|   178k|	vips_slist_map2(image->downstream,
  189|   178k|		(VipsSListMap2Fn) vips__link_break_rev, image, NULL);
  190|       |
  191|   178k|	g_assert(!image->upstream);
  ------------------
  |  |  166|   178k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   178k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   178k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|   178k|	g_assert(!image->downstream);
  ------------------
  |  |  166|   178k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   178k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   178k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|       |
  194|   178k|	g_mutex_unlock(&vips__global_lock);
  195|   178k|}
vips__link_map:
  239|   114k|{
  240|   114k|	static int serial = 0;
  241|       |
  242|   114k|	LinkMap map;
  243|   114k|	GSList *images;
  244|   114k|	GSList *p;
  245|   114k|	void *result;
  246|       |
  247|   114k|	images = NULL;
  248|       |
  249|       |	/* The function might do anything, including removing images
  250|       |	 * or invalidating other images, so we can't trigger them from within
  251|       |	 * the image loop. Instead we collect a list of images, ref them,
  252|       |	 * run the functions, and unref.
  253|       |	 */
  254|       |
  255|   114k|	map.upstream = upstream;
  256|   114k|	map.fn = (VipsSListMap2Fn) vips__link_map_cb;
  257|   114k|	map.a = (void *) &images;
  258|   114k|	map.b = NULL;
  259|       |
  260|       |	/* We will be walking the tree of images and updating the ->serial
  261|       |	 * member. There will be intense confusion if two threads try to do
  262|       |	 * this at the same time.
  263|       |	 */
  264|   114k|	g_mutex_lock(&vips__global_lock);
  265|       |
  266|   114k|	serial += 1;
  267|   114k|	map.serial = serial;
  268|       |
  269|   114k|	vips__link_mapp(image, &map, NULL);
  270|       |
  271|   560k|	for (p = images; p; p = p->next)
  ------------------
  |  Branch (271:19): [True: 445k, False: 114k]
  ------------------
  272|   445k|		g_object_ref(p->data);
  273|       |
  274|   114k|	g_mutex_unlock(&vips__global_lock);
  275|       |
  276|   114k|	result = vips_slist_map2(images, fn, a, b);
  277|       |
  278|   560k|	for (p = images; p; p = p->next)
  ------------------
  |  Branch (278:19): [True: 445k, False: 114k]
  ------------------
  279|   445k|		g_object_unref(p->data);
  280|   114k|	g_slist_free(images);
  281|       |
  282|   114k|	return result;
  283|   114k|}
vips__demand_hint_array:
  291|   187k|{
  292|   187k|	VipsDemandStyle hint = (VipsDemandStyle) int_hint;
  293|       |
  294|   187k|	int i, len, nany;
  295|   187k|	VipsDemandStyle set_hint;
  296|       |
  297|       |	/* How many input images are there? And how many are ANY?
  298|       |	 */
  299|   322k|	for (i = 0, len = 0, nany = 0; in[i]; i++, len++)
  ------------------
  |  Branch (299:33): [True: 134k, False: 187k]
  ------------------
  300|   134k|		if (in[i]->dhint == VIPS_DEMAND_STYLE_ANY)
  ------------------
  |  Branch (300:7): [True: 27, False: 134k]
  ------------------
  301|     27|			nany++;
  302|       |
  303|       |	/* Find the most restrictive of all the hints available to us.
  304|       |	 *
  305|       |	 * We have tried to be smarter about this in the past -- for example,
  306|       |	 * detecting all ANY inputs and ignoring the hint in this case, but
  307|       |	 * there are inevitably odd cases which cause problems. For example,
  308|       |	 * new_from_memory, resize, affine, write_to_memory would run with
  309|       |	 * FATSTRIP.
  310|       |	 */
  311|   187k|	set_hint = hint;
  312|   322k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (312:14): [True: 134k, False: 187k]
  ------------------
  313|   134k|		set_hint = (VipsDemandStyle) VIPS_MIN(
  ------------------
  |  |   55|   134k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 27, False: 134k]
  |  |  ------------------
  ------------------
  314|   187k|			(int) set_hint, (int) in[i]->dhint);
  315|       |
  316|   187k|	image->dhint = set_hint;
  317|       |
  318|       |#ifdef DEBUG
  319|       |	printf("vips_image_pipeline_array: set dhint for \"%s\" to %s\n",
  320|       |		image->filename,
  321|       |		vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, image->dhint));
  322|       |	printf("\toperation requested %s\n",
  323|       |		vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, hint));
  324|       |	printf("\tinputs were:\n");
  325|       |	printf("\t");
  326|       |	for (i = 0; in[i]; i++)
  327|       |		printf("%s ", vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, in[i]->dhint));
  328|       |	printf("\n");
  329|       |#endif /*DEBUG*/
  330|       |
  331|       |	/* im depends on all these ims.
  332|       |	 */
  333|   187k|	g_mutex_lock(&vips__global_lock);
  334|   322k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (334:14): [True: 134k, False: 187k]
  ------------------
  335|   134k|		vips__link_make(in[i], image);
  336|   187k|	g_mutex_unlock(&vips__global_lock);
  337|       |
  338|       |	/* Set a flag on the image to say we remembered to call this thing.
  339|       |	 * vips_image_generate() and friends check this.
  340|       |	 */
  341|   187k|	image->hint_set = TRUE;
  ------------------
  |  |  798|   187k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   187k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  342|   187k|}
vips_image_pipeline_array:
  379|   187k|{
  380|       |	/* This function can be called more than once per output image. For
  381|       |	 * example, jpeg header load will call this once on ->out to set the
  382|       |	 * default hint, then later call it again to connect the output image
  383|       |	 * up to the real image.
  384|       |	 *
  385|       |	 * It's only ever called first time with in[0] == NULL and second time
  386|       |	 * with a real value for @in.
  387|       |	 */
  388|   187k|	vips__demand_hint_array(image, hint, in);
  389|       |
  390|   187k|	if (in[0] &&
  ------------------
  |  Branch (390:6): [True: 134k, False: 52.8k]
  ------------------
  391|   187k|		vips__image_copy_fields_array(image, in))
  ------------------
  |  Branch (391:3): [True: 0, False: 134k]
  ------------------
  392|      0|		return -1;
  393|       |
  394|   187k|	if (vips__reorder_set_input(image, in))
  ------------------
  |  Branch (394:6): [True: 0, False: 187k]
  ------------------
  395|      0|		return -1;
  396|       |
  397|   187k|	return 0;
  398|   187k|}
vips_image_pipelinev:
  412|   173k|{
  413|   173k|	va_list ap;
  414|   173k|	int i;
  415|   173k|	VipsImage *ar[MAX_IMAGES];
  416|       |
  417|   173k|	va_start(ap, hint);
  418|   294k|	for (i = 0; i < MAX_IMAGES &&
  ------------------
  |  |  128|   588k|#define MAX_IMAGES (1000)
  ------------------
  |  Branch (418:14): [True: 294k, False: 0]
  ------------------
  419|   294k|		 (ar[i] = va_arg(ap, VipsImage *));
  ------------------
  |  Branch (419:4): [True: 120k, False: 173k]
  ------------------
  420|   173k|		 i++)
  421|   120k|		;
  422|   173k|	va_end(ap);
  423|   173k|	if (i == MAX_IMAGES) {
  ------------------
  |  |  128|   173k|#define MAX_IMAGES (1000)
  ------------------
  |  Branch (423:6): [True: 0, False: 173k]
  ------------------
  424|      0|		g_warning("%s", _("too many images"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  425|       |
  426|       |		/* Make sure we have a sentinel there.
  427|       |		 */
  428|      0|		ar[i - 1] = NULL;
  429|      0|	}
  430|       |
  431|   173k|	return vips_image_pipeline_array(image, hint, ar);
  432|   173k|}
vips_start_one:
  446|   108k|{
  447|   108k|	VipsImage *in = (VipsImage *) a;
  448|       |
  449|   108k|	return vips_region_new(in);
  450|   108k|}
vips_stop_one:
  464|   116k|{
  465|   116k|	VipsRegion *reg = (VipsRegion *) seq;
  466|       |
  467|   116k|	g_object_unref(reg);
  468|       |
  469|   116k|	return 0;
  470|   116k|}
vips_stop_many:
  485|    346|{
  486|    346|	VipsRegion **ar = (VipsRegion **) seq;
  487|       |
  488|    346|	if (ar) {
  ------------------
  |  Branch (488:6): [True: 346, False: 0]
  ------------------
  489|    346|		int i;
  490|       |
  491|    692|		for (i = 0; ar[i]; i++)
  ------------------
  |  Branch (491:15): [True: 346, False: 346]
  ------------------
  492|    346|			g_object_unref(ar[i]);
  493|    346|		g_free((char *) ar);
  494|    346|	}
  495|       |
  496|    346|	return 0;
  497|    346|}
vips_start_many:
  512|    346|{
  513|    346|	VipsImage **in = (VipsImage **) a;
  514|       |
  515|    346|	int i, n;
  516|    346|	VipsRegion **ar;
  517|       |
  518|       |	/* How many images?
  519|       |	 */
  520|    692|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (520:14): [True: 346, False: 346]
  ------------------
  521|    346|		;
  522|       |
  523|       |	/* Allocate space for region array.
  524|       |	 */
  525|    346|	if (!(ar = VIPS_ARRAY(NULL, n + 1, VipsRegion *)))
  ------------------
  |  |   72|    346|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    346|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    346|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    346|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    346|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (525:6): [True: 0, False: 346]
  ------------------
  526|      0|		return NULL;
  527|       |
  528|       |	/* Create a set of regions.
  529|       |	 */
  530|    692|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (530:14): [True: 346, False: 346]
  ------------------
  531|    346|		if (!(ar[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (531:7): [True: 0, False: 346]
  ------------------
  532|      0|			vips_stop_many(ar, NULL, NULL);
  533|      0|			return NULL;
  534|      0|		}
  535|    346|	ar[n] = NULL;
  536|       |
  537|    346|	return ar;
  538|    346|}
vips_image_generate:
  686|   156k|{
  687|   156k|	int res;
  688|       |
  689|   156k|	VIPS_DEBUG_MSG("vips_image_generate: %p\n", image);
  ------------------
  |  |   47|   156k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   156k|	{ \
  |  |   49|   156k|		; \
  |  |   50|   156k|	} \
  |  |   51|   156k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|       |
  691|   156k|	g_assert(generate_fn);
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  692|   156k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  693|       |
  694|   156k|	if (!image->hint_set) {
  ------------------
  |  Branch (694:6): [True: 0, False: 156k]
  ------------------
  695|      0|		vips_error("vips_image_generate",
  696|      0|			"%s", _("demand hint not set"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  697|      0|		return -1;
  698|      0|	}
  699|       |
  700|       |	/* We don't use this, but make sure it's set in case any old binaries
  701|       |	 * are expecting it.
  702|       |	 */
  703|   156k|	image->Bbits = vips_format_sizeof(image->BandFmt) << 3;
  704|       |
  705|       |	/* Look at output type to decide our action.
  706|       |	 */
  707|   156k|	switch (image->dtype) {
  708|   145k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (708:2): [True: 145k, False: 11.1k]
  ------------------
  709|       |		/* Output to partial image. Just attach functions and return.
  710|       |		 */
  711|   145k|		if (image->generate_fn ||
  ------------------
  |  Branch (711:7): [True: 0, False: 145k]
  ------------------
  712|   145k|			image->start_fn ||
  ------------------
  |  Branch (712:4): [True: 0, False: 145k]
  ------------------
  713|   145k|			image->stop_fn) {
  ------------------
  |  Branch (713:4): [True: 0, False: 145k]
  ------------------
  714|      0|			vips_error("VipsImage",
  715|      0|				"%s", _("generate() called twice"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  716|      0|			return -1;
  717|      0|		}
  718|       |
  719|   145k|		image->start_fn = start_fn;
  720|   145k|		image->generate_fn = generate_fn;
  721|   145k|		image->stop_fn = stop_fn;
  722|   145k|		image->client1 = a;
  723|   145k|		image->client2 = b;
  724|       |
  725|   145k|		VIPS_DEBUG_MSG("vips_image_generate: "
  ------------------
  |  |   47|   145k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   145k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   145k|	{ \
  |  |   49|   145k|		; \
  |  |   50|   145k|	} \
  |  |   51|   145k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   145k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  726|   145k|					   "attaching partial callbacks\n");
  727|       |
  728|   145k|		if (vips_image_written(image))
  ------------------
  |  Branch (728:7): [True: 0, False: 145k]
  ------------------
  729|      0|			return -1;
  730|       |
  731|   145k|		break;
  732|       |
  733|   145k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (733:2): [True: 11.1k, False: 145k]
  ------------------
  734|  11.1k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (734:2): [True: 0, False: 156k]
  ------------------
  735|  11.1k|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (735:2): [True: 0, False: 156k]
  ------------------
  736|  11.1k|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (736:2): [True: 0, False: 156k]
  ------------------
  737|       |		/* Eval now .. sanity check.
  738|       |		 */
  739|  11.1k|		if (image->generate_fn ||
  ------------------
  |  Branch (739:7): [True: 0, False: 11.1k]
  ------------------
  740|  11.1k|			image->start_fn ||
  ------------------
  |  Branch (740:4): [True: 0, False: 11.1k]
  ------------------
  741|  11.1k|			image->stop_fn) {
  ------------------
  |  Branch (741:4): [True: 0, False: 11.1k]
  ------------------
  742|      0|			vips_error("VipsImage",
  743|      0|				"%s", _("generate() called twice"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  744|      0|			return -1;
  745|      0|		}
  746|       |
  747|       |		/* Attach callbacks.
  748|       |		 */
  749|  11.1k|		image->start_fn = start_fn;
  750|  11.1k|		image->generate_fn = generate_fn;
  751|  11.1k|		image->stop_fn = stop_fn;
  752|  11.1k|		image->client1 = a;
  753|  11.1k|		image->client2 = b;
  754|       |
  755|  11.1k|		if (vips_image_write_prepare(image))
  ------------------
  |  Branch (755:7): [True: 0, False: 11.1k]
  ------------------
  756|      0|			return -1;
  757|       |
  758|  11.1k|		if (image->dtype == VIPS_IMAGE_OPENOUT)
  ------------------
  |  Branch (758:7): [True: 0, False: 11.1k]
  ------------------
  759|      0|			res = vips_sink_disc(image, write_vips, NULL);
  760|  11.1k|		else
  761|  11.1k|			res = vips_sink_memory(image);
  762|       |
  763|       |		/* Error?
  764|       |		 */
  765|  11.1k|		if (res)
  ------------------
  |  Branch (765:7): [True: 4.84k, False: 6.27k]
  ------------------
  766|  4.84k|			return -1;
  767|       |
  768|       |		/* Must come before we rewind.
  769|       |		 */
  770|  6.27k|		if (vips_image_written(image))
  ------------------
  |  Branch (770:7): [True: 0, False: 6.27k]
  ------------------
  771|      0|			return -1;
  772|       |
  773|       |		/* We've written to image ... rewind it ready for reading.
  774|       |		 */
  775|  6.27k|		if (vips_image_pio_input(image))
  ------------------
  |  Branch (775:7): [True: 0, False: 6.27k]
  ------------------
  776|      0|			return -1;
  777|       |
  778|  6.27k|		break;
  779|       |
  780|  6.27k|	default:
  ------------------
  |  Branch (780:2): [True: 0, False: 156k]
  ------------------
  781|       |		/* Not a known output style.
  782|       |		 */
  783|      0|		vips_error("VipsImage",
  784|      0|			_("unable to output to a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  785|      0|			vips_enum_nick(VIPS_TYPE_IMAGE_TYPE,
  ------------------
  |  |  139|      0|#define VIPS_TYPE_IMAGE_TYPE (vips_image_type_get_type())
  ------------------
  786|      0|				image->dtype));
  787|      0|		return -1;
  788|   156k|	}
  789|       |
  790|   151k|	return 0;
  791|   156k|}
generate.c:vips__link_break:
  152|   134k|{
  153|   134k|	g_assert(image_up);
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|   134k|	g_assert(image_down);
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|       |
  156|   134k|	g_assert(g_slist_find(image_up->downstream, image_down));
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|   134k|	g_assert(g_slist_find(image_down->upstream, image_up));
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|       |
  159|   134k|	image_up->downstream =
  160|   134k|		g_slist_remove(image_up->downstream, image_down);
  161|   134k|	image_down->upstream =
  162|   134k|		g_slist_remove(image_down->upstream, image_up);
  163|       |
  164|       |	/* Unlink the progress chain.
  165|       |	 */
  166|   134k|	if (image_down->progress_signal &&
  ------------------
  |  Branch (166:6): [True: 19.7k, False: 114k]
  ------------------
  167|   134k|		image_down->progress_signal == image_up->progress_signal)
  ------------------
  |  Branch (167:3): [True: 7.43k, False: 12.3k]
  ------------------
  168|  7.43k|		image_down->progress_signal = NULL;
  169|       |
  170|   134k|	return NULL;
  171|   134k|}
generate.c:vips__link_break_rev:
  175|  50.8k|{
  176|  50.8k|	return vips__link_break(image_up, image_down, b);
  177|  50.8k|}
generate.c:vips__link_map_cb:
  227|   445k|{
  228|   445k|	*images = g_slist_prepend(*images, image);
  229|       |
  230|   445k|	return NULL;
  231|   445k|}
generate.c:vips__link_mapp:
  207|   445k|{
  208|   445k|	void *res;
  209|       |
  210|       |	/* Loop?
  211|       |	 */
  212|   445k|	if (image->serial == map->serial)
  ------------------
  |  Branch (212:6): [True: 0, False: 445k]
  ------------------
  213|      0|		return NULL;
  214|   445k|	image->serial = map->serial;
  215|       |
  216|   445k|	if ((res = map->fn(image, map->a, map->b)))
  ------------------
  |  Branch (216:6): [True: 0, False: 445k]
  ------------------
  217|      0|		return res;
  218|       |
  219|   445k|	return vips_slist_map2(map->upstream
  ------------------
  |  Branch (219:25): [True: 445k, False: 0]
  ------------------
  220|   445k|			? image->upstream
  221|   445k|			: image->downstream,
  222|   445k|		(VipsSListMap2Fn) vips__link_mapp, map, NULL);
  223|   445k|}
generate.c:vips__link_make:
  134|   134k|{
  135|   134k|	g_assert(image_up);
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|   134k|	g_assert(image_down);
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|       |
  138|   134k|	image_up->downstream =
  139|   134k|		g_slist_prepend(image_up->downstream, image_down);
  140|   134k|	image_down->upstream =
  141|   134k|		g_slist_prepend(image_down->upstream, image_up);
  142|       |
  143|       |	/* Propagate the progress indicator.
  144|       |	 */
  145|   134k|	if (image_up->progress_signal &&
  ------------------
  |  Branch (145:6): [True: 7.45k, False: 127k]
  ------------------
  146|   134k|		!image_down->progress_signal)
  ------------------
  |  Branch (146:3): [True: 7.45k, False: 0]
  ------------------
  147|  7.45k|		image_down->progress_signal = image_up->progress_signal;
  148|   134k|}

vips_format_sizeof:
  212|   172k|{
  213|   172k|	format = VIPS_CLIP(0, format, VIPS_FORMAT_DPCOMPLEX);
  ------------------
  |  |   57|   172k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|   344k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 172k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 172k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|       |
  215|   172k|	return vips__image_sizeof_bandformat[format];
  216|   172k|}
vips_format_sizeof_unsafe:
  229|  3.93M|{
  230|  3.93M|	g_assert(0 <= format && format <= VIPS_FORMAT_DPCOMPLEX);
  ------------------
  |  |  166|  3.93M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  3.93M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.93M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|  3.93M|	return vips__image_sizeof_bandformat[format];
  233|  3.93M|}
vips_interpretation_max_alpha:
  243|  1.85k|{
  244|  1.85k|	switch (interpretation) {
  245|    248|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (245:2): [True: 248, False: 1.61k]
  ------------------
  246|    255|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (246:2): [True: 7, False: 1.85k]
  ------------------
  247|    255|		return 65535.0;
  248|      5|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (248:2): [True: 5, False: 1.85k]
  ------------------
  249|      5|		return 1.0;
  250|  1.59k|	default:
  ------------------
  |  Branch (250:2): [True: 1.59k, False: 260]
  ------------------
  251|  1.59k|		return 255.0;
  252|  1.85k|	}
  253|  1.85k|}
vips__meta_destroy:
  375|   172k|{
  376|   172k|	VIPS_FREEF(g_hash_table_destroy, image->meta);
  ------------------
  |  |   41|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   172k|	{ \
  |  |   43|   172k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 160k, False: 12.5k]
  |  |  ------------------
  |  |   44|   160k|			(void) F((S)); \
  |  |   45|   160k|			(S) = 0; \
  |  |   46|   160k|		} \
  |  |   47|   172k|	} \
  |  |   48|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|   172k|	g_assert(!image->meta_traverse);
  ------------------
  |  |  166|   172k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  378|   172k|}
vips_image_get_format:
  434|  19.9k|{
  435|  19.9k|	return image->BandFmt;
  436|  19.9k|}
vips_image_get_format_max:
  446|  1.06k|{
  447|  1.06k|	switch (format) {
  448|    794|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (448:2): [True: 794, False: 275]
  ------------------
  449|    794|		return UCHAR_MAX;
  450|       |
  451|      8|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (451:2): [True: 8, False: 1.06k]
  ------------------
  452|      8|		return SCHAR_MAX;
  453|       |
  454|    153|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (454:2): [True: 153, False: 916]
  ------------------
  455|    153|		return USHRT_MAX;
  456|       |
  457|     43|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (457:2): [True: 43, False: 1.02k]
  ------------------
  458|     43|		return SHRT_MAX;
  459|       |
  460|     39|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (460:2): [True: 39, False: 1.03k]
  ------------------
  461|     39|		return UINT_MAX;
  462|       |
  463|     32|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (463:2): [True: 32, False: 1.03k]
  ------------------
  464|     32|		return INT_MAX;
  465|       |
  466|      0|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (466:2): [True: 0, False: 1.06k]
  ------------------
  467|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (467:2): [True: 0, False: 1.06k]
  ------------------
  468|      0|		return FLT_MAX;
  469|       |
  470|      0|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (470:2): [True: 0, False: 1.06k]
  ------------------
  471|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (471:2): [True: 0, False: 1.06k]
  ------------------
  472|      0|		return DBL_MAX;
  473|       |
  474|      0|	default:
  ------------------
  |  Branch (474:2): [True: 0, False: 1.06k]
  ------------------
  475|      0|		return -1;
  476|  1.06k|	}
  477|  1.06k|}
vips_image_get_interpretation:
  587|    774|{
  588|    774|	return image->Type;
  589|    774|}
vips_image_guess_interpretation:
  674|    998|{
  675|    998|	gboolean sane;
  676|       |
  677|    998|	sane = TRUE;
  ------------------
  |  |  798|    998|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    998|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  678|       |
  679|       |	/* Coding overrides interpretation.
  680|       |	 */
  681|    998|	switch (image->Coding) {
  682|      0|	case VIPS_CODING_ERROR:
  ------------------
  |  Branch (682:2): [True: 0, False: 998]
  ------------------
  683|      0|		sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  684|      0|		break;
  685|       |
  686|      0|	case VIPS_CODING_LABQ:
  ------------------
  |  Branch (686:2): [True: 0, False: 998]
  ------------------
  687|      0|		if (image->Type != VIPS_INTERPRETATION_LABQ)
  ------------------
  |  Branch (687:7): [True: 0, False: 0]
  ------------------
  688|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  689|      0|		break;
  690|       |
  691|      0|	case VIPS_CODING_RAD:
  ------------------
  |  Branch (691:2): [True: 0, False: 998]
  ------------------
  692|      0|		if (image->Type != VIPS_INTERPRETATION_sRGB)
  ------------------
  |  Branch (692:7): [True: 0, False: 0]
  ------------------
  693|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  694|      0|		break;
  695|       |
  696|    998|	default:
  ------------------
  |  Branch (696:2): [True: 998, False: 0]
  ------------------
  697|    998|		break;
  698|    998|	}
  699|       |
  700|    998|	switch (image->Type) {
  701|      0|	case VIPS_INTERPRETATION_ERROR:
  ------------------
  |  Branch (701:2): [True: 0, False: 998]
  ------------------
  702|      0|		sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  703|      0|		break;
  704|       |
  705|    224|	case VIPS_INTERPRETATION_MULTIBAND:
  ------------------
  |  Branch (705:2): [True: 224, False: 774]
  ------------------
  706|       |		/* This is a pretty useless generic tag. Always reset it.
  707|       |		 */
  708|    224|		sane = FALSE;
  ------------------
  |  |  794|    224|#define	FALSE	(0)
  ------------------
  709|    224|		break;
  710|       |
  711|    139|	case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (711:2): [True: 139, False: 859]
  ------------------
  712|       |		/* Don't test bands, we allow bands after the first to be
  713|       |		 * unused extras, like alpha.
  714|       |		 */
  715|    139|		break;
  716|       |
  717|      0|	case VIPS_INTERPRETATION_HISTOGRAM:
  ------------------
  |  Branch (717:2): [True: 0, False: 998]
  ------------------
  718|      0|		if (image->Xsize > 1 && image->Ysize > 1)
  ------------------
  |  Branch (718:7): [True: 0, False: 0]
  |  Branch (718:27): [True: 0, False: 0]
  ------------------
  719|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  720|      0|		break;
  721|       |
  722|      0|	case VIPS_INTERPRETATION_FOURIER:
  ------------------
  |  Branch (722:2): [True: 0, False: 998]
  ------------------
  723|      0|		if (!vips_band_format_iscomplex(image->BandFmt))
  ------------------
  |  Branch (723:7): [True: 0, False: 0]
  ------------------
  724|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  725|      0|		break;
  726|       |
  727|    190|	case VIPS_INTERPRETATION_XYZ:
  ------------------
  |  Branch (727:2): [True: 190, False: 808]
  ------------------
  728|    197|	case VIPS_INTERPRETATION_LAB:
  ------------------
  |  Branch (728:2): [True: 7, False: 991]
  ------------------
  729|    197|	case VIPS_INTERPRETATION_RGB:
  ------------------
  |  Branch (729:2): [True: 0, False: 998]
  ------------------
  730|    197|	case VIPS_INTERPRETATION_CMC:
  ------------------
  |  Branch (730:2): [True: 0, False: 998]
  ------------------
  731|    197|	case VIPS_INTERPRETATION_LCH:
  ------------------
  |  Branch (731:2): [True: 0, False: 998]
  ------------------
  732|    197|	case VIPS_INTERPRETATION_sRGB:
  ------------------
  |  Branch (732:2): [True: 0, False: 998]
  ------------------
  733|    197|	case VIPS_INTERPRETATION_HSV:
  ------------------
  |  Branch (733:2): [True: 0, False: 998]
  ------------------
  734|    197|		if (image->Bands < 3)
  ------------------
  |  Branch (734:7): [True: 0, False: 197]
  ------------------
  735|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  736|    197|		break;
  737|       |
  738|    254|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (738:2): [True: 254, False: 744]
  ------------------
  739|    254|	case VIPS_INTERPRETATION_YXY:
  ------------------
  |  Branch (739:2): [True: 0, False: 998]
  ------------------
  740|       |		/* Need float values in 0 - 1.
  741|       |		 */
  742|    254|		if (!vips_band_format_isfloat(image->BandFmt) ||
  ------------------
  |  Branch (742:7): [True: 0, False: 254]
  ------------------
  743|    254|			image->Bands < 3)
  ------------------
  |  Branch (743:4): [True: 0, False: 254]
  ------------------
  744|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  745|    254|		break;
  746|       |
  747|      0|	case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (747:2): [True: 0, False: 998]
  ------------------
  748|      0|		if (image->Bands < 4)
  ------------------
  |  Branch (748:7): [True: 0, False: 0]
  ------------------
  749|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  750|      0|		break;
  751|       |
  752|      0|	case VIPS_INTERPRETATION_LABQ:
  ------------------
  |  Branch (752:2): [True: 0, False: 998]
  ------------------
  753|      0|		if (image->Coding != VIPS_CODING_LABQ)
  ------------------
  |  Branch (753:7): [True: 0, False: 0]
  ------------------
  754|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  755|      0|		break;
  756|       |
  757|     49|	case VIPS_INTERPRETATION_LABS:
  ------------------
  |  Branch (757:2): [True: 49, False: 949]
  ------------------
  758|       |		/* Needs to be able to express +/- 32767
  759|       |		 */
  760|     49|		if (vips_band_format_isuint(image->BandFmt) ||
  ------------------
  |  Branch (760:7): [True: 0, False: 49]
  ------------------
  761|     49|			vips_band_format_is8bit(image->BandFmt) ||
  ------------------
  |  Branch (761:4): [True: 0, False: 49]
  ------------------
  762|     49|			image->Bands < 3)
  ------------------
  |  Branch (762:4): [True: 0, False: 49]
  ------------------
  763|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  764|     49|		break;
  765|       |
  766|      0|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (766:2): [True: 0, False: 998]
  ------------------
  767|      0|		if (vips_band_format_is8bit(image->BandFmt) ||
  ------------------
  |  Branch (767:7): [True: 0, False: 0]
  ------------------
  768|      0|			image->Bands < 3)
  ------------------
  |  Branch (768:4): [True: 0, False: 0]
  ------------------
  769|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  770|      0|		break;
  771|       |
  772|    135|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (772:2): [True: 135, False: 863]
  ------------------
  773|    135|		if (vips_band_format_is8bit(image->BandFmt))
  ------------------
  |  Branch (773:7): [True: 0, False: 135]
  ------------------
  774|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  775|    135|		break;
  776|       |
  777|      0|	case VIPS_INTERPRETATION_MATRIX:
  ------------------
  |  Branch (777:2): [True: 0, False: 998]
  ------------------
  778|      0|		if (image->Bands != 1)
  ------------------
  |  Branch (778:7): [True: 0, False: 0]
  ------------------
  779|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  780|      0|		break;
  781|       |
  782|      0|	default:
  ------------------
  |  Branch (782:2): [True: 0, False: 998]
  ------------------
  783|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|    998|	}
  785|       |
  786|    998|	if (sane)
  ------------------
  |  Branch (786:6): [True: 774, False: 224]
  ------------------
  787|    774|		return vips_image_get_interpretation(image);
  788|    224|	else
  789|    224|		return vips_image_default_interpretation(image);
  790|    998|}
vips_image_get_scale:
  879|  14.8k|{
  880|  14.8k|	double scale;
  881|       |
  882|  14.8k|	scale = 1.0;
  883|  14.8k|	if (vips_image_get_typeof(image, "scale"))
  ------------------
  |  Branch (883:6): [True: 0, False: 14.8k]
  ------------------
  884|      0|		vips_image_get_double(image, "scale", &scale);
  885|       |
  886|  14.8k|	return scale;
  887|  14.8k|}
vips_image_get_offset:
  900|  14.8k|{
  901|  14.8k|	double offset;
  902|       |
  903|  14.8k|	offset = 0.0;
  904|  14.8k|	if (vips_image_get_typeof(image, "offset"))
  ------------------
  |  Branch (904:6): [True: 0, False: 14.8k]
  ------------------
  905|      0|		vips_image_get_double(image, "offset", &offset);
  906|       |
  907|  14.8k|	return offset;
  908|  14.8k|}
vips_image_get_concurrency:
  972|  51.9k|{
  973|  51.9k|	int concurrency;
  974|       |
  975|  51.9k|	if (vips_image_get_typeof(image, VIPS_META_CONCURRENCY) &&
  ------------------
  |  |  179|  51.9k|#define VIPS_META_CONCURRENCY "concurrency"
  ------------------
  |  Branch (975:6): [True: 0, False: 51.9k]
  ------------------
  976|  51.9k|		!vips_image_get_int(image,
  ------------------
  |  Branch (976:3): [True: 0, False: 0]
  ------------------
  977|      0|			VIPS_META_CONCURRENCY, &concurrency) &&
  ------------------
  |  |  179|      0|#define VIPS_META_CONCURRENCY "concurrency"
  ------------------
  978|  51.9k|		concurrency >= 1 &&
  ------------------
  |  Branch (978:3): [True: 0, False: 0]
  ------------------
  979|  51.9k|		concurrency < 100)
  ------------------
  |  Branch (979:3): [True: 0, False: 0]
  ------------------
  980|      0|		return concurrency;
  981|       |
  982|  51.9k|	return default_concurrency;
  983|  51.9k|}
vips_image_init_fields:
 1100|  25.4k|{
 1101|  25.4k|	g_object_set(image,
 1102|  25.4k|		"width", xsize,
 1103|  25.4k|		"height", ysize,
 1104|  25.4k|		"bands", bands,
 1105|  25.4k|		"format", format,
 1106|  25.4k|		NULL);
 1107|       |
 1108|  25.4k|	image->Coding = coding;
 1109|  25.4k|	image->Type = interpretation;
 1110|  25.4k|	image->Xres = VIPS_MAX(0, xres);
  ------------------
  |  |   54|  25.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 25.4k]
  |  |  ------------------
  ------------------
 1111|  25.4k|	image->Yres = VIPS_MAX(0, yres);
  ------------------
  |  |   54|  25.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 25.4k]
  |  |  ------------------
  ------------------
 1112|  25.4k|}
vips__image_meta_copy:
 1141|   134k|{
 1142|   134k|	if (src->meta) {
  ------------------
  |  Branch (1142:6): [True: 130k, False: 4.58k]
  ------------------
 1143|       |		/* We lock with vips_image_set() to stop races in highly-
 1144|       |		 * threaded applications.
 1145|       |		 */
 1146|   130k|		g_mutex_lock(&vips__meta_lock);
 1147|   130k|		meta_init(dst);
 1148|   130k|		vips_slist_map2(src->meta_traverse,
 1149|   130k|			(VipsSListMap2Fn) meta_cp_field, dst, NULL);
 1150|   130k|		g_mutex_unlock(&vips__meta_lock);
 1151|   130k|	}
 1152|       |
 1153|   134k|	return 0;
 1154|   134k|}
vips__image_copy_fields_array:
 1161|   134k|{
 1162|   134k|	int i;
 1163|   134k|	int ni;
 1164|       |
 1165|   134k|	g_assert(in[0]);
  ------------------
  |  |  166|   134k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   134k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   134k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1166|       |
 1167|       |	/* Copy magic too, handy for knowing the original image's byte order.
 1168|       |	 */
 1169|   134k|	out->magic = in[0]->magic;
 1170|       |
 1171|   134k|	out->Xsize = in[0]->Xsize;
 1172|   134k|	out->Ysize = in[0]->Ysize;
 1173|   134k|	out->Bands = in[0]->Bands;
 1174|   134k|	out->Bbits = in[0]->Bbits;
 1175|   134k|	out->BandFmt = in[0]->BandFmt;
 1176|   134k|	out->Type = in[0]->Type;
 1177|   134k|	out->Coding = in[0]->Coding;
 1178|   134k|	out->Xres = in[0]->Xres;
 1179|   134k|	out->Yres = in[0]->Yres;
 1180|   134k|	out->Xoffset = in[0]->Xoffset;
 1181|   134k|	out->Yoffset = in[0]->Yoffset;
 1182|       |
 1183|       |	/* Count number of images.
 1184|       |	 */
 1185|   269k|	for (ni = 0; in[ni]; ni++)
  ------------------
  |  Branch (1185:15): [True: 134k, False: 134k]
  ------------------
 1186|   134k|		;
 1187|       |
 1188|       |	/* Need to copy last-to-first so that in0 meta will override any
 1189|       |	 * earlier meta.
 1190|       |	 *
 1191|       |	 * Don't destroy the meta on out. Things like foreign.c like setting
 1192|       |	 * image properties before calling a subclass loader, and those
 1193|       |	 * subclass loaders will sometimes write to an image.
 1194|       |	 */
 1195|   269k|	for (i = ni - 1; i >= 0; i--)
  ------------------
  |  Branch (1195:19): [True: 134k, False: 134k]
  ------------------
 1196|   134k|		if (vips__image_meta_copy(out, in[i]))
  ------------------
  |  Branch (1196:7): [True: 0, False: 134k]
  ------------------
 1197|      0|			return -1;
 1198|       |
 1199|       |	/* Merge hists first to last.
 1200|       |	 */
 1201|   269k|	for (i = 0; in[i]; i++)
  ------------------
  |  Branch (1201:14): [True: 134k, False: 134k]
  ------------------
 1202|   134k|		out->history_list = vips__gslist_gvalue_merge(
 1203|   134k|			out->history_list, in[i]->history_list);
 1204|       |
 1205|   134k|	return 0;
 1206|   134k|}
vips_image_set:
 1234|   413k|{
 1235|   413k|	g_assert(name);
  ------------------
  |  |  166|   413k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   413k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   413k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|   413k|	g_assert(value);
  ------------------
  |  |  166|   413k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   413k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   413k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1237|       |
 1238|       |	/* We lock between modifying metadata and copying metadata between
 1239|       |	 * images, see vips__image_meta_copy().
 1240|       |	 *
 1241|       |	 * This prevents modification of metadata by one thread racing with
 1242|       |	 * metadata copy on another -- this can lead to crashes in
 1243|       |	 * highly-threaded applications.
 1244|       |	 */
 1245|   413k|	g_mutex_lock(&vips__meta_lock);
 1246|   413k|	meta_init(image);
 1247|   413k|	(void) meta_new(image, name, value);
 1248|   413k|	g_mutex_unlock(&vips__meta_lock);
 1249|       |
 1250|       |	/* If we're setting an EXIF data block, we need to automatically expand
 1251|       |	 * out all the tags. This will set things like xres/yres too.
 1252|       |	 *
 1253|       |	 * We do this here rather than in meta_new() since we don't want to
 1254|       |	 * trigger on copy_fields.
 1255|       |	 */
 1256|   413k|	if (strcmp(name, VIPS_META_EXIF_NAME) == 0)
  ------------------
  |  |   46|   413k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1256:6): [True: 18.0k, False: 395k]
  ------------------
 1257|  18.0k|		if (vips__exif_parse(image))
  ------------------
  |  Branch (1257:7): [True: 0, False: 18.0k]
  ------------------
 1258|      0|			g_warning("image_set: bad exif data");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1259|       |
 1260|       |#ifdef DEBUG
 1261|       |	meta_sanity(image);
 1262|       |#endif /*DEBUG*/
 1263|   413k|}
vips_image_get:
 1337|   309k|{
 1338|   309k|	int i;
 1339|   309k|	VipsMeta *meta;
 1340|       |
 1341|   309k|	g_assert(name);
  ------------------
  |  |  166|   309k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   309k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   309k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1342|   309k|	g_assert(value_copy);
  ------------------
  |  |  166|   309k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   309k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   309k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|       |
 1344|  2.36M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|  2.36M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1344:14): [True: 2.28M, False: 85.2k]
  ------------------
 1345|  2.28M|		HeaderField *field = &vips_header_fields[i];
 1346|       |
 1347|  2.28M|		if (strcmp(field->name, name) == 0) {
  ------------------
  |  Branch (1347:7): [True: 223k, False: 2.05M]
  ------------------
 1348|   223k|			GType gtype = g_type_from_name(field->type);
 1349|       |
 1350|   223k|			g_value_init(value_copy, gtype);
 1351|   223k|			vips_set_value_from_pointer(value_copy,
 1352|   223k|				G_STRUCT_MEMBER_P(image, field->offset));
  ------------------
  |  |  840|   223k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1353|       |
 1354|   223k|			return 0;
 1355|   223k|		}
 1356|  2.28M|	}
 1357|       |
 1358|  1.02M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) {
  ------------------
  |  |   60|  1.02M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1358:14): [True: 937k, False: 85.2k]
  ------------------
 1359|   937k|		HeaderField *field = &vips_header_fields_old[i];
 1360|       |
 1361|   937k|		if (strcmp(field->name, name) == 0) {
  ------------------
  |  Branch (1361:7): [True: 0, False: 937k]
  ------------------
 1362|      0|			GType gtype = g_type_from_name(field->type);
 1363|       |
 1364|      0|			g_value_init(value_copy, gtype);
 1365|      0|			vips_set_value_from_pointer(value_copy,
 1366|      0|				G_STRUCT_MEMBER_P(image, field->offset));
  ------------------
  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1367|       |
 1368|      0|			return 0;
 1369|      0|		}
 1370|   937k|	}
 1371|       |
 1372|  85.2k|	if (image->meta &&
  ------------------
  |  Branch (1372:6): [True: 85.2k, False: 0]
  ------------------
 1373|  85.2k|		(meta = g_hash_table_lookup(image->meta, name))) {
  ------------------
  |  Branch (1373:3): [True: 85.2k, False: 0]
  ------------------
 1374|  85.2k|		g_value_init(value_copy, G_VALUE_TYPE(&meta->value));
  ------------------
  |  |   59|  85.2k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1375|  85.2k|		g_value_copy(&meta->value, value_copy);
 1376|       |
 1377|  85.2k|		return 0;
 1378|  85.2k|	}
 1379|       |
 1380|      0|	vips_error("vips_image_get", _("field \"%s\" not found"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1381|       |
 1382|      0|	return -1;
 1383|  85.2k|}
vips_image_get_typeof:
 1400|   294k|{
 1401|   294k|	int i;
 1402|   294k|	VipsMeta *meta;
 1403|       |
 1404|   294k|	g_assert(name);
  ------------------
  |  |  166|   294k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   294k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   294k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1405|       |
 1406|  3.53M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|  3.53M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1406:14): [True: 3.23M, False: 294k]
  ------------------
 1407|  3.23M|		HeaderField *field = &vips_header_fields[i];
 1408|       |
 1409|  3.23M|		if (strcmp(field->name, name) == 0)
  ------------------
  |  Branch (1409:7): [True: 0, False: 3.23M]
  ------------------
 1410|      0|			return g_type_from_name(field->type);
 1411|  3.23M|	}
 1412|       |
 1413|  3.53M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) {
  ------------------
  |  |   60|  3.53M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1413:14): [True: 3.23M, False: 294k]
  ------------------
 1414|  3.23M|		HeaderField *field = &vips_header_fields_old[i];
 1415|       |
 1416|  3.23M|		if (strcmp(field->name, name) == 0)
  ------------------
  |  Branch (1416:7): [True: 0, False: 3.23M]
  ------------------
 1417|      0|			return g_type_from_name(field->type);
 1418|  3.23M|	}
 1419|       |
 1420|   294k|	if (image->meta &&
  ------------------
  |  Branch (1420:6): [True: 286k, False: 7.72k]
  ------------------
 1421|   294k|		(meta = g_hash_table_lookup(image->meta, name)))
  ------------------
  |  Branch (1421:3): [True: 66.4k, False: 220k]
  ------------------
 1422|  66.4k|		return G_VALUE_TYPE(&meta->value);
  ------------------
  |  |   59|  66.4k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1423|       |
 1424|   294k|	VIPS_DEBUG_MSG("vips_image_get_typeof: unknown field %s\n", name);
  ------------------
  |  |   47|   227k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   227k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   227k|	{ \
  |  |   49|   227k|		; \
  |  |   50|   227k|	} \
  |  |   51|   294k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   294k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|       |
 1426|   227k|	return 0;
 1427|   294k|}
vips_image_remove:
 1443|  4.93k|{
 1444|  4.93k|	gboolean result;
 1445|       |
 1446|  4.93k|	result = FALSE;
  ------------------
  |  |  794|  4.93k|#define	FALSE	(0)
  ------------------
 1447|       |
 1448|  4.93k|	if (image->meta) {
  ------------------
  |  Branch (1448:6): [True: 2.56k, False: 2.37k]
  ------------------
 1449|       |		/* We lock between modifying metadata and copying metadata
 1450|       |		 * between images, see vips__image_meta_copy().
 1451|       |		 *
 1452|       |		 * This prevents modification of metadata by one thread
 1453|       |		 * racing with metadata copy on another -- this can lead to
 1454|       |		 * crashes in highly-threaded applications.
 1455|       |		 */
 1456|  2.56k|		g_mutex_lock(&vips__meta_lock);
 1457|  2.56k|		result = g_hash_table_remove(image->meta, name);
 1458|  2.56k|		g_mutex_unlock(&vips__meta_lock);
 1459|  2.56k|	}
 1460|       |
 1461|  4.93k|	return result;
 1462|  4.93k|}
vips_image_map:
 1506|  20.3k|{
 1507|  20.3k|	int i;
 1508|  20.3k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  20.3k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1509|  20.3k|	void *result;
 1510|       |
 1511|   244k|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|   244k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1511:14): [True: 223k, False: 20.3k]
  ------------------
 1512|   223k|		HeaderField *field = &vips_header_fields[i];
 1513|       |
 1514|   223k|		(void) vips_image_get(image, field->name, &value);
 1515|   223k|		result = fn(image, field->name, &value, a);
 1516|   223k|		g_value_unset(&value);
 1517|       |
 1518|   223k|		if (result)
  ------------------
  |  Branch (1518:7): [True: 0, False: 223k]
  ------------------
 1519|      0|			return result;
 1520|   223k|	}
 1521|       |
 1522|  20.3k|	if (image->meta_traverse &&
  ------------------
  |  Branch (1522:6): [True: 17.9k, False: 2.37k]
  ------------------
 1523|  20.3k|		(result = vips_slist_map2(image->meta_traverse,
  ------------------
  |  Branch (1523:3): [True: 0, False: 17.9k]
  ------------------
 1524|  17.9k|			 (VipsSListMap2Fn) vips_image_map_fn, fn, a)))
 1525|      0|		return result;
 1526|       |
 1527|  20.3k|	return NULL;
 1528|  20.3k|}
vips_image_set_blob:
 1673|  19.0k|{
 1674|  19.0k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  19.0k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1675|       |
 1676|  19.0k|	g_value_init(&value, VIPS_TYPE_BLOB);
  ------------------
  |  |  177|  19.0k|#define VIPS_TYPE_BLOB (vips_blob_get_type())
  ------------------
 1677|  19.0k|	vips_value_set_blob(&value, free_fn, data, size);
 1678|  19.0k|	vips_image_set(image, name, &value);
 1679|  19.0k|	g_value_unset(&value);
 1680|  19.0k|}
vips_image_set_blob_copy:
 1697|  21.0k|{
 1698|  21.0k|	void *data_copy;
 1699|       |
 1700|       |	/* Cap at 100mb for sanity.
 1701|       |	 */
 1702|  21.0k|	if (!data ||
  ------------------
  |  Branch (1702:6): [True: 17.5k, False: 3.42k]
  ------------------
 1703|  21.0k|		length == 0 ||
  ------------------
  |  Branch (1703:3): [True: 1, False: 3.42k]
  ------------------
 1704|  21.0k|		length > 100 * 1024 * 1024)
  ------------------
  |  Branch (1704:3): [True: 0, False: 3.42k]
  ------------------
 1705|  17.5k|		return;
 1706|       |
 1707|       |	/* We add an extra, secret null byte at the end, just in case this blob
 1708|       |	 * is read as a C string. The libtiff reader attaches
 1709|       |	 * XMP XML as a blob, for example.
 1710|       |	 */
 1711|  3.42k|	if (!(data_copy = vips_malloc(NULL, length + 1)))
  ------------------
  |  Branch (1711:6): [True: 0, False: 3.42k]
  ------------------
 1712|      0|		return;
 1713|  3.42k|	memcpy(data_copy, data, length);
 1714|  3.42k|	((unsigned char *) data_copy)[length] = '\0';
 1715|       |
 1716|  3.42k|	vips_image_set_blob(image,
 1717|  3.42k|		name, (VipsCallbackFn) vips_area_free_cb, data_copy, length);
 1718|  3.42k|}
vips_image_get_blob:
 1738|  19.3k|{
 1739|  19.3k|	GValue value_copy = G_VALUE_INIT;
  ------------------
  |  |  191|  19.3k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1740|       |
 1741|  19.3k|	if (!meta_get_value(image, name, VIPS_TYPE_BLOB, &value_copy)) {
  ------------------
  |  |  177|  19.3k|#define VIPS_TYPE_BLOB (vips_blob_get_type())
  ------------------
  |  Branch (1741:6): [True: 19.3k, False: 0]
  ------------------
 1742|  19.3k|		*data = vips_value_get_blob(&value_copy, length);
 1743|  19.3k|		g_value_unset(&value_copy);
 1744|  19.3k|		return 0;
 1745|  19.3k|	}
 1746|       |
 1747|      0|	return -1;
 1748|  19.3k|}
vips_image_get_int:
 1766|  5.87k|{
 1767|  5.87k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  5.87k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1768|       |
 1769|  5.87k|	if (meta_get_value(image, name, G_TYPE_INT, &value))
  ------------------
  |  |   94|  5.87k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|  5.87k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  5.87k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1769:6): [True: 0, False: 5.87k]
  ------------------
 1770|      0|		return -1;
 1771|  5.87k|	*out = g_value_get_int(&value);
 1772|  5.87k|	g_value_unset(&value);
 1773|       |
 1774|  5.87k|	return 0;
 1775|  5.87k|}
vips_image_set_int:
 1791|  94.7k|{
 1792|  94.7k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  94.7k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1793|       |
 1794|  94.7k|	g_value_init(&value, G_TYPE_INT);
  ------------------
  |  |   94|  94.7k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|  94.7k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  94.7k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1795|  94.7k|	g_value_set_int(&value, i);
 1796|  94.7k|	vips_image_set(image, name, &value);
 1797|  94.7k|	g_value_unset(&value);
 1798|  94.7k|}
vips_image_set_double:
 1841|  7.08k|{
 1842|  7.08k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  7.08k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1843|       |
 1844|  7.08k|	g_value_init(&value, G_TYPE_DOUBLE);
  ------------------
  |  |  148|  7.08k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|  7.08k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  7.08k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1845|  7.08k|	g_value_set_double(&value, d);
 1846|  7.08k|	vips_image_set(image, name, &value);
 1847|  7.08k|	g_value_unset(&value);
 1848|  7.08k|}
vips_image_get_string:
 1871|  59.9k|{
 1872|  59.9k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  59.9k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1873|       |
 1874|  59.9k|	if (vips_image_get(image, name, &value))
  ------------------
  |  Branch (1874:6): [True: 0, False: 59.9k]
  ------------------
 1875|      0|		return -1;
 1876|       |
 1877|  59.9k|	if (G_VALUE_TYPE(&value) == VIPS_TYPE_REF_STRING) {
  ------------------
  |  |   59|  59.9k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	if (G_VALUE_TYPE(&value) == VIPS_TYPE_REF_STRING) {
  ------------------
  |  |  159|  59.9k|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
  |  Branch (1877:6): [True: 59.9k, False: 0]
  ------------------
 1878|  59.9k|		VipsArea *area;
 1879|       |
 1880|  59.9k|		area = g_value_get_boxed(&value);
 1881|  59.9k|		*out = area->data;
 1882|  59.9k|	}
 1883|      0|	else if (G_VALUE_TYPE(&value) == G_TYPE_STRING) {
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	else if (G_VALUE_TYPE(&value) == G_TYPE_STRING) {
  ------------------
  |  |  154|      0|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|      0|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1883:11): [True: 0, False: 0]
  ------------------
 1884|      0|		*out = g_value_get_string(&value);
 1885|      0|	}
 1886|      0|	else {
 1887|      0|		vips_error("VipsImage",
 1888|      0|			_("field \"%s\" is of type %s, not VipsRefString"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1889|      0|			name,
 1890|      0|			g_type_name(G_VALUE_TYPE(&value)));
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1891|      0|		g_value_unset(&value);
 1892|       |
 1893|      0|		return -1;
 1894|      0|	}
 1895|       |
 1896|  59.9k|	g_value_unset(&value);
 1897|       |
 1898|  59.9k|	return 0;
 1899|  59.9k|}
vips_image_set_string:
 1915|   290k|{
 1916|   290k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|   290k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1917|       |
 1918|   290k|	g_value_init(&value, VIPS_TYPE_REF_STRING);
  ------------------
  |  |  159|   290k|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
 1919|   290k|	vips_value_set_ref_string(&value, str);
 1920|   290k|	vips_image_set(image, name, &value);
 1921|   290k|	g_value_unset(&value);
 1922|   290k|}
vips_image_set_array_int:
 2096|  1.39k|{
 2097|  1.39k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  1.39k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 2098|       |
 2099|  1.39k|	g_value_init(&value, VIPS_TYPE_ARRAY_INT);
  ------------------
  |  |  221|  1.39k|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 2100|  1.39k|	vips_value_set_array_int(&value, array, n);
 2101|  1.39k|	vips_image_set(image, name, &value);
 2102|  1.39k|	g_value_unset(&value);
 2103|  1.39k|}
vips_image_set_array_double:
 2154|    757|{
 2155|    757|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|    757|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 2156|       |
 2157|    757|	g_value_init(&value, VIPS_TYPE_ARRAY_DOUBLE);
  ------------------
  |  |  201|    757|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 2158|    757|	vips_value_set_array_double(&value, array, n);
 2159|    757|	vips_image_set(image, name, &value);
 2160|    757|	g_value_unset(&value);
 2161|    757|}
header.c:vips_image_default_interpretation:
  595|    224|{
  596|    224|	switch (image->Coding) {
  597|      0|	case VIPS_CODING_LABQ:
  ------------------
  |  Branch (597:2): [True: 0, False: 224]
  ------------------
  598|      0|		return VIPS_INTERPRETATION_LABQ;
  599|      0|	case VIPS_CODING_RAD:
  ------------------
  |  Branch (599:2): [True: 0, False: 224]
  ------------------
  600|      0|		return VIPS_INTERPRETATION_sRGB;
  601|    224|	default:
  ------------------
  |  Branch (601:2): [True: 224, False: 0]
  ------------------
  602|    224|		break;
  603|    224|	}
  604|       |
  605|    224|	switch (image->BandFmt) {
  606|     24|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (606:2): [True: 24, False: 200]
  ------------------
  607|     50|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (607:2): [True: 26, False: 198]
  ------------------
  608|     75|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (608:2): [True: 25, False: 199]
  ------------------
  609|    115|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (609:2): [True: 40, False: 184]
  ------------------
  610|    138|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (610:2): [True: 23, False: 201]
  ------------------
  611|    138|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (611:2): [True: 0, False: 224]
  ------------------
  612|    138|		switch (image->Bands) {
  613|      0|		case 1:
  ------------------
  |  Branch (613:3): [True: 0, False: 138]
  ------------------
  614|      0|		case 2:
  ------------------
  |  Branch (614:3): [True: 0, False: 138]
  ------------------
  615|      0|			return VIPS_INTERPRETATION_B_W;
  616|       |
  617|    138|		case 3:
  ------------------
  |  Branch (617:3): [True: 138, False: 0]
  ------------------
  618|    138|		case 4:
  ------------------
  |  Branch (618:3): [True: 0, False: 138]
  ------------------
  619|       |			// we don't send float/double to scrgb, that's very likely to
  620|       |			// cause much more confusion, since "linear" makes float rgg all
  621|       |			// the time
  622|       |			//
  623|       |			// we do send u16 to rgb16/grey16 since that's a common case,
  624|       |			// see below
  625|    138|			return VIPS_INTERPRETATION_sRGB;
  626|       |
  627|      0|		default:
  ------------------
  |  Branch (627:3): [True: 0, False: 138]
  ------------------
  628|      0|			return VIPS_INTERPRETATION_MULTIBAND;
  629|    138|		}
  630|       |
  631|     26|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (631:2): [True: 26, False: 198]
  ------------------
  632|     26|		switch (image->Bands) {
  633|      0|		case 1:
  ------------------
  |  Branch (633:3): [True: 0, False: 26]
  ------------------
  634|      0|			return VIPS_INTERPRETATION_MATRIX;
  635|       |
  636|     26|		default:
  ------------------
  |  Branch (636:3): [True: 26, False: 0]
  ------------------
  637|     26|			return VIPS_INTERPRETATION_MULTIBAND;
  638|     26|		}
  639|       |
  640|     60|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (640:2): [True: 60, False: 164]
  ------------------
  641|     60|		switch (image->Bands) {
  642|      0|		case 1:
  ------------------
  |  Branch (642:3): [True: 0, False: 60]
  ------------------
  643|      0|		case 2:
  ------------------
  |  Branch (643:3): [True: 0, False: 60]
  ------------------
  644|      0|			return VIPS_INTERPRETATION_GREY16;
  645|       |
  646|     60|		case 3:
  ------------------
  |  Branch (646:3): [True: 60, False: 0]
  ------------------
  647|     60|		case 4:
  ------------------
  |  Branch (647:3): [True: 0, False: 60]
  ------------------
  648|     60|			return VIPS_INTERPRETATION_RGB16;
  649|       |
  650|      0|		default:
  ------------------
  |  Branch (650:3): [True: 0, False: 60]
  ------------------
  651|      0|			return VIPS_INTERPRETATION_MULTIBAND;
  652|     60|		}
  653|       |
  654|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (654:2): [True: 0, False: 224]
  ------------------
  655|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (655:2): [True: 0, False: 224]
  ------------------
  656|      0|		return VIPS_INTERPRETATION_FOURIER;
  657|       |
  658|      0|	default:
  ------------------
  |  Branch (658:2): [True: 0, False: 224]
  ------------------
  659|      0|		return VIPS_INTERPRETATION_MULTIBAND;
  660|    224|	}
  661|    224|}
header.c:meta_init:
  382|   543k|{
  383|   543k|	if (!im->meta) {
  ------------------
  |  Branch (383:6): [True: 160k, False: 383k]
  ------------------
  384|   160k|		g_assert(!im->meta_traverse);
  ------------------
  |  |  166|   160k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   160k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   160k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|   160k|		im->meta = g_hash_table_new_full(g_str_hash, g_str_equal,
  386|   160k|			NULL, (GDestroyNotify) meta_free);
  387|   160k|	}
  388|   543k|}
header.c:meta_free:
  307|  1.08M|{
  308|       |#ifdef DEBUG
  309|       |	{
  310|       |		char *str_value;
  311|       |
  312|       |		str_value = g_strdup_value_contents(&meta->value);
  313|       |		printf("meta_free: name %s, value = %s\n",
  314|       |			meta->name, str_value);
  315|       |		g_free(str_value);
  316|       |	}
  317|       |#endif /*DEBUG*/
  318|       |
  319|  1.08M|	if (meta->im)
  ------------------
  |  Branch (319:6): [True: 1.08M, False: 0]
  ------------------
  320|  1.08M|		meta->im->meta_traverse =
  321|  1.08M|			g_slist_remove(meta->im->meta_traverse, meta);
  322|       |
  323|  1.08M|	g_value_unset(&meta->value);
  324|  1.08M|	g_free(meta->name);
  325|  1.08M|	g_free(meta);
  326|  1.08M|}
header.c:meta_cp_field:
 1116|   674k|{
 1117|       |#ifdef DEBUG
 1118|       |	{
 1119|       |		char *str_value;
 1120|       |
 1121|       |		str_value = g_strdup_value_contents(&meta->value);
 1122|       |		printf("vips__meta_cp: copying name %s, value = %s\n",
 1123|       |			meta->name, str_value);
 1124|       |		g_free(str_value);
 1125|       |	}
 1126|       |#endif /*DEBUG*/
 1127|       |
 1128|   674k|	(void) meta_new(dst, meta->name, &meta->value);
 1129|       |
 1130|       |#ifdef DEBUG
 1131|       |	meta_sanity(dst);
 1132|       |#endif /*DEBUG*/
 1133|       |
 1134|   674k|	return NULL;
 1135|   674k|}
header.c:meta_new:
  330|  1.08M|{
  331|  1.08M|	VipsMeta *meta;
  332|       |
  333|  1.08M|	meta = g_new(VipsMeta, 1);
  ------------------
  |  |  282|  1.08M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  1.08M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  1.08M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  1.08M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  1.08M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  1.08M|	  gpointer __p;						\
  |  |  |  |  231|  1.08M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 1.08M]
  |  |  |  |  ------------------
  |  |  |  |  232|  1.08M|	    __p = g_##func (__n);				\
  |  |  |  |  233|  1.08M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 1.08M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  1.08M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 1.08M]
  |  |  |  |  |  Branch (234:26): [True: 1.08M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  1.08M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  1.08M|	  else							\
  |  |  |  |  237|  1.08M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  1.08M|	  __p;							\
  |  |  |  |  239|  1.08M|	}))
  |  |  ------------------
  ------------------
  334|  1.08M|	meta->im = image;
  335|  1.08M|	meta->name = NULL;
  336|  1.08M|	memset(&meta->value, 0, sizeof(GValue));
  337|  1.08M|	meta->name = g_strdup(name);
  338|       |
  339|       |	/* Special case: we don't want to have G_STRING on meta. They will be
  340|       |	 * copied down pipelines, plus some of our API (like
  341|       |	 * vips_image_get_string()) assumes that the GValue is a refstring and
  342|       |	 * that read-only pointers can be handed out.
  343|       |	 *
  344|       |	 * Turn G_TYPE_STRING into VIPS_TYPE_REF_STRING.
  345|       |	 */
  346|  1.08M|	if (G_VALUE_TYPE(value) == G_TYPE_STRING)
  ------------------
  |  |   59|  1.08M|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	if (G_VALUE_TYPE(value) == G_TYPE_STRING)
  ------------------
  |  |  154|  1.08M|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|  1.08M|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.08M|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (346:6): [True: 0, False: 1.08M]
  ------------------
  347|      0|		g_value_init(&meta->value, VIPS_TYPE_REF_STRING);
  ------------------
  |  |  159|      0|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
  348|  1.08M|	else
  349|  1.08M|		g_value_init(&meta->value, G_VALUE_TYPE(value));
  ------------------
  |  |   59|  1.08M|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  350|       |
  351|       |	/* We don't do any conversions that can fail.
  352|       |	 */
  353|  1.08M|	(void) g_value_transform(value, &meta->value);
  354|       |
  355|  1.08M|	image->meta_traverse = g_slist_append(image->meta_traverse, meta);
  356|  1.08M|	g_hash_table_replace(image->meta, meta->name, meta);
  357|       |
  358|       |#ifdef DEBUG
  359|       |	{
  360|       |		char *str_value;
  361|       |
  362|       |		str_value = g_strdup_value_contents(value);
  363|       |		printf("meta_new: name %s, value = %s\n", name, str_value);
  364|       |		g_free(str_value);
  365|       |	}
  366|       |#endif /*DEBUG*/
  367|       |
  368|  1.08M|	return meta;
  369|  1.08M|}
header.c:vips_set_value_from_pointer:
 1270|   223k|{
 1271|   223k|	GType type = G_VALUE_TYPE(value);
  ------------------
  |  |   59|   223k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1272|       |
 1273|       |	/* The fundamental type ... eg. G_TYPE_ENUM for a VIPS_TYPE_KERNEL,
 1274|       |	 * or G_TYPE_OBJECT for VIPS_TYPE_IMAGE().
 1275|       |	 */
 1276|   223k|	GType fundamental = G_TYPE_FUNDAMENTAL(type);
  ------------------
  |  |   38|   223k|#define G_TYPE_FUNDAMENTAL(type)	(g_type_fundamental (type))
  ------------------
 1277|       |
 1278|   223k|	if (fundamental == G_TYPE_INT)
  ------------------
  |  |   94|   223k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|   223k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   223k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1278:6): [True: 101k, False: 122k]
  ------------------
 1279|   101k|		g_value_set_int(value, *((int *) data));
 1280|   122k|	else if (fundamental == G_TYPE_DOUBLE)
  ------------------
  |  |  148|   122k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|   122k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   122k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1280:11): [True: 40.6k, False: 81.3k]
  ------------------
 1281|  40.6k|		g_value_set_double(value, *((double *) data));
 1282|  81.3k|	else if (fundamental == G_TYPE_ENUM)
  ------------------
  |  |  130|  81.3k|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  221|  81.3k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  81.3k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1282:11): [True: 61.0k, False: 20.3k]
  ------------------
 1283|  61.0k|		g_value_set_enum(value, *((int *) data));
 1284|  20.3k|	else if (fundamental == G_TYPE_STRING)
  ------------------
  |  |  154|  20.3k|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|  20.3k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  20.3k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1284:11): [True: 20.3k, False: 0]
  ------------------
 1285|       |		// we don't want to copy the string (ie. the filename, usually) since
 1286|       |		// it'll then be freed when the value is unset ... instead we must
 1287|       |		// directly use the pointer owned by the VipsImage
 1288|  20.3k|		g_value_set_static_string(value, *((char **) data));
 1289|      0|	else
 1290|      0|		g_warning("%s: unimplemented vips_set_value_from_pointer() type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1291|   223k|			G_STRLOC,
 1292|   223k|			g_type_name(type));
 1293|   223k|}
header.c:vips_image_map_fn:
 1476|  92.7k|{
 1477|  92.7k|	int i;
 1478|       |
 1479|       |	/* Hide deprecated fields.
 1480|       |	 */
 1481|   550k|	for (i = 0; i < VIPS_NUMBER(vips_image_header_deprecated); i++)
  ------------------
  |  |   60|   550k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1481:14): [True: 461k, False: 89.1k]
  ------------------
 1482|   461k|		if (strcmp(meta->name, vips_image_header_deprecated[i]) == 0)
  ------------------
  |  Branch (1482:7): [True: 3.56k, False: 457k]
  ------------------
 1483|  3.56k|			return NULL;
 1484|       |
 1485|  89.1k|	return fn(meta->im, meta->name, &meta->value, a);
 1486|  92.7k|}
header.c:meta_get_value:
 1606|  25.2k|{
 1607|  25.2k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  25.2k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1608|       |
 1609|  25.2k|	if (vips_image_get(image, name, &value))
  ------------------
  |  Branch (1609:6): [True: 0, False: 25.2k]
  ------------------
 1610|      0|		return -1;
 1611|  25.2k|	g_value_init(value_copy, type);
 1612|  25.2k|	if (!g_value_transform(&value, value_copy)) {
  ------------------
  |  Branch (1612:6): [True: 0, False: 25.2k]
  ------------------
 1613|      0|		vips_error("VipsImage",
 1614|      0|			_("field \"%s\" is of type %s, not %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1615|      0|			name,
 1616|      0|			g_type_name(G_VALUE_TYPE(&value)),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1617|      0|			g_type_name(type));
 1618|      0|		g_value_unset(&value);
 1619|       |
 1620|      0|		return -1;
 1621|      0|	}
 1622|  25.2k|	g_value_unset(&value);
 1623|       |
 1624|  25.2k|	return 0;
 1625|  25.2k|}

vips_image_written:
 1364|   151k|{
 1365|   151k|	int result;
 1366|       |
 1367|   151k|	VIPS_DEBUG_MSG("vips_image_written: %p\n", image);
  ------------------
  |  |   47|   151k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   151k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   151k|	{ \
  |  |   49|   151k|		; \
  |  |   50|   151k|	} \
  |  |   51|   151k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   151k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1368|       |
 1369|   151k|	result = 0;
 1370|   151k|	g_signal_emit(image, vips_image_signals[SIG_WRITTEN], 0, &result);
 1371|       |
 1372|   151k|	return result;
 1373|   151k|}
vips_image_minimise_all:
 1443|  51.9k|{
 1444|       |	/* Minimisation will modify things like sources, so we can't run it
 1445|       |	 * from many threads.
 1446|       |	 */
 1447|  51.9k|	g_mutex_lock(&vips__minimise_lock);
 1448|       |
 1449|  51.9k|	(void) vips__link_map(image, TRUE,
  ------------------
  |  |  798|  51.9k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  51.9k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1450|  51.9k|		(VipsSListMap2Fn) vips_image_minimise_all_cb, NULL, NULL);
 1451|       |
 1452|  51.9k|	g_mutex_unlock(&vips__minimise_lock);
 1453|  51.9k|}
vips_image_preeval:
 1524|  25.9k|{
 1525|  25.9k|	if (image->progress_signal) {
  ------------------
  |  Branch (1525:6): [True: 11.0k, False: 14.8k]
  ------------------
 1526|  11.0k|		VIPS_DEBUG_MSG("vips_image_preeval: %p\n", image);
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1527|       |
 1528|  11.0k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  11.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1529|  11.0k|			VIPS_OBJECT(image->progress_signal)));
 1530|       |
 1531|  11.0k|		(void) vips_progress_add(image);
 1532|       |
 1533|       |		/* For vips7 compat, we also have to make sure ->time on the
 1534|       |		 * image that was originally marked with
 1535|       |		 * vips_image_set_progress() is valid.
 1536|       |		 */
 1537|  11.0k|		(void) vips_progress_add(image->progress_signal);
 1538|       |
 1539|  11.0k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1539:7): [True: 11.0k, False: 0]
  ------------------
 1540|  11.0k|			g_signal_emit(image->progress_signal,
 1541|  11.0k|				vips_image_signals[SIG_PREEVAL], 0,
 1542|  11.0k|				image->time);
 1543|  11.0k|	}
 1544|  25.9k|}
vips_image_eval:
 1550|  13.9k|{
 1551|  13.9k|	if (image->progress_signal &&
  ------------------
  |  Branch (1551:6): [True: 6.99k, False: 6.98k]
  ------------------
 1552|  13.9k|		image->time) {
  ------------------
  |  Branch (1552:3): [True: 6.99k, False: 0]
  ------------------
 1553|  6.99k|		VIPS_DEBUG_MSG("vips_image_eval: %p\n", image);
  ------------------
  |  |   47|  6.99k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  6.99k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  6.99k|	{ \
  |  |   49|  6.99k|		; \
  |  |   50|  6.99k|	} \
  |  |   51|  6.99k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.99k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1554|       |
 1555|  6.99k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  6.99k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.99k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.99k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1556|  6.99k|			VIPS_OBJECT(image->progress_signal)));
 1557|       |
 1558|  6.99k|		vips_progress_update(image->time, processed);
 1559|       |
 1560|       |		/* For vips7 compat, update the ->time on the signalling image
 1561|       |		 * too, even though it may have a different width/height to
 1562|       |		 * the image we are actually generating.
 1563|       |		 */
 1564|  6.99k|		if (image->progress_signal->time != image->time)
  ------------------
  |  Branch (1564:7): [True: 6.99k, False: 0]
  ------------------
 1565|  6.99k|			vips_progress_update(image->progress_signal->time,
 1566|  6.99k|				processed);
 1567|       |
 1568|  6.99k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1568:7): [True: 6.99k, False: 0]
  ------------------
 1569|  6.99k|			g_signal_emit(image->progress_signal,
 1570|  6.99k|				vips_image_signals[SIG_EVAL], 0,
 1571|  6.99k|				image->time);
 1572|  6.99k|	}
 1573|  13.9k|}
vips_image_posteval:
 1577|  25.9k|{
 1578|  25.9k|	if (image->progress_signal &&
  ------------------
  |  Branch (1578:6): [True: 11.0k, False: 14.8k]
  ------------------
 1579|  25.9k|		image->progress_signal->time) {
  ------------------
  |  Branch (1579:3): [True: 11.0k, False: 0]
  ------------------
 1580|  11.0k|		gint64 processed;
 1581|       |
 1582|  11.0k|		VIPS_DEBUG_MSG("vips_image_posteval: %p\n", image);
  ------------------
  |  |   47|  11.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.0k|	{ \
  |  |   49|  11.0k|		; \
  |  |   50|  11.0k|	} \
  |  |   51|  11.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1583|       |
 1584|  11.0k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  11.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  11.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1585|  11.0k|			VIPS_OBJECT(image->progress_signal)));
 1586|       |
 1587|       |		/* Make sure posteval sees a finished progress.
 1588|       |		 */
 1589|  11.0k|		processed = image->time->tpels;
 1590|  11.0k|		vips_progress_update(image->time, processed);
 1591|       |
 1592|       |		/* For vips7 compat, update the ->time on the signalling image
 1593|       |		 * too, even though it may have a different width/height to
 1594|       |		 * the image we are actually generating.
 1595|       |		 */
 1596|  11.0k|		if (image->progress_signal->time != image->time)
  ------------------
  |  Branch (1596:7): [True: 11.0k, False: 0]
  ------------------
 1597|  11.0k|			vips_progress_update(image->progress_signal->time,
 1598|  11.0k|				processed);
 1599|       |
 1600|  11.0k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1600:7): [True: 11.0k, False: 0]
  ------------------
 1601|  11.0k|			g_signal_emit(image->progress_signal,
 1602|  11.0k|				vips_image_signals[SIG_POSTEVAL], 0,
 1603|  11.0k|				image->time);
 1604|  11.0k|	}
 1605|  25.9k|}
vips_image_iskilled:
 1645|   336k|{
 1646|   336k|	gboolean kill;
 1647|       |
 1648|   336k|	kill = image->kill;
 1649|       |
 1650|       |	// check the image we are signalling progress on too
 1651|   336k|	if (image->progress_signal)
  ------------------
  |  Branch (1651:6): [True: 64.0k, False: 272k]
  ------------------
 1652|  64.0k|		kill |= image->progress_signal->kill;
 1653|       |
 1654|       |	/* Has kill been set for this image? If yes, abort evaluation.
 1655|       |	 */
 1656|   336k|	if (kill) {
  ------------------
  |  Branch (1656:6): [True: 0, False: 336k]
  ------------------
 1657|      0|		VIPS_DEBUG_MSG("vips_image_iskilled: %s (%p) killed\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1658|      0|			image->filename, image);
 1659|      0|		vips_error("VipsImage",
 1660|      0|			_("killed for image \"%s\""), image->filename);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1661|       |
 1662|       |		/* We've picked up the kill message, it's now our caller's
 1663|       |		 * responsibility to pass the message up the chain.
 1664|       |		 */
 1665|      0|		vips_image_set_kill(image, FALSE);
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 1666|      0|	}
 1667|       |
 1668|   336k|	return kill;
 1669|   336k|}
vips_image_set_kill:
 1683|  25.9k|{
 1684|  25.9k|	if (image->kill != kill)
  ------------------
  |  Branch (1684:6): [True: 0, False: 25.9k]
  ------------------
 1685|  25.9k|		VIPS_DEBUG_MSG("vips_image_set_kill: %s (%p) %d\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|  25.9k|			image->filename, image, kill);
 1687|       |
 1688|  25.9k|	image->kill = kill;
 1689|       |
 1690|       |	// set here too
 1691|  25.9k|	if (image->progress_signal)
  ------------------
  |  Branch (1691:6): [True: 11.0k, False: 14.8k]
  ------------------
 1692|  11.0k|		image->progress_signal->kill = kill;
 1693|  25.9k|}
vips_image_new:
 1723|   154k|{
 1724|   154k|	VipsImage *image;
 1725|   154k|	char filename[26];
 1726|       |
 1727|   154k|	vips_check_init();
 1728|       |
 1729|   154k|	vips_image_temp_name(filename, sizeof(filename));
 1730|       |
 1731|   154k|	image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL));
  ------------------
  |  |  171|   154k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   154k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   154k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   154k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
 1732|   154k|	g_object_set(image,
 1733|   154k|		"filename", filename,
 1734|   154k|		"mode", "p",
 1735|   154k|		NULL);
 1736|   154k|	if (vips_object_build(VIPS_OBJECT(image))) {
  ------------------
  |  |  433|   154k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   154k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   154k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1736:6): [True: 0, False: 154k]
  ------------------
 1737|      0|		VIPS_UNREF(image);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|      0|		return NULL;
 1739|      0|	}
 1740|       |
 1741|   154k|	return image;
 1742|   154k|}
vips_image_new_mode:
 1746|  18.0k|{
 1747|  18.0k|	VipsImage *image;
 1748|       |
 1749|  18.0k|	g_assert(filename);
  ------------------
  |  |  166|  18.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  18.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1750|  18.0k|	g_assert(mode);
  ------------------
  |  |  166|  18.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  18.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|       |
 1752|  18.0k|	vips_check_init();
 1753|       |
 1754|  18.0k|	image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL));
  ------------------
  |  |  171|  18.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  18.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  18.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|  18.0k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
 1755|  18.0k|	g_object_set(image,
 1756|  18.0k|		"filename", filename,
 1757|  18.0k|		"mode", mode,
 1758|  18.0k|		NULL);
 1759|  18.0k|	if (vips_object_build(VIPS_OBJECT(image))) {
  ------------------
  |  |  433|  18.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  18.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  18.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1759:6): [True: 0, False: 18.0k]
  ------------------
 1760|      0|		VIPS_UNREF(image);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|      0|		return NULL;
 1762|      0|	}
 1763|       |
 1764|  18.0k|	return image;
 1765|  18.0k|}
vips_image_new_memory:
 1779|  18.0k|{
 1780|  18.0k|	char filename[26];
 1781|       |
 1782|  18.0k|	vips_image_temp_name(filename, sizeof(filename));
 1783|  18.0k|	return vips_image_new_mode(filename, "t");
 1784|  18.0k|}
vips_image_new_from_buffer:
 2153|  33.1k|{
 2154|  33.1k|	const char *operation_name;
 2155|  33.1k|	va_list ap;
 2156|  33.1k|	int result;
 2157|  33.1k|	VipsImage *out;
 2158|  33.1k|	VipsBlob *blob;
 2159|       |
 2160|  33.1k|	vips_check_init();
 2161|       |
 2162|  33.1k|	if (!(operation_name = vips_foreign_find_load_buffer(buf, len)))
  ------------------
  |  Branch (2162:6): [True: 7.16k, False: 25.9k]
  ------------------
 2163|  7.16k|		return NULL;
 2164|       |
 2165|       |	/* We don't take a copy of the data or free it.
 2166|       |	 */
 2167|  25.9k|	blob = vips_blob_new(NULL, buf, len);
 2168|       |
 2169|  25.9k|	va_start(ap, option_string);
 2170|  25.9k|	result = vips_call_split_option_string(operation_name,
 2171|  25.9k|		option_string, ap, blob, &out);
 2172|  25.9k|	va_end(ap);
 2173|       |
 2174|  25.9k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  25.9k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2175|       |
 2176|  25.9k|	if (result)
  ------------------
  |  Branch (2176:6): [True: 9.17k, False: 16.8k]
  ------------------
 2177|  9.17k|		return NULL;
 2178|       |
 2179|  16.8k|	return out;
 2180|  25.9k|}
vips_get_disc_threshold:
 2517|  14.8k|{
 2518|  14.8k|	static gboolean done = FALSE;
  ------------------
  |  |  794|  14.8k|#define	FALSE	(0)
  ------------------
 2519|  14.8k|	static guint64 threshold;
 2520|       |
 2521|  14.8k|	if (!done) {
  ------------------
  |  Branch (2521:6): [True: 1, False: 14.8k]
  ------------------
 2522|      1|		const char *env;
 2523|       |
 2524|      1|		done = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2525|       |
 2526|       |		/* 100mb default.
 2527|       |		 */
 2528|      1|		threshold = 100 * 1024 * 1024;
 2529|       |
 2530|      1|		if ((env = g_getenv("VIPS_DISC_THRESHOLD"))
  ------------------
  |  Branch (2530:7): [True: 0, False: 1]
  ------------------
 2531|       |#if ENABLE_DEPRECATED
 2532|       |			|| (env = g_getenv("IM_DISC_THRESHOLD"))
 2533|       |#endif
 2534|      1|		)
 2535|      0|			threshold = vips__parse_size(env);
 2536|       |
 2537|      1|		if (vips__disc_threshold)
  ------------------
  |  Branch (2537:7): [True: 0, False: 1]
  ------------------
 2538|      0|			threshold = vips__parse_size(vips__disc_threshold);
 2539|       |
 2540|       |#ifdef DEBUG
 2541|       |		printf("vips_get_disc_threshold: %zd bytes\n", threshold);
 2542|       |#endif /*DEBUG*/
 2543|      1|	}
 2544|       |
 2545|  14.8k|	return threshold;
 2546|  14.8k|}
vips_image_write:
 2625|  13.7k|{
 2626|       |	/* image needs to stay alive for this call. It can be unreffed during
 2627|       |	 * the generate.
 2628|       |	 */
 2629|  13.7k|	g_object_ref(image);
 2630|       |
 2631|  13.7k|	if (vips_image_pio_input(image) ||
  ------------------
  |  Branch (2631:6): [True: 0, False: 13.7k]
  ------------------
 2632|  13.7k|		vips_image_pipelinev(out,
  ------------------
  |  Branch (2632:3): [True: 0, False: 13.7k]
  ------------------
 2633|  13.7k|			VIPS_DEMAND_STYLE_THINSTRIP, image, NULL)) {
 2634|      0|		g_object_unref(image);
 2635|      0|		return -1;
 2636|      0|	}
 2637|       |
 2638|  13.7k|	if (vips_image_generate(out,
  ------------------
  |  Branch (2638:6): [True: 4.84k, False: 8.91k]
  ------------------
 2639|  13.7k|			vips_start_one, vips_image_write_gen, vips_stop_one,
 2640|  13.7k|			image, NULL)) {
 2641|  4.84k|		g_object_unref(image);
 2642|  4.84k|		return -1;
 2643|  4.84k|	}
 2644|       |
 2645|       |	/* If @out is a partial image, we need to unref @image when out is
 2646|       |	 * unreffed.
 2647|       |	 *
 2648|       |	 * If it's not partial, perhaps a file we write to or a memory image,
 2649|       |	 * we need to break any links between @image and @out created by
 2650|       |	 * vips_image_pipelinev().
 2651|       |	 */
 2652|  8.91k|	if (vips_image_ispartial(out)) {
  ------------------
  |  Branch (2652:6): [True: 2.64k, False: 6.27k]
  ------------------
 2653|  2.64k|		vips_object_local(out, image);
  ------------------
  |  |  698|  2.64k|	(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
  |  |  ------------------
  |  |  |  |  491|  2.64k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |  |  ------------------
  ------------------
 2654|  2.64k|	}
 2655|  6.27k|	else {
 2656|  6.27k|		vips__reorder_clear(out);
 2657|  6.27k|		vips__link_break_all(out);
 2658|  6.27k|		g_object_unref(image);
 2659|  6.27k|	}
 2660|       |
 2661|  8.91k|	return 0;
 2662|  13.7k|}
vips_image_write_to_buffer:
 2753|  15.5k|{
 2754|  15.5k|	char filename[VIPS_PATH_MAX];
 2755|  15.5k|	char option_string[VIPS_PATH_MAX];
 2756|  15.5k|	const char *operation_name;
 2757|  15.5k|	VipsBlob *blob;
 2758|  15.5k|	va_list ap;
 2759|  15.5k|	int result;
 2760|       |
 2761|  15.5k|	vips__filename_split8(suffix, filename, option_string);
 2762|       |
 2763|  15.5k|	vips_error_freeze();
 2764|  15.5k|	operation_name = vips_foreign_find_save_target(filename);
 2765|  15.5k|	vips_error_thaw();
 2766|       |
 2767|  15.5k|	if (operation_name) {
  ------------------
  |  Branch (2767:6): [True: 15.5k, False: 0]
  ------------------
 2768|  15.5k|		VipsTarget *target;
 2769|       |
 2770|  15.5k|		if (!(target = vips_target_new_to_memory()))
  ------------------
  |  Branch (2770:7): [True: 0, False: 15.5k]
  ------------------
 2771|      0|			return -1;
 2772|       |
 2773|  15.5k|		va_start(ap, size);
 2774|  15.5k|		result = vips_call_split_option_string(operation_name,
 2775|  15.5k|			option_string, ap, in, target);
 2776|  15.5k|		va_end(ap);
 2777|       |
 2778|  15.5k|		if (result) {
  ------------------
  |  Branch (2778:7): [True: 8.25k, False: 7.30k]
  ------------------
 2779|  8.25k|			VIPS_UNREF(target);
  ------------------
  |  |   57|  8.25k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  8.25k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.25k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.25k|	{ \
  |  |  |  |   43|  8.25k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 8.25k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  8.25k|			(void) F((S)); \
  |  |  |  |   45|  8.25k|			(S) = 0; \
  |  |  |  |   46|  8.25k|		} \
  |  |  |  |   47|  8.25k|	} \
  |  |  |  |   48|  8.25k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.25k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2780|  8.25k|			return -1;
 2781|  8.25k|		}
 2782|       |
 2783|  7.30k|		g_object_get(target, "blob", &blob, NULL);
 2784|  7.30k|		VIPS_UNREF(target);
  ------------------
  |  |   57|  7.30k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  7.30k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  7.30k|	{ \
  |  |  |  |   43|  7.30k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 7.30k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  7.30k|			(void) F((S)); \
  |  |  |  |   45|  7.30k|			(S) = 0; \
  |  |  |  |   46|  7.30k|		} \
  |  |  |  |   47|  7.30k|	} \
  |  |  |  |   48|  7.30k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2785|  7.30k|	}
 2786|      0|	else if ((operation_name =
  ------------------
  |  Branch (2786:11): [True: 0, False: 0]
  ------------------
 2787|      0|					 vips_foreign_find_save_buffer(filename))) {
 2788|       |
 2789|      0|		va_start(ap, size);
 2790|      0|		result = vips_call_split_option_string(operation_name,
 2791|      0|			option_string, ap, in, &blob);
 2792|      0|		va_end(ap);
 2793|       |
 2794|      0|		if (result)
  ------------------
  |  Branch (2794:7): [True: 0, False: 0]
  ------------------
 2795|      0|			return -1;
 2796|      0|	}
 2797|      0|	else
 2798|      0|		return -1;
 2799|       |
 2800|  7.30k|	*buf = NULL;
 2801|  7.30k|	if (size)
  ------------------
  |  Branch (2801:6): [True: 7.30k, False: 0]
  ------------------
 2802|  7.30k|		*size = 0;
 2803|       |
 2804|  7.30k|	if (blob) {
  ------------------
  |  Branch (2804:6): [True: 7.30k, False: 0]
  ------------------
 2805|  7.30k|		if (buf) {
  ------------------
  |  Branch (2805:7): [True: 7.30k, False: 0]
  ------------------
 2806|  7.30k|			*buf = VIPS_AREA(blob)->data;
  ------------------
  |  |  137|  7.30k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2807|  7.30k|			VIPS_AREA(blob)->free_fn = NULL;
  ------------------
  |  |  137|  7.30k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2808|  7.30k|		}
 2809|  7.30k|		if (size)
  ------------------
  |  Branch (2809:7): [True: 7.30k, False: 0]
  ------------------
 2810|  7.30k|			*size = VIPS_AREA(blob)->length;
  ------------------
  |  |  137|  7.30k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2811|       |
 2812|  7.30k|		vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  7.30k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2813|  7.30k|	}
 2814|       |
 2815|  7.30k|	return 0;
 2816|  15.5k|}
vips_image_decode:
 2925|  35.8k|{
 2926|       |	/* Keep in sync with vips__vector_to_ink().
 2927|       |	 */
 2928|  35.8k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2928:6): [True: 28, False: 35.8k]
  ------------------
 2929|     28|		if (vips_LabQ2Lab(in, out, NULL))
  ------------------
  |  Branch (2929:7): [True: 0, False: 28]
  ------------------
 2930|      0|			return -1;
 2931|     28|	}
 2932|  35.8k|	else if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (2932:11): [True: 0, False: 35.8k]
  ------------------
 2933|      0|		if (vips_rad2float(in, out, NULL))
  ------------------
  |  Branch (2933:7): [True: 0, False: 0]
  ------------------
 2934|      0|			return -1;
 2935|      0|	}
 2936|  35.8k|	else {
 2937|  35.8k|		if (vips_copy(in, out, NULL))
  ------------------
  |  Branch (2937:7): [True: 0, False: 35.8k]
  ------------------
 2938|      0|			return -1;
 2939|  35.8k|	}
 2940|       |
 2941|  35.8k|	return 0;
 2942|  35.8k|}
vips_image_decode_predict:
 2958|  10.6k|{
 2959|  10.6k|	VipsBandFormat format;
 2960|  10.6k|	int bands;
 2961|       |
 2962|  10.6k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2962:6): [True: 0, False: 10.6k]
  ------------------
 2963|      0|		bands = 3;
 2964|      0|		format = VIPS_FORMAT_FLOAT;
 2965|      0|	}
 2966|  10.6k|	else if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (2966:11): [True: 0, False: 10.6k]
  ------------------
 2967|      0|		bands = 3;
 2968|      0|		format = VIPS_FORMAT_FLOAT;
 2969|      0|	}
 2970|  10.6k|	else {
 2971|  10.6k|		bands = in->Bands;
 2972|  10.6k|		format = in->BandFmt;
 2973|  10.6k|	}
 2974|       |
 2975|  10.6k|	if (out_bands)
  ------------------
  |  Branch (2975:6): [True: 10.6k, False: 0]
  ------------------
 2976|  10.6k|		*out_bands = bands;
 2977|  10.6k|	if (out_format)
  ------------------
  |  Branch (2977:6): [True: 27, False: 10.5k]
  ------------------
 2978|     27|		*out_format = format;
 2979|       |
 2980|  10.6k|	return 0;
 2981|  10.6k|}
vips_image_encode:
 2998|     27|{
 2999|     27|	if (coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2999:6): [True: 0, False: 27]
  ------------------
 3000|      0|		if (vips_Lab2LabQ(in, out, NULL))
  ------------------
  |  Branch (3000:7): [True: 0, False: 0]
  ------------------
 3001|      0|			return -1;
 3002|      0|	}
 3003|     27|	else if (coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (3003:11): [True: 0, False: 27]
  ------------------
 3004|      0|		if (vips_float2rad(in, out, NULL))
  ------------------
  |  Branch (3004:7): [True: 0, False: 0]
  ------------------
 3005|      0|			return -1;
 3006|      0|	}
 3007|     27|	else {
 3008|     27|		if (vips_copy(in, out, NULL))
  ------------------
  |  Branch (3008:7): [True: 0, False: 27]
  ------------------
 3009|      0|			return -1;
 3010|     27|	}
 3011|       |
 3012|     27|	return 0;
 3013|     27|}
vips_image_ispartial:
 3068|  8.91k|{
 3069|  8.91k|	if (image->dtype == VIPS_IMAGE_PARTIAL)
  ------------------
  |  Branch (3069:6): [True: 2.64k, False: 6.27k]
  ------------------
 3070|  2.64k|		return 1;
 3071|  6.27k|	else
 3072|  6.27k|		return 0;
 3073|  8.91k|}
vips_image_write_prepare:
 3137|  15.7k|{
 3138|  15.7k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|  15.7k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  15.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3139|       |
 3140|  15.7k|	if (image->Xsize <= 0 ||
  ------------------
  |  Branch (3140:6): [True: 0, False: 15.7k]
  ------------------
 3141|  15.7k|		image->Ysize <= 0 ||
  ------------------
  |  Branch (3141:3): [True: 0, False: 15.7k]
  ------------------
 3142|  15.7k|		image->Bands <= 0) {
  ------------------
  |  Branch (3142:3): [True: 0, False: 15.7k]
  ------------------
 3143|      0|		vips_error("VipsImage", "%s", _("bad dimensions"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3144|      0|		return -1;
 3145|      0|	}
 3146|       |
 3147|       |	/* We don't use this, but make sure it's set in case any old programs
 3148|       |	 * are expecting it.
 3149|       |	 */
 3150|  15.7k|	image->Bbits = vips_format_sizeof(image->BandFmt) << 3;
 3151|       |
 3152|  15.7k|	if (image->dtype == VIPS_IMAGE_PARTIAL) {
  ------------------
  |  Branch (3152:6): [True: 0, False: 15.7k]
  ------------------
 3153|      0|		VIPS_DEBUG_MSG("vips_image_write_prepare: old-style output for %s\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3154|      0|			image->filename);
 3155|       |
 3156|      0|		image->dtype = VIPS_IMAGE_SETBUF;
 3157|      0|	}
 3158|       |
 3159|  15.7k|	switch (image->dtype) {
 3160|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (3160:2): [True: 0, False: 15.7k]
  ------------------
 3161|      0|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (3161:2): [True: 0, False: 15.7k]
  ------------------
 3162|      0|		break;
 3163|       |
 3164|  15.7k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (3164:2): [True: 15.7k, False: 0]
  ------------------
 3165|  15.7k|		if (!image->data &&
  ------------------
  |  Branch (3165:7): [True: 15.7k, False: 0]
  ------------------
 3166|  15.7k|			!(image->data = vips_tracked_malloc(
  ------------------
  |  Branch (3166:4): [True: 0, False: 15.7k]
  ------------------
 3167|  15.7k|				  VIPS_IMAGE_SIZEOF_IMAGE(image))))
  ------------------
  |  |  388|  15.7k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  15.7k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  15.7k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  15.7k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3168|      0|			return -1;
 3169|       |
 3170|  15.7k|		break;
 3171|       |
 3172|  15.7k|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (3172:2): [True: 0, False: 15.7k]
  ------------------
 3173|      0|		if (vips_image_open_output(image))
  ------------------
  |  Branch (3173:7): [True: 0, False: 0]
  ------------------
 3174|      0|			return -1;
 3175|       |
 3176|      0|		break;
 3177|       |
 3178|      0|	default:
  ------------------
  |  Branch (3178:2): [True: 0, False: 15.7k]
  ------------------
 3179|      0|		vips_error("VipsImage", "%s", _("bad image descriptor"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3180|      0|		return -1;
 3181|  15.7k|	}
 3182|       |
 3183|  15.7k|	return 0;
 3184|  15.7k|}
vips_image_pio_input:
 3628|  94.3k|{
 3629|  94.3k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|  94.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  94.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  94.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3630|       |
 3631|       |#ifdef DEBUG_IO
 3632|       |	printf("vips_image_pio_input: enabling partial input for %s\n",
 3633|       |		image->filename);
 3634|       |#endif /*DEBUG_IO*/
 3635|       |
 3636|  94.3k|	switch (image->dtype) {
 3637|  12.5k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (3637:2): [True: 12.5k, False: 81.8k]
  ------------------
 3638|  12.5k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (3638:2): [True: 0, False: 94.3k]
  ------------------
 3639|       |		/* Should have been written to.
 3640|       |		 */
 3641|  12.5k|		if (!image->data) {
  ------------------
  |  Branch (3641:7): [True: 0, False: 12.5k]
  ------------------
 3642|      0|			vips_error("vips_image_pio_input",
 3643|      0|				"%s", _("no image data"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3644|      0|			return -1;
 3645|      0|		}
 3646|       |
 3647|       |		/* Should be no generate functions now.
 3648|       |		 */
 3649|  12.5k|		image->start_fn = NULL;
 3650|  12.5k|		image->generate_fn = NULL;
 3651|  12.5k|		image->stop_fn = NULL;
 3652|       |
 3653|  12.5k|		break;
 3654|       |
 3655|  81.8k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (3655:2): [True: 81.8k, False: 12.5k]
  ------------------
 3656|       |		/* We can sometimes want to copy images with no generate func,
 3657|       |		 * eg. if we are going to be manipulating metadata, so we
 3658|       |		 * can't check for gen funcs. See dzsave direct mode.
 3659|       |		 */
 3660|  81.8k|		break;
 3661|       |
 3662|      0|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (3662:2): [True: 0, False: 94.3k]
  ------------------
 3663|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (3663:2): [True: 0, False: 94.3k]
  ------------------
 3664|      0|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (3664:2): [True: 0, False: 94.3k]
  ------------------
 3665|      0|		break;
 3666|       |
 3667|      0|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (3667:2): [True: 0, False: 94.3k]
  ------------------
 3668|       |
 3669|       |		/* Free any resources the image holds and reset to a base
 3670|       |		 * state.
 3671|       |		 */
 3672|      0|		if (vips_image_rewind_output(image))
  ------------------
  |  Branch (3672:7): [True: 0, False: 0]
  ------------------
 3673|      0|			return -1;
 3674|       |
 3675|      0|		break;
 3676|       |
 3677|      0|	default:
  ------------------
  |  Branch (3677:2): [True: 0, False: 94.3k]
  ------------------
 3678|      0|		vips_error("vips_image_pio_input",
 3679|      0|			"%s", _("image not readable"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3680|      0|		return -1;
 3681|  94.3k|	}
 3682|       |
 3683|  94.3k|	return 0;
 3684|  94.3k|}
vips_band_format_isint:
 3745|  56.0k|{
 3746|  56.0k|	switch (format) {
 3747|  19.0k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3747:2): [True: 19.0k, False: 36.9k]
  ------------------
 3748|  19.0k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3748:2): [True: 8, False: 56.0k]
  ------------------
 3749|  55.8k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3749:2): [True: 36.8k, False: 19.2k]
  ------------------
 3750|  55.9k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3750:2): [True: 43, False: 56.0k]
  ------------------
 3751|  55.9k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3751:2): [True: 55, False: 56.0k]
  ------------------
 3752|  56.0k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3752:2): [True: 34, False: 56.0k]
  ------------------
 3753|  56.0k|		return TRUE;
  ------------------
  |  |  798|  56.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  56.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3754|       |
 3755|     29|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3755:2): [True: 29, False: 56.0k]
  ------------------
 3756|     29|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3756:2): [True: 0, False: 56.0k]
  ------------------
 3757|     29|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3757:2): [True: 0, False: 56.0k]
  ------------------
 3758|     29|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3758:2): [True: 0, False: 56.0k]
  ------------------
 3759|     29|		return FALSE;
  ------------------
  |  |  794|     29|#define	FALSE	(0)
  ------------------
 3760|       |
 3761|      0|	default:
  ------------------
  |  Branch (3761:2): [True: 0, False: 56.0k]
  ------------------
 3762|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3763|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3764|  56.0k|	}
 3765|  56.0k|}
vips_band_format_isuint:
 3775|  8.16k|{
 3776|  8.16k|	switch (format) {
 3777|    613|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3777:2): [True: 613, False: 7.55k]
  ------------------
 3778|  1.24k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3778:2): [True: 636, False: 7.53k]
  ------------------
 3779|  2.72k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3779:2): [True: 1.47k, False: 6.68k]
  ------------------
 3780|  2.72k|		return TRUE;
  ------------------
  |  |  798|  2.72k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.72k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3781|       |
 3782|  1.12k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3782:2): [True: 1.12k, False: 7.03k]
  ------------------
 3783|  2.56k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3783:2): [True: 1.43k, False: 6.72k]
  ------------------
 3784|  3.18k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3784:2): [True: 614, False: 7.55k]
  ------------------
 3785|  5.43k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3785:2): [True: 2.25k, False: 5.90k]
  ------------------
 3786|  5.43k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3786:2): [True: 0, False: 8.16k]
  ------------------
 3787|  5.43k|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3787:2): [True: 0, False: 8.16k]
  ------------------
 3788|  5.43k|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3788:2): [True: 0, False: 8.16k]
  ------------------
 3789|  5.43k|		return FALSE;
  ------------------
  |  |  794|  5.43k|#define	FALSE	(0)
  ------------------
 3790|       |
 3791|      0|	default:
  ------------------
  |  Branch (3791:2): [True: 0, False: 8.16k]
  ------------------
 3792|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3793|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3794|  8.16k|	}
 3795|  8.16k|}
vips_band_format_is8bit:
 3805|  3.58k|{
 3806|  3.58k|	switch (format) {
 3807|      0|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3807:2): [True: 0, False: 3.58k]
  ------------------
 3808|      0|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3808:2): [True: 0, False: 3.58k]
  ------------------
 3809|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3810|       |
 3811|  3.27k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3811:2): [True: 3.27k, False: 302]
  ------------------
 3812|  3.43k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3812:2): [True: 154, False: 3.42k]
  ------------------
 3813|  3.43k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3813:2): [True: 0, False: 3.58k]
  ------------------
 3814|  3.43k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3814:2): [True: 0, False: 3.58k]
  ------------------
 3815|  3.58k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3815:2): [True: 148, False: 3.43k]
  ------------------
 3816|  3.58k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3816:2): [True: 0, False: 3.58k]
  ------------------
 3817|  3.58k|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3817:2): [True: 0, False: 3.58k]
  ------------------
 3818|  3.58k|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3818:2): [True: 0, False: 3.58k]
  ------------------
 3819|  3.58k|		return FALSE;
  ------------------
  |  |  794|  3.58k|#define	FALSE	(0)
  ------------------
 3820|       |
 3821|      0|	default:
  ------------------
  |  Branch (3821:2): [True: 0, False: 3.58k]
  ------------------
 3822|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3823|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3824|  3.58k|	}
 3825|  3.58k|}
vips_band_format_isfloat:
 3835|    254|{
 3836|    254|	switch (format) {
 3837|    254|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3837:2): [True: 254, False: 0]
  ------------------
 3838|    254|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3838:2): [True: 0, False: 254]
  ------------------
 3839|    254|		return TRUE;
  ------------------
  |  |  798|    254|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    254|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3840|       |
 3841|      0|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3841:2): [True: 0, False: 254]
  ------------------
 3842|      0|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3842:2): [True: 0, False: 254]
  ------------------
 3843|      0|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3843:2): [True: 0, False: 254]
  ------------------
 3844|      0|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3844:2): [True: 0, False: 254]
  ------------------
 3845|      0|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3845:2): [True: 0, False: 254]
  ------------------
 3846|      0|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3846:2): [True: 0, False: 254]
  ------------------
 3847|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3847:2): [True: 0, False: 254]
  ------------------
 3848|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3848:2): [True: 0, False: 254]
  ------------------
 3849|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3850|       |
 3851|      0|	default:
  ------------------
  |  Branch (3851:2): [True: 0, False: 254]
  ------------------
 3852|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3853|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3854|    254|	}
 3855|    254|}
vips_band_format_iscomplex:
 3865|  10.1k|{
 3866|  10.1k|	switch (format) {
 3867|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3867:2): [True: 0, False: 10.1k]
  ------------------
 3868|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3868:2): [True: 0, False: 10.1k]
  ------------------
 3869|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3870|       |
 3871|  1.19k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3871:2): [True: 1.19k, False: 8.92k]
  ------------------
 3872|  1.34k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3872:2): [True: 152, False: 9.96k]
  ------------------
 3873|  8.41k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3873:2): [True: 7.07k, False: 3.04k]
  ------------------
 3874|  8.87k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3874:2): [True: 464, False: 9.65k]
  ------------------
 3875|  9.23k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3875:2): [True: 352, False: 9.76k]
  ------------------
 3876|  9.54k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3876:2): [True: 310, False: 9.80k]
  ------------------
 3877|  10.1k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3877:2): [True: 579, False: 9.54k]
  ------------------
 3878|  10.1k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3878:2): [True: 0, False: 10.1k]
  ------------------
 3879|  10.1k|		return FALSE;
  ------------------
  |  |  794|  10.1k|#define	FALSE	(0)
  ------------------
 3880|       |
 3881|      0|	default:
  ------------------
  |  Branch (3881:2): [True: 0, False: 10.1k]
  ------------------
 3882|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3883|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3884|  10.1k|	}
 3885|  10.1k|}
image.c:vips_image_class_init:
 1058|      1|{
 1059|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1060|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1061|       |
 1062|      1|	VIPS_DEBUG_MSG("vips_image_class_init:\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1063|       |
 1064|      1|	gobject_class->finalize = vips_image_finalize;
 1065|      1|	gobject_class->dispose = vips_image_dispose;
 1066|      1|	gobject_class->set_property = vips_object_set_property;
 1067|      1|	gobject_class->get_property = vips_object_get_property;
 1068|       |
 1069|      1|	vobject_class->new_from_string = vips_image_new_from_file_object;
 1070|      1|	vobject_class->to_string = vips_image_to_string;
 1071|      1|	vobject_class->output_needs_arg = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1072|      1|	vobject_class->output_to_arg = vips_image_write_object;
 1073|       |
 1074|      1|	vobject_class->nickname = "image";
 1075|      1|	vobject_class->description = _("image class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1076|       |
 1077|      1|	vobject_class->dump = vips_image_dump;
 1078|      1|	vobject_class->summary = vips_image_summary;
 1079|      1|	vobject_class->sanity = vips_image_sanity;
 1080|      1|	vobject_class->rewind = vips_image_rewind;
 1081|      1|	vobject_class->build = vips_image_build;
 1082|       |
 1083|      1|	class->invalidate = vips_image_real_invalidate;
 1084|      1|	class->written = vips_image_real_written;
 1085|      1|	class->minimise = vips_image_real_minimise;
 1086|       |
 1087|       |	/* Create properties.
 1088|       |	 */
 1089|       |
 1090|       |	/* It'd be good to have these as set once at construct time, but we
 1091|       |	 * can't :-(
 1092|       |	 *
 1093|       |	 * For example, a "p" image might be made with vips_image_new() and
 1094|       |	 * constructed, then passed to vips_copy() of whatever to be written to.
 1095|       |	 * That operation will then need to set width/height etc.
 1096|       |	 *
 1097|       |	 * We can't set_once either, since vips_copy() etc. need to update
 1098|       |	 * xoffset and friends on the way through.
 1099|       |	 */
 1100|       |
 1101|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1102|      1|		_("Width"),
 1103|      1|		_("Image width in pixels"),
 1104|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1105|      1|		G_STRUCT_OFFSET(VipsImage, Xsize),
 1106|      1|		1, VIPS_MAX_COORD, 1);
 1107|       |
 1108|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1109|      1|		_("Height"),
 1110|      1|		_("Image height in pixels"),
 1111|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1112|      1|		G_STRUCT_OFFSET(VipsImage, Ysize),
 1113|      1|		1, VIPS_MAX_COORD, 1);
 1114|       |
 1115|      1|	VIPS_ARG_INT(class, "bands", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1116|      1|		_("Bands"),
 1117|      1|		_("Number of bands in image"),
 1118|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1119|      1|		G_STRUCT_OFFSET(VipsImage, Bands),
 1120|      1|		1, VIPS_MAX_COORD, 1);
 1121|       |
 1122|      1|	VIPS_ARG_ENUM(class, "format", 5,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1123|      1|		_("Format"),
 1124|      1|		_("Pixel format in image"),
 1125|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1126|      1|		G_STRUCT_OFFSET(VipsImage, BandFmt),
 1127|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
 1128|       |
 1129|      1|	VIPS_ARG_ENUM(class, "coding", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1130|      1|		_("Coding"),
 1131|      1|		_("Pixel coding"),
 1132|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1133|      1|		G_STRUCT_OFFSET(VipsImage, Coding),
 1134|      1|		VIPS_TYPE_CODING, VIPS_CODING_NONE);
 1135|       |
 1136|      1|	VIPS_ARG_ENUM(class, "interpretation", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1137|      1|		_("Interpretation"),
 1138|      1|		_("Pixel interpretation"),
 1139|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1140|      1|		G_STRUCT_OFFSET(VipsImage, Type),
 1141|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
 1142|       |
 1143|      1|	VIPS_ARG_DOUBLE(class, "xres", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1144|      1|		_("Xres"),
 1145|      1|		_("Horizontal resolution in pixels/mm"),
 1146|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1147|      1|		G_STRUCT_OFFSET(VipsImage, Xres),
 1148|      1|		-0.0, 1000000, 0);
 1149|       |
 1150|      1|	VIPS_ARG_DOUBLE(class, "yres", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1151|      1|		_("Yres"),
 1152|      1|		_("Vertical resolution in pixels/mm"),
 1153|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1154|      1|		G_STRUCT_OFFSET(VipsImage, Yres),
 1155|      1|		-0.0, 1000000, 0);
 1156|       |
 1157|      1|	VIPS_ARG_INT(class, "xoffset", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1158|      1|		_("Xoffset"),
 1159|      1|		_("Horizontal offset of origin"),
 1160|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1161|      1|		G_STRUCT_OFFSET(VipsImage, Xoffset),
 1162|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1163|       |
 1164|      1|	VIPS_ARG_INT(class, "yoffset", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1165|      1|		_("Yoffset"),
 1166|      1|		_("Vertical offset of origin"),
 1167|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1168|      1|		G_STRUCT_OFFSET(VipsImage, Yoffset),
 1169|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1170|       |
 1171|      1|	VIPS_ARG_STRING(class, "filename", 12,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1172|      1|		_("Filename"),
 1173|      1|		_("Image filename"),
 1174|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1175|      1|		G_STRUCT_OFFSET(VipsImage, filename),
 1176|      1|		NULL);
 1177|       |
 1178|      1|	VIPS_ARG_STRING(class, "mode", 13,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1179|      1|		_("Mode"),
 1180|      1|		_("Open mode"),
 1181|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1182|      1|		G_STRUCT_OFFSET(VipsImage, mode),
 1183|      1|		"p");
 1184|       |
 1185|      1|	VIPS_ARG_BOOL(class, "kill", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1186|      1|		_("Kill"),
 1187|      1|		_("Block evaluation on this image"),
 1188|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1189|      1|		G_STRUCT_OFFSET(VipsImage, kill),
 1190|      1|		FALSE);
 1191|       |
 1192|      1|	VIPS_ARG_ENUM(class, "demand", 15,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1193|      1|		_("Demand style"),
 1194|      1|		_("Preferred demand style for this image"),
 1195|      1|		VIPS_ARGUMENT_CONSTRUCT,
 1196|      1|		G_STRUCT_OFFSET(VipsImage, dhint),
 1197|      1|		VIPS_TYPE_DEMAND_STYLE, VIPS_DEMAND_STYLE_SMALLTILE);
 1198|       |
 1199|      1|	VIPS_ARG_UINT64(class, "sizeof_header", 16,
  ------------------
  |  |  198|      1|	{ \
  |  |  199|      1|		GParamSpec *pspec; \
  |  |  200|      1|\
  |  |  201|      1|		pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
  |  |  202|      1|			(MIN), (MAX), (VALUE), \
  |  |  203|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  204|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  205|      1|			vips_argument_get_id(), pspec); \
  |  |  206|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  208|      1|	}
  ------------------
 1200|      1|		_("Size of header"),
 1201|      1|		_("Offset in bytes from start of file"),
 1202|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1203|      1|		G_STRUCT_OFFSET(VipsImage, sizeof_header),
 1204|      1|		0, 1000000000, VIPS_SIZEOF_HEADER);
 1205|       |
 1206|      1|	VIPS_ARG_POINTER(class, "foreign_buffer", 17,
  ------------------
  |  |  253|      1|	{ \
  |  |  254|      1|		GParamSpec *pspec; \
  |  |  255|      1|\
  |  |  256|      1|		pspec = g_param_spec_pointer((NAME), (LONG), (DESC), \
  |  |  257|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  258|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  259|      1|			vips_argument_get_id(), pspec); \
  |  |  260|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  261|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  262|      1|	}
  ------------------
 1207|      1|		_("Foreign buffer"),
 1208|      1|		_("Pointer to foreign pixels"),
 1209|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1210|      1|		G_STRUCT_OFFSET(VipsImage, data));
 1211|       |
 1212|       |	/* Create signals.
 1213|       |	 */
 1214|       |
 1215|       |	/**
 1216|       |	 * VipsImage::preeval:
 1217|       |	 * @image: the image to be calculated
 1218|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1219|       |	 *
 1220|       |	 * The ::preeval signal is emitted once before computation of @image
 1221|       |	 * starts. It's a good place to set up evaluation feedback.
 1222|       |	 *
 1223|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1224|       |	 * image.
 1225|       |	 */
 1226|      1|	vips_image_signals[SIG_PREEVAL] = g_signal_new("preeval",
 1227|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1228|      1|		G_SIGNAL_RUN_LAST,
 1229|      1|		G_STRUCT_OFFSET(VipsImageClass, preeval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1230|      1|		NULL, NULL,
 1231|      1|		g_cclosure_marshal_VOID__POINTER,
 1232|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1233|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1234|       |
 1235|       |	/**
 1236|       |	 * VipsImage::eval:
 1237|       |	 * @image: the image being calculated
 1238|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1239|       |	 *
 1240|       |	 * The ::eval signal is emitted once per work unit (typically a 128 x
 1241|       |	 * 128 area of pixels) during image computation.
 1242|       |	 *
 1243|       |	 * You can use this signal to update user-interfaces with progress
 1244|       |	 * feedback. Beware of updating too frequently: you will usually
 1245|       |	 * need some throttling mechanism.
 1246|       |	 *
 1247|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1248|       |	 * image.
 1249|       |	 */
 1250|      1|	vips_image_signals[SIG_EVAL] = g_signal_new("eval",
 1251|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1252|      1|		G_SIGNAL_RUN_LAST,
 1253|      1|		G_STRUCT_OFFSET(VipsImageClass, eval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1254|      1|		NULL, NULL,
 1255|      1|		g_cclosure_marshal_VOID__POINTER,
 1256|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1257|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1258|       |
 1259|       |	/**
 1260|       |	 * VipsImage::posteval:
 1261|       |	 * @image: the image that was calculated
 1262|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1263|       |	 *
 1264|       |	 * The ::posteval signal is emitted once at the end of the computation
 1265|       |	 * of @image. It's a good place to shut down evaluation feedback.
 1266|       |	 *
 1267|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1268|       |	 * image.
 1269|       |	 */
 1270|      1|	vips_image_signals[SIG_POSTEVAL] = g_signal_new("posteval",
 1271|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1272|      1|		G_SIGNAL_RUN_LAST,
 1273|      1|		G_STRUCT_OFFSET(VipsImageClass, posteval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1274|      1|		NULL, NULL,
 1275|      1|		g_cclosure_marshal_VOID__POINTER,
 1276|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|       |
 1279|       |	/**
 1280|       |	 * VipsImage::written:
 1281|       |	 * @image: the image that was calculated
 1282|       |	 * @result: (out) (type gint): set to non-zero to indicate error
 1283|       |	 *
 1284|       |	 * The ::written signal is emitted just after an image has been
 1285|       |	 * written to. It is
 1286|       |	 * used by vips to implement things like write to foreign file
 1287|       |	 * formats.
 1288|       |	 */
 1289|      1|	vips_image_signals[SIG_WRITTEN] = g_signal_new("written",
 1290|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1291|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1292|      1|		G_STRUCT_OFFSET(VipsImageClass, written),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1293|      1|		NULL, NULL,
 1294|      1|		g_cclosure_marshal_VOID__POINTER,
 1295|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|       |
 1298|       |	/**
 1299|       |	 * VipsImage::invalidate:
 1300|       |	 * @image: the image that has changed
 1301|       |	 *
 1302|       |	 * The ::invalidate signal is emitted when an image or one of it's
 1303|       |	 * upstream data sources has been destructively modified. See
 1304|       |	 * vips_image_invalidate_all().
 1305|       |	 */
 1306|      1|	vips_image_signals[SIG_INVALIDATE] = g_signal_new("invalidate",
 1307|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1308|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1309|      1|		G_STRUCT_OFFSET(VipsImageClass, invalidate),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1310|      1|		NULL, NULL,
 1311|      1|		g_cclosure_marshal_VOID__VOID,
 1312|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|       |
 1314|       |	/**
 1315|       |	 * VipsImage::minimise:
 1316|       |	 * @image: the image that is being minimised
 1317|       |	 *
 1318|       |	 * The ::minimise signal is emitted when an image has been asked to
 1319|       |	 * minimise memory usage. All non-essential caches are dropped.
 1320|       |	 * See vips_image_minimise_all().
 1321|       |	 */
 1322|      1|	vips_image_signals[SIG_MINIMISE] = g_signal_new("minimise",
 1323|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1324|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1325|      1|		G_STRUCT_OFFSET(VipsImageClass, minimise),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1326|      1|		NULL, NULL,
 1327|      1|		g_cclosure_marshal_VOID__VOID,
 1328|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1329|      1|}
image.c:vips_image_finalize:
  427|   172k|{
  428|   172k|	VipsImage *image = VIPS_IMAGE(gobject);
  ------------------
  |  |  171|   172k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   172k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  429|       |
  430|   172k|	VIPS_DEBUG_MSG("vips_image_finalize: %p\n", gobject);
  ------------------
  |  |   47|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   172k|	{ \
  |  |   49|   172k|		; \
  |  |   50|   172k|	} \
  |  |   51|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|       |
  432|       |	/* Should be no regions defined on the image, since they all hold a
  433|       |	 * ref to their host image.
  434|       |	 */
  435|   172k|	g_assert(!image->regions);
  ------------------
  |  |  166|   172k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|       |
  437|       |	/* Therefore there should be no windows.
  438|       |	 */
  439|   172k|	g_assert(!image->windows);
  ------------------
  |  |  166|   172k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  440|       |
  441|       |	/* Junk generate functions.
  442|       |	 */
  443|   172k|	image->start_fn = NULL;
  444|   172k|	image->generate_fn = NULL;
  445|   172k|	image->stop_fn = NULL;
  446|   172k|	image->client1 = NULL;
  447|   172k|	image->client2 = NULL;
  448|       |
  449|       |	/* No more upstream/downstream links.
  450|       |	 */
  451|   172k|	vips__link_break_all(image);
  452|       |
  453|   172k|	if (image->time) {
  ------------------
  |  Branch (453:6): [True: 22.1k, False: 150k]
  ------------------
  454|  22.1k|		VIPS_FREEF(g_timer_destroy, image->time->start);
  ------------------
  |  |   41|  22.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  22.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  22.1k|	{ \
  |  |   43|  22.1k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 22.1k, False: 0]
  |  |  ------------------
  |  |   44|  22.1k|			(void) F((S)); \
  |  |   45|  22.1k|			(S) = 0; \
  |  |   46|  22.1k|		} \
  |  |   47|  22.1k|	} \
  |  |   48|  22.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|  22.1k|		VIPS_FREE(image->time);
  ------------------
  |  |   50|  22.1k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  22.1k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  22.1k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  22.1k|	{ \
  |  |  |  |   43|  22.1k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 22.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  22.1k|			(void) F((S)); \
  |  |  |  |   45|  22.1k|			(S) = 0; \
  |  |  |  |   46|  22.1k|		} \
  |  |  |  |   47|  22.1k|	} \
  |  |  |  |   48|  22.1k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  22.1k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|  22.1k|	}
  457|       |
  458|       |	/* Free attached memory.
  459|       |	 */
  460|   172k|	if (image->data) {
  ------------------
  |  Branch (460:6): [True: 15.7k, False: 156k]
  ------------------
  461|  15.7k|		if (image->dtype == VIPS_IMAGE_SETBUF) {
  ------------------
  |  Branch (461:7): [True: 15.7k, False: 0]
  ------------------
  462|  15.7k|			VIPS_DEBUG_MSG("vips_image_finalize: freeing buffer\n");
  ------------------
  |  |   47|  15.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.7k|	{ \
  |  |   49|  15.7k|		; \
  |  |   50|  15.7k|	} \
  |  |   51|  15.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  463|  15.7k|			vips_tracked_free(image->data);
  464|  15.7k|			image->dtype = VIPS_IMAGE_NONE;
  465|  15.7k|		}
  466|       |
  467|  15.7k|		image->data = NULL;
  468|  15.7k|	}
  469|       |
  470|       |	/* Delete associated files.
  471|       |	 */
  472|   172k|	vips_image_delete(image);
  473|       |
  474|   172k|	VIPS_FREEF(vips_g_mutex_free, image->sslock);
  ------------------
  |  |   41|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   172k|	{ \
  |  |   43|   172k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 172k, False: 0]
  |  |  ------------------
  |  |   44|   172k|			(void) F((S)); \
  |  |   45|   172k|			(S) = 0; \
  |  |   46|   172k|		} \
  |  |   47|   172k|	} \
  |  |   48|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|       |
  476|   172k|	VIPS_FREE(image->Hist);
  ------------------
  |  |   50|   172k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   172k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   172k|	{ \
  |  |  |  |   43|   172k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   172k|	} \
  |  |  |  |   48|   172k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|   172k|	VIPS_FREEF(vips__gslist_gvalue_free, image->history_list);
  ------------------
  |  |   41|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   172k|	{ \
  |  |   43|   172k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 172k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   172k|	} \
  |  |   48|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|   172k|	vips__meta_destroy(image);
  479|       |
  480|   172k|	G_OBJECT_CLASS(vips_image_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   172k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   172k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   172k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|   172k|}
image.c:vips_image_delete:
  413|   172k|{
  414|   172k|	if (image->delete_on_close) {
  ------------------
  |  Branch (414:6): [True: 0, False: 172k]
  ------------------
  415|      0|		g_assert(image->delete_on_close_filename);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|       |
  417|      0|		VIPS_DEBUG_MSG("vips_image_delete: removing temp %s\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|      0|			image->delete_on_close_filename);
  419|      0|		g_unlink(image->delete_on_close_filename);
  420|      0|		VIPS_FREE(image->delete_on_close_filename);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      0|		image->delete_on_close = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  422|      0|	}
  423|   172k|}
image.c:vips_image_dispose:
  485|   172k|{
  486|   172k|	VipsImage *image = VIPS_IMAGE(gobject);
  ------------------
  |  |  171|   172k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   172k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  487|       |
  488|   172k|	VIPS_DEBUG_MSG("vips_image_dispose: %p\n", gobject);
  ------------------
  |  |   47|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   172k|	{ \
  |  |   49|   172k|		; \
  |  |   50|   172k|	} \
  |  |   51|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|       |
  490|   172k|#ifdef DEBUG_LEAK
  491|   172k|	{
  492|   172k|		VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|   172k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|   172k|			vips__image_pixels_quark);
  494|       |
  495|   172k|		if (pixels &&
  ------------------
  |  Branch (495:7): [True: 172k, False: 0]
  ------------------
  496|   172k|			pixels->tpels) {
  ------------------
  |  Branch (496:4): [True: 1.03k, False: 171k]
  ------------------
  497|  1.03k|			int compute_percent = 100.0 * pixels->npels / pixels->tpels;
  498|       |
  499|  1.03k|			if (compute_percent > 100)
  ------------------
  |  Branch (499:8): [True: 0, False: 1.03k]
  ------------------
  500|      0|				printf("vips_image_dispose: %s %s computed %d%%\n",
  501|      0|					image->filename,
  502|      0|					pixels->nickname,
  503|      0|					compute_percent);
  504|  1.03k|		}
  505|   172k|	}
  506|   172k|#endif /*DEBUG_LEAK*/
  507|       |
  508|   172k|	vips_object_preclose(VIPS_OBJECT(gobject));
  ------------------
  |  |  433|   172k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|       |
  510|       |	/* We have to junk the fd in dispose, since we run this for rewind and
  511|       |	 * we must close and reopen the file when we switch from write to
  512|       |	 * read.
  513|       |	 */
  514|       |
  515|       |	/* Any file mapping?
  516|       |	 */
  517|   172k|	if (image->baseaddr) {
  ------------------
  |  Branch (517:6): [True: 0, False: 172k]
  ------------------
  518|       |		/* MMAP file.
  519|       |		 */
  520|      0|		VIPS_DEBUG_MSG("vips_image_dispose: unmapping file\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|       |
  522|      0|		vips__munmap(image->baseaddr, image->length);
  523|      0|		image->baseaddr = NULL;
  524|      0|		image->length = 0;
  525|       |
  526|       |		/* This must have been a pointer to the mmap region, rather
  527|       |		 * than a setbuf.
  528|       |		 */
  529|      0|		image->data = NULL;
  530|      0|	}
  531|       |
  532|       |	/* Is there a file descriptor?
  533|       |	 */
  534|   172k|	if (image->fd != -1) {
  ------------------
  |  Branch (534:6): [True: 0, False: 172k]
  ------------------
  535|      0|		VIPS_DEBUG_MSG("vips_image_dispose: closing output file\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|       |
  537|      0|		if (vips_tracked_close(image->fd) == -1)
  ------------------
  |  Branch (537:7): [True: 0, False: 0]
  ------------------
  538|      0|			vips_error("VipsImage",
  539|      0|				"%s", _("unable to close fd"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  540|      0|		image->fd = -1;
  541|      0|	}
  542|       |
  543|   172k|	G_OBJECT_CLASS(vips_image_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   172k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   172k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   172k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|   172k|}
image.c:vips_image_build:
  833|   172k|{
  834|   172k|	VipsImage *image = VIPS_IMAGE(object);
  ------------------
  |  |  171|   172k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   172k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  835|   172k|	const char *filename = image->filename;
  836|   172k|	const char *mode = image->mode;
  837|       |
  838|   172k|	guint32 magic;
  839|   172k|	guint64 sizeof_image;
  840|       |
  841|   172k|	VIPS_DEBUG_MSG("vips_image_build: %p\n", image);
  ------------------
  |  |   47|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   172k|	{ \
  |  |   49|   172k|		; \
  |  |   50|   172k|	} \
  |  |   51|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|       |
  843|   172k|	if (VIPS_OBJECT_CLASS(vips_image_parent_class)->build(object))
  ------------------
  |  |  435|   172k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   172k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   172k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (843:6): [True: 0, False: 172k]
  ------------------
  844|      0|		return -1;
  845|       |
  846|       |	/* Parse the mode string.
  847|       |	 */
  848|   172k|	switch (mode[0]) {
  849|      0|	case 'v':
  ------------------
  |  Branch (849:2): [True: 0, False: 172k]
  ------------------
  850|       |		/* Used by 'r' for native open of vips, see below. Also by
  851|       |		 * vips_image_rewind_output().
  852|       |		 */
  853|      0|		if (vips_image_open_input(image))
  ------------------
  |  Branch (853:7): [True: 0, False: 0]
  ------------------
  854|      0|			return -1;
  855|       |
  856|      0|		break;
  857|       |
  858|      0|	case 'r':
  ------------------
  |  Branch (858:2): [True: 0, False: 172k]
  ------------------
  859|      0|		if ((magic = vips__file_magic(filename))) {
  ------------------
  |  Branch (859:7): [True: 0, False: 0]
  ------------------
  860|       |			/* We may need to byteswap.
  861|       |			 */
  862|      0|			if (GUINT_FROM_BE(magic) == image->magic) {
  ------------------
  |  |  407|      0|#define GUINT_FROM_BE(val)	(GUINT_TO_BE (val))
  ------------------
  |  Branch (862:8): [True: 0, False: 0]
  ------------------
  863|       |				/* Native open.
  864|       |				 */
  865|      0|				if (vips_image_open_input(image))
  ------------------
  |  Branch (865:9): [True: 0, False: 0]
  ------------------
  866|      0|					return -1;
  867|      0|			}
  868|      0|			else {
  869|      0|				VipsImage *t;
  870|      0|				VipsImage *t2;
  871|       |
  872|       |				/* Open the image in t, then byteswap to this
  873|       |				 * image.
  874|       |				 */
  875|      0|				if (!(t = vips_image_new_mode(filename,
  ------------------
  |  Branch (875:9): [True: 0, False: 0]
  ------------------
  876|      0|						  "v")))
  877|      0|					return -1;
  878|       |
  879|      0|				if (vips_byteswap(t, &t2, NULL)) {
  ------------------
  |  Branch (879:9): [True: 0, False: 0]
  ------------------
  880|      0|					g_object_unref(t);
  881|      0|					return -1;
  882|      0|				}
  883|      0|				g_object_unref(t);
  884|       |
  885|      0|				image->dtype = VIPS_IMAGE_PARTIAL;
  886|      0|				if (vips_image_write(t2, image)) {
  ------------------
  |  Branch (886:9): [True: 0, False: 0]
  ------------------
  887|      0|					g_object_unref(t2);
  888|      0|					return -1;
  889|      0|				}
  890|      0|				g_object_unref(t2);
  891|      0|			}
  892|      0|		}
  893|      0|		else {
  894|      0|			VipsImage *t;
  895|       |
  896|      0|			if (mode[1] == 's') {
  ------------------
  |  Branch (896:8): [True: 0, False: 0]
  ------------------
  897|      0|				if (vips_foreign_load(filename, &t,
  ------------------
  |  Branch (897:9): [True: 0, False: 0]
  ------------------
  898|      0|						"access", VIPS_ACCESS_SEQUENTIAL,
  899|      0|						NULL))
  900|      0|					return -1;
  901|      0|			}
  902|      0|			else {
  903|      0|				if (vips_foreign_load(filename, &t, NULL))
  ------------------
  |  Branch (903:9): [True: 0, False: 0]
  ------------------
  904|      0|					return -1;
  905|      0|			}
  906|       |
  907|      0|			image->dtype = VIPS_IMAGE_PARTIAL;
  908|      0|			if (vips_image_write(t, image)) {
  ------------------
  |  Branch (908:8): [True: 0, False: 0]
  ------------------
  909|      0|				g_object_unref(t);
  910|      0|				return -1;
  911|      0|			}
  912|      0|			g_object_unref(t);
  913|      0|		}
  914|       |
  915|      0|		break;
  916|       |
  917|      0|	case 'w': {
  ------------------
  |  Branch (917:2): [True: 0, False: 172k]
  ------------------
  918|      0|		const char *file_op;
  919|       |
  920|       |		/* Make sure the vips saver is there ... strange things will
  921|       |		 * happen if this type is renamed or removed.
  922|       |		 */
  923|      0|		g_assert(g_type_from_name("VipsForeignSaveVips"));
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|       |
  925|      0|		if (!(file_op = vips_foreign_find_save(filename)))
  ------------------
  |  Branch (925:7): [True: 0, False: 0]
  ------------------
  926|      0|			return -1;
  927|       |
  928|       |		/* If this is the vips saver, just save directly ourselves.
  929|       |		 * Otherwise save with VipsForeign when the image has been
  930|       |		 * written to.
  931|       |		 */
  932|      0|		if (vips_isprefix("VipsForeignSaveVips", file_op))
  ------------------
  |  Branch (932:7): [True: 0, False: 0]
  ------------------
  933|      0|			image->dtype = VIPS_IMAGE_OPENOUT;
  934|      0|		else {
  935|      0|			image->dtype = VIPS_IMAGE_PARTIAL;
  936|      0|			g_signal_connect(image, "written",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  937|      0|				G_CALLBACK(vips_image_save_cb),
  938|      0|				NULL);
  939|      0|		}
  940|      0|	} break;
  941|       |
  942|  18.0k|	case 't':
  ------------------
  |  Branch (942:2): [True: 18.0k, False: 154k]
  ------------------
  943|  18.0k|		image->dtype = VIPS_IMAGE_SETBUF;
  944|  18.0k|		image->dhint = VIPS_DEMAND_STYLE_ANY;
  945|  18.0k|		break;
  946|       |
  947|   154k|	case 'p':
  ------------------
  |  Branch (947:2): [True: 154k, False: 18.0k]
  ------------------
  948|   154k|		image->dtype = VIPS_IMAGE_PARTIAL;
  949|   154k|		break;
  950|       |
  951|      0|	case 'a':
  ------------------
  |  Branch (951:2): [True: 0, False: 172k]
  ------------------
  952|      0|		if ((image->fd = vips__open_image_read(filename)) == -1)
  ------------------
  |  Branch (952:7): [True: 0, False: 0]
  ------------------
  953|      0|			return -1;
  954|      0|		image->dtype = VIPS_IMAGE_OPENIN;
  955|      0|		image->dhint = VIPS_DEMAND_STYLE_THINSTRIP;
  956|       |
  957|      0|		if (image->Bands == 1)
  ------------------
  |  Branch (957:7): [True: 0, False: 0]
  ------------------
  958|      0|			image->Type = VIPS_INTERPRETATION_B_W;
  959|      0|		else if (image->Bands == 3)
  ------------------
  |  Branch (959:12): [True: 0, False: 0]
  ------------------
  960|      0|			image->Type = VIPS_INTERPRETATION_sRGB;
  961|      0|		else
  962|      0|			image->Type = VIPS_INTERPRETATION_MULTIBAND;
  963|       |
  964|       |		/* Read the real file length and check against what we think
  965|       |		 * the size should be.
  966|       |		 */
  967|      0|		if ((image->file_length = vips_file_length(image->fd)) == -1)
  ------------------
  |  Branch (967:7): [True: 0, False: 0]
  ------------------
  968|      0|			return -1;
  969|       |
  970|       |		/* Very common, so a special message.
  971|       |		 */
  972|      0|		sizeof_image = VIPS_IMAGE_SIZEOF_IMAGE(image) +
  ------------------
  |  |  388|      0|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|			image->sizeof_header;
  974|      0|		if (image->file_length < sizeof_image) {
  ------------------
  |  Branch (974:7): [True: 0, False: 0]
  ------------------
  975|      0|			vips_error("VipsImage",
  976|      0|				_("unable to open \"%s\", file too short"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  977|      0|				image->filename);
  978|      0|			return -1;
  979|      0|		}
  980|       |
  981|       |		/* Just weird. Only print a warning for this, since we should
  982|       |		 * still be able to process it without coredumps.
  983|       |		 */
  984|      0|		if (image->file_length > sizeof_image)
  ------------------
  |  Branch (984:7): [True: 0, False: 0]
  ------------------
  985|      0|			g_warning(_("%s is longer than expected"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  986|      0|				image->filename);
  987|      0|		break;
  988|       |
  989|      0|	case 'm':
  ------------------
  |  Branch (989:2): [True: 0, False: 172k]
  ------------------
  990|      0|		if (image->Bands == 1)
  ------------------
  |  Branch (990:7): [True: 0, False: 0]
  ------------------
  991|      0|			image->Type = VIPS_INTERPRETATION_B_W;
  992|      0|		else if (image->Bands == 3)
  ------------------
  |  Branch (992:12): [True: 0, False: 0]
  ------------------
  993|      0|			image->Type = VIPS_INTERPRETATION_sRGB;
  994|      0|		else
  995|      0|			image->Type = VIPS_INTERPRETATION_MULTIBAND;
  996|       |
  997|      0|		image->dtype = VIPS_IMAGE_SETBUF_FOREIGN;
  998|      0|		image->dhint = VIPS_DEMAND_STYLE_ANY;
  999|       |
 1000|      0|		break;
 1001|       |
 1002|      0|	default:
  ------------------
  |  Branch (1002:2): [True: 0, False: 172k]
  ------------------
 1003|      0|		vips_error("VipsImage", _("bad mode \"%s\""), mode);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1004|       |
 1005|      0|		return -1;
 1006|   172k|	}
 1007|       |
 1008|   172k|	vips_image_add_progress(image);
 1009|       |
 1010|   172k|	return 0;
 1011|   172k|}
image.c:vips_image_add_progress:
  803|   172k|{
  804|   172k|	if (vips__progress ||
  ------------------
  |  Branch (804:6): [True: 0, False: 172k]
  ------------------
  805|   172k|		g_getenv("VIPS_PROGRESS")
  ------------------
  |  Branch (805:3): [True: 0, False: 172k]
  ------------------
  806|       |#if ENABLE_DEPRECATED
  807|       |		|| g_getenv("IM_PROGRESS")
  808|       |#endif
  809|   172k|	) {
  810|       |
  811|       |		/* Keep the %complete we displayed last time here.
  812|       |		 */
  813|      0|		int *last = VIPS_NEW(image, int);
  ------------------
  |  |   70|      0|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  814|       |
  815|      0|		g_signal_connect(image, "preeval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  816|      0|			G_CALLBACK(vips_image_preeval_cb), last);
  817|      0|		g_signal_connect(image, "eval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  818|      0|			G_CALLBACK(vips_image_eval_cb), last);
  819|      0|		g_signal_connect(image, "posteval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  820|      0|			G_CALLBACK(vips_image_posteval_cb), NULL);
  821|       |
  822|      0|		vips_image_set_progress(image, TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  823|      0|	}
  824|   172k|}
image.c:vips_image_real_written:
 1046|   151k|{
 1047|   151k|	VIPS_DEBUG_MSG("vips_image_real_written: %p\n", image);
  ------------------
  |  |   47|   151k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   151k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   151k|	{ \
  |  |   49|   151k|		; \
  |  |   50|   151k|	} \
  |  |   51|   151k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   151k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|       |
 1049|       |	/* For vips image write, append the xml after the data.
 1050|       |	 */
 1051|   151k|	if (image->dtype == VIPS_IMAGE_OPENOUT &&
  ------------------
  |  Branch (1051:6): [True: 0, False: 151k]
  ------------------
 1052|   151k|		vips__writehist(image))
  ------------------
  |  Branch (1052:3): [True: 0, False: 0]
  ------------------
 1053|      0|		*result = -1;
 1054|   151k|}
image.c:vips_image_real_minimise:
 1040|   313k|{
 1041|   313k|	VIPS_DEBUG_MSG("vips_image_real_minimise: %p\n", image);
  ------------------
  |  |   47|   313k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   313k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   313k|	{ \
  |  |   49|   313k|		; \
  |  |   50|   313k|	} \
  |  |   51|   313k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   313k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1042|   313k|}
image.c:vips_image_init:
 1333|   172k|{
 1334|   172k|	VIPS_DEBUG_MSG("vips_image_init: %p\n", image);
  ------------------
  |  |   47|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   172k|	{ \
  |  |   49|   172k|		; \
  |  |   50|   172k|	} \
  |  |   51|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|       |
 1336|       |	/* Default to native order.
 1337|       |	 */
 1338|   172k|	image->magic = vips_amiMSBfirst()
  ------------------
  |  Branch (1338:17): [True: 0, False: 172k]
  ------------------
 1339|   172k|		? VIPS_MAGIC_SPARC
  ------------------
  |  |   55|      0|#define VIPS_MAGIC_SPARC (0x08f2a6b6U)
  ------------------
 1340|   172k|		: VIPS_MAGIC_INTEL;
  ------------------
  |  |   54|   345k|#define VIPS_MAGIC_INTEL (0xb6a6f208U)
  ------------------
 1341|       |
 1342|   172k|	image->Xsize = 1;
 1343|   172k|	image->Ysize = 1;
 1344|   172k|	image->Bands = 1;
 1345|       |
 1346|   172k|	image->Xres = 1.0;
 1347|   172k|	image->Yres = 1.0;
 1348|       |
 1349|   172k|	image->fd = -1; /* since 0 is stdout */
 1350|   172k|	image->sslock = vips_g_mutex_new();
 1351|       |
 1352|   172k|	image->sizeof_header = VIPS_SIZEOF_HEADER;
  ------------------
  |  |   57|   172k|#define VIPS_SIZEOF_HEADER (64)
  ------------------
 1353|       |
 1354|   172k|	image->mode = g_strdup("p");
 1355|       |
 1356|   172k|#ifdef DEBUG_LEAK
 1357|   172k|	g_object_set_qdata_full(G_OBJECT(image), vips__image_pixels_quark,
  ------------------
  |  |   51|   172k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   172k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   172k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|   172k|		g_new0(VipsImagePixels, 1), (GDestroyNotify) g_free);
  ------------------
  |  |  299|   172k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|   172k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   172k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   172k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   172k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   172k|	  gpointer __p;						\
  |  |  |  |  231|   172k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  |  |  232|   172k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   172k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 172k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   172k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 172k]
  |  |  |  |  |  Branch (234:26): [True: 172k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   172k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   172k|	  else							\
  |  |  |  |  237|   172k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   172k|	  __p;							\
  |  |  |  |  239|   172k|	}))
  |  |  ------------------
  ------------------
 1359|   172k|#endif /*DEBUG_LEAK*/
 1360|   172k|}
image.c:vips_image_minimise_all_cb:
 1425|   313k|{
 1426|   313k|	vips_image_minimise(image);
 1427|       |
 1428|   313k|	return NULL;
 1429|   313k|}
image.c:vips_image_minimise:
 1417|   313k|{
 1418|   313k|	VIPS_DEBUG_MSG("vips_image_minimise: %p\n", image);
  ------------------
  |  |   47|   313k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   313k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   313k|	{ \
  |  |   49|   313k|		; \
  |  |   50|   313k|	} \
  |  |   51|   313k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   313k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|       |
 1420|   313k|	g_signal_emit(image, vips_image_signals[SIG_MINIMISE], 0);
 1421|   313k|}
image.c:vips_progress_add:
 1475|  22.1k|{
 1476|  22.1k|	VipsProgress *progress;
 1477|       |
 1478|  22.1k|	VIPS_DEBUG_MSG("vips_progress_add: %p\n", image);
  ------------------
  |  |   47|  22.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  22.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  22.1k|	{ \
  |  |   49|  22.1k|		; \
  |  |   50|  22.1k|	} \
  |  |   51|  22.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|       |
 1480|  22.1k|	if (!(progress = image->time)) {
  ------------------
  |  Branch (1480:6): [True: 22.1k, False: 0]
  ------------------
 1481|  22.1k|		if (!(image->time = VIPS_NEW(NULL, VipsProgress)))
  ------------------
  |  |   70|  22.1k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  22.1k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  22.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  22.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  22.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1481:7): [True: 0, False: 22.1k]
  ------------------
 1482|      0|			return -1;
 1483|  22.1k|		progress = image->time;
 1484|       |
 1485|  22.1k|		progress->im = image;
 1486|  22.1k|		progress->start = NULL;
 1487|  22.1k|	}
 1488|       |
 1489|  22.1k|	if (!progress->start)
  ------------------
  |  Branch (1489:6): [True: 22.1k, False: 0]
  ------------------
 1490|  22.1k|		progress->start = g_timer_new();
 1491|       |
 1492|  22.1k|	g_timer_start(progress->start);
 1493|  22.1k|	progress->run = 0;
 1494|  22.1k|	progress->eta = 0;
 1495|  22.1k|	progress->tpels = VIPS_IMAGE_N_PELS(image);
  ------------------
  |  |  392|  22.1k|	((guint64) (I)->Xsize * (I)->Ysize)
  ------------------
 1496|  22.1k|	progress->npels = 0;
 1497|  22.1k|	progress->percent = 0;
 1498|       |
 1499|  22.1k|	return 0;
 1500|  22.1k|}
image.c:vips_progress_update:
 1504|  36.1k|{
 1505|  36.1k|	float prop;
 1506|       |
 1507|  36.1k|	VIPS_DEBUG_MSG("vips_progress_update: %p\n", progress);
  ------------------
  |  |   47|  36.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  36.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  36.1k|	{ \
  |  |   49|  36.1k|		; \
  |  |   50|  36.1k|	} \
  |  |   51|  36.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  36.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1508|       |
 1509|  36.1k|	g_assert(progress);
  ------------------
  |  |  166|  36.1k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  36.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  36.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1510|       |
 1511|  36.1k|	progress->run = g_timer_elapsed(progress->start, NULL);
 1512|  36.1k|	progress->npels = processed;
 1513|  36.1k|	prop = (float) progress->npels / (float) progress->tpels;
 1514|  36.1k|	progress->percent = 100 * prop;
 1515|       |
 1516|       |	/* Don't estimate eta until we are 10% in.
 1517|       |	 */
 1518|  36.1k|	if (prop > 0.1)
  ------------------
  |  Branch (1518:6): [True: 36.1k, False: 0]
  ------------------
 1519|  36.1k|		progress->eta = (1.0 / prop) * progress->run - progress->run;
 1520|  36.1k|}
image.c:vips_image_temp_name:
 1700|   172k|{
 1701|   172k|	static int global_serial = 0;
 1702|       |
 1703|   172k|	int serial = g_atomic_int_add(&global_serial, 1);
  ------------------
  |  |  162|   172k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   172k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|   172k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   172k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  164|   172k|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded - Ignored]
  |  |  ------------------
  |  |  165|   172k|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  166|   172k|  }))
  ------------------
 1704|       |
 1705|   172k|	g_snprintf(name, size, "temp-%d", serial);
 1706|   172k|}
image.c:vips_image_write_gen:
 2591|  26.3k|{
 2592|  26.3k|	VipsRegion *ir = (VipsRegion *) seq;
 2593|  26.3k|	VipsRect *r = &out_region->valid;
 2594|       |
 2595|       |	/*
 2596|       |	printf("vips_image_write_gen: %p "
 2597|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 2598|       |		out_region->im,
 2599|       |		r->left, r->top, r->width, r->height);
 2600|       |	 */
 2601|       |
 2602|       |	/* Copy with pointers.
 2603|       |	 */
 2604|  26.3k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (2604:6): [True: 5.04k, False: 21.3k]
  ------------------
 2605|  26.3k|		vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (2605:3): [True: 0, False: 21.3k]
  ------------------
 2606|  5.04k|		return -1;
 2607|       |
 2608|  21.3k|	return 0;
 2609|  26.3k|}

vips_max_coord_get:
  154|  32.7k|{
  155|       |	// CLI overrides env var
  156|  32.7k|	const char *as_str = vips__max_coord_arg ?
  ------------------
  |  Branch (156:23): [True: 0, False: 32.7k]
  ------------------
  157|  32.7k|		vips__max_coord_arg : g_getenv("VIPS_MAX_COORD");
  158|       |
  159|  32.7k|	if (as_str) {
  ------------------
  |  Branch (159:6): [True: 0, False: 32.7k]
  ------------------
  160|      0|		guint64 size = vips__parse_size(as_str);
  161|       |
  162|      0|		return VIPS_CLIP(100, size, INT_MAX);
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      0|	}
  164|  32.7k|	else
  165|  32.7k|		return VIPS_DEFAULT_MAX_COORD;
  ------------------
  |  |   65|  32.7k|#define VIPS_DEFAULT_MAX_COORD (100000000)
  ------------------
  166|  32.7k|}
vips_init:
  439|   387k|{
  440|   387k|	extern GType vips_system_get_type(void);
  441|   387k|	extern GType write_thread_state_get_type(void);
  442|   387k|	extern GType sink_memory_thread_state_get_type(void);
  443|   387k|	extern GType render_thread_state_get_type(void);
  444|   387k|	extern GType vips_source_get_type(void);
  445|   387k|	extern GType vips_source_custom_get_type(void);
  446|   387k|	extern GType vips_target_get_type(void);
  447|   387k|	extern GType vips_target_custom_get_type(void);
  448|   387k|	extern GType vips_g_input_stream_get_type(void);
  449|       |
  450|   387k|	static gboolean started = FALSE;
  ------------------
  |  |  794|   387k|#define	FALSE	(0)
  ------------------
  451|   387k|	static gboolean done = FALSE;
  ------------------
  |  |  794|   387k|#define	FALSE	(0)
  ------------------
  452|   387k|	const char *vips_min_stack_size;
  453|   387k|	gint64 min_stack_size;
  454|   387k|	const char *prefix;
  455|   387k|	const char *libdir;
  456|   387k|#ifdef ENABLE_NLS
  457|   387k|	char *locale;
  458|   387k|#endif /* ENABLE_NLS */
  459|       |
  460|       |	/* Two stage done handling: 'done' means we've completed, 'started'
  461|       |	 * means we're currently initialising. Use this to prevent recursive
  462|       |	 * invocation.
  463|       |	 */
  464|   387k|	if (done)
  ------------------
  |  Branch (464:6): [True: 387k, False: 2]
  ------------------
  465|       |		/* Called more than once, we succeeded, just return OK.
  466|       |		 */
  467|   387k|		return 0;
  468|      2|	if (started)
  ------------------
  |  Branch (468:6): [True: 0, False: 2]
  ------------------
  469|       |		/* Recursive invocation, something has broken horribly.
  470|       |		 * Hopefully the first init will handle it.
  471|       |		 */
  472|      0|		return 0;
  473|      2|	started = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  474|       |
  475|       |	/* Try to set a minimum stacksize, default 2mb. We need to do this
  476|       |	 * before any threads start.
  477|       |	 */
  478|      2|	min_stack_size = 2 * 1024 * 1024;
  479|      2|	if ((vips_min_stack_size = g_getenv("VIPS_MIN_STACK_SIZE")))
  ------------------
  |  Branch (479:6): [True: 0, False: 2]
  ------------------
  480|      0|		min_stack_size = vips__parse_size(vips_min_stack_size);
  481|      2|	(void) set_stacksize(min_stack_size);
  482|       |
  483|      2|	if (g_getenv("VIPS_INFO")
  ------------------
  |  Branch (483:6): [True: 0, False: 2]
  ------------------
  484|       |#if ENABLE_DEPRECATED
  485|       |		|| g_getenv("IM_INFO")
  486|       |#endif
  487|      2|	)
  488|      0|		vips_verbose();
  489|      2|	if (g_getenv("VIPS_PROFILE"))
  ------------------
  |  Branch (489:6): [True: 0, False: 2]
  ------------------
  490|      0|		vips_profile_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  491|      2|	if (g_getenv("VIPS_LEAK"))
  ------------------
  |  Branch (491:6): [True: 0, False: 2]
  ------------------
  492|      0|		vips_leak_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  493|      2|	if (g_getenv("VIPS_TRACE"))
  ------------------
  |  Branch (493:6): [True: 0, False: 2]
  ------------------
  494|      0|		vips_cache_set_trace(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  495|       |
  496|      2|	const char *pipe_read_limit;
  497|      2|	if ((pipe_read_limit = g_getenv("VIPS_PIPE_READ_LIMIT")))
  ------------------
  |  Branch (497:6): [True: 0, False: 2]
  ------------------
  498|      0|		vips_pipe_read_limit_set(vips__parse_size(pipe_read_limit));
  499|       |
  500|       |#ifdef G_OS_WIN32
  501|       |	/* Windows has a limit of 512 files open at once for the fopen() family
  502|       |	 * of functions, and 2048 for the _open() family. This raises the limit
  503|       |	 * of fopen() to the same level as _open().
  504|       |	 *
  505|       |	 * It will not go any higher than this, unfortunately.
  506|       |	 */
  507|       |	(void) _setmaxstdio(2048);
  508|       |#endif /*G_OS_WIN32*/
  509|       |
  510|      2|	vips__thread_init();
  511|      2|	vips__threadpool_init();
  512|      2|	vips__buffer_init();
  513|       |
  514|      2|	if (!vips__global_timer)
  ------------------
  |  Branch (514:6): [True: 2, False: 0]
  ------------------
  515|      2|		vips__global_timer = g_timer_new();
  516|       |
  517|      2|	VIPS_SETSTR(vips__argv0, argv0);
  ------------------
  |  |   53|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|      2|	{ \
  |  |   55|      2|		const char *sst = (V); \
  |  |   56|      2|		\
  |  |   57|      2|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 2, False: 0]
  |  |  ------------------
  |  |   58|      2|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 2, False: 0]
  |  |  |  Branch (58:16): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      2|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|      2|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|      2|	{ \
  |  |  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |  |  |   46|      0|		} \
  |  |  |  |  |  |   47|      2|	} \
  |  |  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 2, False: 0]
  |  |  ------------------
  |  |   61|      2|					(S) = g_strdup(sst); \
  |  |   62|      2|			} \
  |  |   63|      2|		} \
  |  |   64|      2|	} \
  |  |   65|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|      2|	vips__prgname = g_path_get_basename(argv0);
  519|       |
  520|      2|	vips__thread_profile_attach("main");
  521|       |
  522|       |	/* We can't do VIPS_GATE_START() until command-line processing
  523|       |	 * happens, since vips__thread_profile may not be set yet. Call
  524|       |	 * directly.
  525|       |	 */
  526|      2|	vips__thread_gate_start("init: main");
  527|      2|	vips__thread_gate_start("init: startup");
  528|       |
  529|       |	/* Try to discover our prefix.
  530|       |	 */
  531|      2|	if ((prefix = g_getenv("VIPSHOME")))
  ------------------
  |  Branch (531:6): [True: 1, False: 1]
  ------------------
  532|      1|		g_info("VIPSHOME = %s", prefix);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  533|      2|	if (!(prefix = vips_guess_prefix(argv0, "VIPSHOME")) ||
  ------------------
  |  Branch (533:6): [True: 0, False: 2]
  ------------------
  534|      2|		!(libdir = vips_guess_libdir(argv0, "VIPSHOME")))
  ------------------
  |  Branch (534:3): [True: 0, False: 2]
  ------------------
  535|      0|		return -1;
  536|       |
  537|      2|	g_info("VIPS_PREFIX = %s", VIPS_PREFIX);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  538|      2|	g_info("VIPS_LIBDIR = %s", VIPS_LIBDIR);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  539|      2|	g_info("prefix = %s", prefix);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  540|      2|	g_info("libdir = %s", libdir);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  541|       |
  542|       |	/* Get i18n .mo files from $VIPSHOME/share/locale/.
  543|       |	 */
  544|      2|#ifdef ENABLE_NLS
  545|      2|	locale = g_build_filename(prefix, "share", "locale", NULL);
  546|      2|	bindtextdomain(GETTEXT_PACKAGE, locale);
  ------------------
  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  ------------------
  547|      2|	g_free(locale);
  548|      2|#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
  549|      2|	bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
  ------------------
  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  ------------------
  550|      2|#endif /* HAVE_BIND_TEXTDOMAIN_CODESET */
  551|      2|#endif /* ENABLE_NLS */
  552|       |
  553|       |	/* Register base vips types.
  554|       |	 */
  555|      2|	(void) vips_image_get_type();
  556|      2|	(void) vips_region_get_type();
  557|      2|	(void) write_thread_state_get_type();
  558|      2|	(void) sink_memory_thread_state_get_type();
  559|      2|	(void) render_thread_state_get_type();
  560|      2|	(void) vips_source_get_type();
  561|      2|	(void) vips_source_custom_get_type();
  562|      2|	(void) vips_target_get_type();
  563|      2|	(void) vips_target_custom_get_type();
  564|      2|	vips__meta_init_types();
  565|      2|	vips__interpolate_init();
  566|       |
  567|       |#if ENABLE_DEPRECATED
  568|       |	im__format_init();
  569|       |#endif
  570|       |
  571|       |	/* Start up operator cache.
  572|       |	 */
  573|      2|	vips__cache_init();
  574|       |
  575|       |	/* Recomp reordering system.
  576|       |	 */
  577|      2|	vips__reorder_init();
  578|       |
  579|       |	/* Start up packages.
  580|       |	 */
  581|      2|	(void) vips_system_get_type();
  582|      2|	vips_arithmetic_operation_init();
  583|      2|	vips_conversion_operation_init();
  584|      2|	vips_create_operation_init();
  585|      2|	vips_foreign_operation_init();
  586|      2|	vips_resample_operation_init();
  587|      2|	vips_colour_operation_init();
  588|      2|	vips_histogram_operation_init();
  589|      2|	vips_convolution_operation_init();
  590|      2|	vips_freqfilt_operation_init();
  591|      2|	vips_morphology_operation_init();
  592|      2|	vips_draw_operation_init();
  593|      2|	vips_mosaicing_operation_init();
  594|      2|	vips_g_input_stream_get_type();
  595|       |
  596|       |#ifdef ENABLE_MODULES
  597|       |	/* Load any vips8 modules from the vips libdir. Keep going, even if
  598|       |	 * some modules fail to load.
  599|       |	 *
  600|       |	 * Only do this if we have been built as a set of loadable
  601|       |	 * modules, or we might try loading an operation into a library that
  602|       |	 * already has that operation built in.
  603|       |	 */
  604|       |	vips_load_plugins("%s/vips-modules-%d.%d",
  605|       |		libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
  606|       |
  607|       |#if ENABLE_DEPRECATED
  608|       |	/* We had vips8 plugins for a while.
  609|       |	 */
  610|       |	vips_load_plugins("%s/vips-plugins-%d.%d",
  611|       |		libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
  612|       |
  613|       |	/* Load up any vips7 plugins. We don't error on
  614|       |	 * failure, it's too annoying to have VIPS refuse to start because of
  615|       |	 * a broken plugin.
  616|       |	 */
  617|       |	if (im_load_plugins("%s/vips-%d.%d",
  618|       |			libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  619|       |		g_warning("%s", vips_error_buffer());
  620|       |		vips_error_clear();
  621|       |	}
  622|       |
  623|       |	/* Also load from libdir :-( kept for back compat convenience.
  624|       |	 */
  625|       |	if (im_load_plugins("%s", libdir)) {
  626|       |		g_warning("%s", vips_error_buffer());
  627|       |		vips_error_clear();
  628|       |	}
  629|       |#endif /*ENABLE_DEPRECATED*/
  630|       |#endif /*ENABLE_MODULES*/
  631|       |
  632|       |	/* Detect SIMD features.
  633|       |	 */
  634|      2|	vips__vector_init();
  635|       |
  636|      2|#ifdef DEBUG_LEAK
  637|      2|	vips__image_pixels_quark =
  638|      2|		g_quark_from_static_string("vips-image-pixels");
  639|      2|#endif /*DEBUG_LEAK*/
  640|       |
  641|       |	/* If VIPS_WARNING is defined, suppress all warning messages from vips.
  642|       |	 *
  643|       |	 * Libraries should not call g_log_set_handler(), it is
  644|       |	 * supposed to be for the application layer, but this can be awkward to
  645|       |	 * set up if you are using libvips from something like Ruby. Allow this
  646|       |	 * env var hack as a workaround.
  647|       |	 */
  648|      2|	if (g_getenv("VIPS_WARNING")
  ------------------
  |  Branch (648:6): [True: 0, False: 2]
  ------------------
  649|       |#if ENABLE_DEPRECATED
  650|       |		|| g_getenv("IM_WARNING")
  651|       |#endif
  652|      2|	)
  653|      0|		g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
  ------------------
  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  ------------------
  654|      0|			empty_log_handler, NULL);
  655|       |
  656|       |	/* Block any untrusted operations. This must come after plugin load.
  657|       |	 */
  658|      2|	if (g_getenv("VIPS_BLOCK_UNTRUSTED"))
  ------------------
  |  Branch (658:6): [True: 0, False: 2]
  ------------------
  659|      0|		vips_block_untrusted_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  660|       |
  661|      2|	done = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  662|       |
  663|      2|	vips__thread_gate_stop("init: startup");
  664|       |
  665|      2|	return 0;
  666|      2|}
vips_check_init:
  672|   387k|{
  673|       |	/* Pass in a nonsense name for argv0 ... this init path is only here
  674|       |	 * for old programs which are missing an vips_init() call. We need
  675|       |	 * i18n set up before we can translate.
  676|       |	 */
  677|   387k|	if (vips_init("vips"))
  ------------------
  |  Branch (677:6): [True: 0, False: 387k]
  ------------------
  678|      0|		vips_error_clear();
  679|   387k|}
vips_thread_shutdown:
  699|  55.6k|{
  700|  55.6k|	vips__thread_profile_detach();
  701|  55.6k|	vips__buffer_shutdown();
  702|  55.6k|}
vips_guess_prefix:
 1147|      4|{
 1148|      4|	const char *prefix;
 1149|       |
 1150|       |	/* Already set?
 1151|       |	 */
 1152|      4|	if ((prefix = g_getenv(env_name)))
  ------------------
  |  Branch (1152:6): [True: 3, False: 1]
  ------------------
 1153|      3|		return prefix;
 1154|       |
 1155|       |#ifdef G_OS_WIN32
 1156|       |	prefix = vips__windows_prefix();
 1157|       |#else  /*!G_OS_WIN32*/
 1158|      1|	{
 1159|      1|		char *basename;
 1160|       |
 1161|      1|		basename = g_path_get_basename(argv0);
 1162|      1|		prefix = guess_prefix(argv0, basename);
 1163|      1|		g_free(basename);
 1164|      1|	}
 1165|      1|#endif /*G_OS_WIN32*/
 1166|       |
 1167|      1|	g_setenv(env_name, prefix, TRUE);
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1168|       |
 1169|      1|	return prefix;
 1170|      4|}
vips_guess_libdir:
 1194|      2|{
 1195|      2|	const char *prefix = vips_guess_prefix(argv0, env_name);
 1196|      2|	static char *libdir = NULL;
 1197|       |
 1198|      2|	char *suffix;
 1199|       |
 1200|      2|	if (libdir)
  ------------------
  |  Branch (1200:6): [True: 0, False: 2]
  ------------------
 1201|      0|		return libdir;
 1202|       |
 1203|       |	/* Have we been moved since configure? If not, use the configure-time
 1204|       |	 * libdir.
 1205|       |	 *
 1206|       |	 * The lib directory name can be eg. "lib", "lib64" etc. depending on
 1207|       |	 * the platform, so copy that from the configure-time libdir if we can.
 1208|       |	 * The configure-time LIBDIR is generated by autotools and always uses
 1209|       |	 * '/', even on Windows.
 1210|       |	 */
 1211|      2|	if (strcmp(prefix, VIPS_PREFIX) == 0)
  ------------------
  |  |  108|      2|#define VIPS_PREFIX "/work"
  ------------------
  |  Branch (1211:6): [True: 2, False: 0]
  ------------------
 1212|      2|		libdir = VIPS_LIBDIR;
  ------------------
  |  |  106|      2|#define VIPS_LIBDIR "/work/lib"
  ------------------
 1213|      0|	else if ((suffix = strrchr(VIPS_LIBDIR, '/')))
  ------------------
  |  |  106|      0|#define VIPS_LIBDIR "/work/lib"
  ------------------
  |  Branch (1213:11): [True: 0, False: 0]
  ------------------
 1214|      0|		libdir = g_strdup_printf("%s%s", prefix, suffix);
 1215|      0|	else
 1216|      0|		libdir = g_strdup_printf("%s/lib", prefix);
 1217|       |
 1218|      2|	return libdir;
 1219|      2|}
vips_version:
 1249|      4|{
 1250|      4|	switch (flag) {
 1251|      0|	case 0:
  ------------------
  |  Branch (1251:2): [True: 0, False: 4]
  ------------------
 1252|      0|		return VIPS_MAJOR_VERSION;
  ------------------
  |  |    9|      0|#define VIPS_MAJOR_VERSION (8)
  ------------------
 1253|       |
 1254|      0|	case 1:
  ------------------
  |  Branch (1254:2): [True: 0, False: 4]
  ------------------
 1255|      0|		return VIPS_MINOR_VERSION;
  ------------------
  |  |   10|      0|#define VIPS_MINOR_VERSION (17)
  ------------------
 1256|       |
 1257|      0|	case 2:
  ------------------
  |  Branch (1257:2): [True: 0, False: 4]
  ------------------
 1258|      0|		return VIPS_MICRO_VERSION;
  ------------------
  |  |   11|      0|#define VIPS_MICRO_VERSION (0)
  ------------------
 1259|       |
 1260|      2|	case 3:
  ------------------
  |  Branch (1260:2): [True: 2, False: 2]
  ------------------
 1261|      2|		return VIPS_LIBRARY_CURRENT;
  ------------------
  |  |   15|      2|#define VIPS_LIBRARY_CURRENT (61)
  ------------------
 1262|       |
 1263|      0|	case 4:
  ------------------
  |  Branch (1263:2): [True: 0, False: 4]
  ------------------
 1264|      0|		return VIPS_LIBRARY_REVISION;
  ------------------
  |  |   16|      0|#define VIPS_LIBRARY_REVISION (0)
  ------------------
 1265|       |
 1266|      2|	case 5:
  ------------------
  |  Branch (1266:2): [True: 2, False: 2]
  ------------------
 1267|      2|		return VIPS_LIBRARY_AGE;
  ------------------
  |  |   17|      2|#define VIPS_LIBRARY_AGE (19)
  ------------------
 1268|       |
 1269|      0|	default:
  ------------------
  |  Branch (1269:2): [True: 0, False: 4]
  ------------------
 1270|      0|		vips_error("vips_version", "%s", _("flag not in [0, 5]"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1271|      0|		return -1;
 1272|      4|	}
 1273|      4|}
init.c:set_stacksize:
  337|      2|{
  338|      2|#ifdef HAVE_PTHREAD_DEFAULT_NP
  339|      2|	pthread_attr_t attr;
  340|      2|	size_t cur_stack_size;
  341|       |
  342|       |	/* Don't allow stacks less than 2mb.
  343|       |	 */
  344|      2|	size = VIPS_MAX(size, 2 * 1024 * 1024);
  ------------------
  |  |   54|      2|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  345|       |
  346|      2|	if (pthread_attr_init(&attr) ||
  ------------------
  |  Branch (346:6): [True: 0, False: 2]
  ------------------
  347|      2|		pthread_attr_getstacksize(&attr, &cur_stack_size)) {
  ------------------
  |  Branch (347:3): [True: 0, False: 2]
  ------------------
  348|      0|		g_warning("set_stacksize: unable to get stack size");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  349|      0|		pthread_attr_destroy(&attr);
  350|      0|		return;
  351|      0|	}
  352|       |
  353|      2|	if (cur_stack_size < size) {
  ------------------
  |  Branch (353:6): [True: 0, False: 2]
  ------------------
  354|      0|		if (pthread_attr_setstacksize(&attr, size) ||
  ------------------
  |  Branch (354:7): [True: 0, False: 0]
  ------------------
  355|      0|			pthread_setattr_default_np(&attr))
  ------------------
  |  Branch (355:4): [True: 0, False: 0]
  ------------------
  356|      0|			g_warning("set_stacksize: unable to set stack size");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  357|      0|		else
  358|      0|			g_info("set stack size to %" G_GUINT64_FORMAT "k",
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  359|      0|				size / (guint64) 1024);
  360|      0|	}
  361|       |
  362|      2|	pthread_attr_destroy(&attr);
  363|      2|#endif /*HAVE_PTHREAD_DEFAULT_NP*/
  364|      2|}
init.c:guess_prefix:
 1063|      1|{
 1064|      1|	char *prefix;
 1065|       |
 1066|       |	/* We've already checked for VIPSHOME. If the configure-time
 1067|       |	 * library prefix looks OK, use the configure-time prefix.
 1068|       |	 */
 1069|      1|	if (vips_existsf("%s/vips-modules-%d.%d",
  ------------------
  |  Branch (1069:6): [True: 0, False: 1]
  ------------------
 1070|      1|			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |  106|      1|#define VIPS_LIBDIR "/work/lib"
  ------------------
              			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |    9|      1|#define VIPS_MAJOR_VERSION (8)
  ------------------
              			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |   10|      1|#define VIPS_MINOR_VERSION (17)
  ------------------
 1071|      0|		g_info("found %s/vips-modules-%d.%d",
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1072|      0|			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
 1073|      0|		g_info("using configure-time prefix");
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1074|      0|		return VIPS_PREFIX;
  ------------------
  |  |  108|      0|#define VIPS_PREFIX "/work"
  ------------------
 1075|      0|	}
 1076|       |
 1077|       |	/* Try to guess from argv0.
 1078|       |	 */
 1079|      1|	if (argv0) {
  ------------------
  |  Branch (1079:6): [True: 1, False: 0]
  ------------------
 1080|      1|		if (g_path_is_absolute(argv0)) {
  ------------------
  |  Branch (1080:7): [True: 1, False: 0]
  ------------------
 1081|       |			/* Must point to our executable.
 1082|       |			 */
 1083|      1|			if ((prefix = extract_prefix(argv0, name))) {
  ------------------
  |  Branch (1083:8): [True: 0, False: 1]
  ------------------
 1084|      0|				g_info("found \"%s\" from argv0", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1085|      0|				return prefix;
 1086|      0|			}
 1087|      1|		}
 1088|       |
 1089|       |		/* Look along path for name.
 1090|       |		 */
 1091|      1|		if ((prefix = find_file(name))) {
  ------------------
  |  Branch (1091:7): [True: 0, False: 1]
  ------------------
 1092|      0|			g_info("found \"%s\" from PATH", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1093|      0|			return prefix;
 1094|      0|		}
 1095|      1|	}
 1096|       |
 1097|       |	/* Try to guess from cwd. Only if this is a relative path, though.
 1098|       |	 */
 1099|      1|	if (argv0 &&
  ------------------
  |  Branch (1099:6): [True: 1, False: 0]
  ------------------
 1100|      1|		!g_path_is_absolute(argv0)) {
  ------------------
  |  Branch (1100:3): [True: 0, False: 1]
  ------------------
 1101|      0|		char *dir;
 1102|      0|		char full_path[VIPS_PATH_MAX];
 1103|      0|		char *resolved;
 1104|       |
 1105|      0|		dir = g_get_current_dir();
 1106|      0|		g_snprintf(full_path, VIPS_PATH_MAX,
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1107|      0|			"%s" G_DIR_SEPARATOR_S "%s", dir, argv0);
 1108|      0|		g_free(dir);
 1109|       |
 1110|      0|		if ((resolved = vips_realpath(full_path))) {
  ------------------
  |  Branch (1110:7): [True: 0, False: 0]
  ------------------
 1111|      0|			prefix = extract_prefix(resolved, name);
 1112|      0|			g_free(resolved);
 1113|       |
 1114|      0|			if (prefix) {
  ------------------
  |  Branch (1114:8): [True: 0, False: 0]
  ------------------
 1115|      0|				g_info("found \"%s\" from cwd", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1116|      0|				return prefix;
 1117|      0|			}
 1118|      0|		}
 1119|      0|	}
 1120|       |
 1121|       |	/* Fall back to the configure-time prefix.
 1122|       |	 */
 1123|      1|	return VIPS_PREFIX;
  ------------------
  |  |  108|      1|#define VIPS_PREFIX "/work"
  ------------------
 1124|      1|}
init.c:extract_prefix:
  941|      1|{
  942|      1|	char edir[VIPS_PATH_MAX];
  943|      1|	static char vname[VIPS_PATH_MAX];
  944|      1|	int i;
  945|       |
  946|      1|	g_info("trying for dir = \"%s\", name = \"%s\"", dir, name);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  947|       |
  948|       |	/* Is dir relative? Prefix with cwd.
  949|       |	 */
  950|      1|	if (!g_path_is_absolute(dir)) {
  ------------------
  |  Branch (950:6): [True: 0, False: 1]
  ------------------
  951|      0|		char *cwd;
  952|       |
  953|      0|		cwd = g_get_current_dir();
  954|      0|		g_snprintf(edir, VIPS_PATH_MAX,
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
  955|      0|			"%s" G_DIR_SEPARATOR_S "%s", cwd, dir);
  956|      0|		g_free(cwd);
  957|      0|	}
  958|      1|	else {
  959|      1|		g_strlcpy(edir, dir, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
  960|      1|	}
  961|       |
  962|       |	/* Chop off the trailing prog name, plus the trailing
  963|       |	 * G_DIR_SEPARATOR_S.
  964|       |	 */
  965|      1|	if (!g_str_has_suffix(edir, name))
  ------------------
  |  Branch (965:6): [True: 0, False: 1]
  ------------------
  966|      0|		return NULL;
  967|      1|	g_strlcpy(vname, edir, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
  968|      1|	vname[strlen(edir) - strlen(name) - 1] = '\0';
  969|       |
  970|       |	/* Remove any "/./", any trailing "/.", any trailing "/".
  971|       |	 */
  972|     41|	for (i = 0; i < (int) strlen(vname); i++)
  ------------------
  |  Branch (972:14): [True: 40, False: 1]
  ------------------
  973|     40|		if (vips_isprefix(G_DIR_SEPARATOR_S "." G_DIR_SEPARATOR_S,
  ------------------
  |  Branch (973:7): [True: 0, False: 40]
  ------------------
  974|     40|				vname + i))
  975|      0|			memmove(vname + i, vname + i + 2,
  976|      0|				strlen(vname + i + 2) + 1);
  977|      1|	if (g_str_has_suffix(vname, G_DIR_SEPARATOR_S "."))
  ------------------
  |  Branch (977:6): [True: 0, False: 1]
  ------------------
  978|      0|		vname[strlen(vname) - 2] = '\0';
  979|      1|	if (g_str_has_suffix(vname, G_DIR_SEPARATOR_S))
  ------------------
  |  Branch (979:6): [True: 0, False: 1]
  ------------------
  980|      0|		vname[strlen(vname) - 1] = '\0';
  981|       |
  982|      1|	g_info("canonicalised path = \"%s\"", vname);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  983|       |
  984|       |	/* Ought to be a "/bin" at the end now.
  985|       |	 */
  986|      1|	if (!g_str_has_suffix(vname, G_DIR_SEPARATOR_S "bin"))
  ------------------
  |  Branch (986:6): [True: 1, False: 0]
  ------------------
  987|      1|		return NULL;
  988|      0|	vname[strlen(vname) - strlen(G_DIR_SEPARATOR_S "bin")] = '\0';
  989|       |
  990|      0|	g_info("found \"%s\"", vname);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  991|       |
  992|      0|	return vname;
  993|      1|}
init.c:find_file:
 1028|      1|{
 1029|      1|	const char *path = g_getenv("PATH");
 1030|      1|	char *prefix;
 1031|      1|	char full_path[VIPS_PATH_MAX];
 1032|       |
 1033|      1|	if (!path)
  ------------------
  |  Branch (1033:6): [True: 0, False: 1]
  ------------------
 1034|      0|		return NULL;
 1035|       |
 1036|      1|	g_info("g_getenv(\"PATH\") == \"%s\"", path);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
 1037|       |
 1038|       |#ifdef G_OS_WIN32
 1039|       |	{
 1040|       |		char *dir;
 1041|       |
 1042|       |		/* Windows always searches '.' first, so prepend cwd to path.
 1043|       |		 */
 1044|       |		dir = g_get_current_dir();
 1045|       |		g_snprintf(full_path, VIPS_PATH_MAX,
 1046|       |			"%s" G_SEARCHPATH_SEPARATOR_S "%s", dir, path);
 1047|       |		g_free(dir);
 1048|       |	}
 1049|       |#else  /*!G_OS_WIN32*/
 1050|      1|	g_strlcpy(full_path, path, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
 1051|      1|#endif /*G_OS_WIN32*/
 1052|       |
 1053|      1|	if ((prefix = scan_path(full_path, name)))
  ------------------
  |  Branch (1053:6): [True: 0, False: 1]
  ------------------
 1054|      0|		return prefix;
 1055|       |
 1056|      1|	return NULL;
 1057|      1|}
init.c:scan_path:
  999|      1|{
 1000|      1|	char *p, *q;
 1001|      1|	char *prefix;
 1002|       |
 1003|      1|	for (p = path;
 1004|     11|		 (q = vips_break_token(p, G_SEARCHPATH_SEPARATOR_S)); p = q) {
  ------------------
  |  Branch (1004:4): [True: 10, False: 1]
  ------------------
 1005|     10|		char str[VIPS_PATH_MAX];
 1006|       |
 1007|       |		/* Form complete path.
 1008|       |		 */
 1009|     10|		g_snprintf(str, VIPS_PATH_MAX,
  ------------------
  |  |  245|     10|#define VIPS_PATH_MAX (4096)
  ------------------
 1010|     10|			"%s" G_DIR_SEPARATOR_S "%s", p, name);
 1011|       |
 1012|     10|		g_info("looking in \"%s\" for \"%s\"",
  ------------------
  |  |  341|     10|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     10|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|     10|                               G_LOG_LEVEL_INFO,     \
  |  |  343|     10|                               __VA_ARGS__)
  ------------------
 1013|     10|			p, name);
 1014|       |
 1015|     10|		if (vips_existsf("%s", str) &&
  ------------------
  |  Branch (1015:7): [True: 0, False: 10]
  ------------------
 1016|     10|			(prefix = extract_prefix(str, name))) {
  ------------------
  |  Branch (1016:4): [True: 0, False: 0]
  ------------------
 1017|      0|			return prefix;
 1018|      0|		}
 1019|     10|	}
 1020|       |
 1021|      1|	return NULL;
 1022|      1|}

vips_malloc:
  177|  1.68M|{
  178|  1.68M|	void *buf;
  179|       |
  180|  1.68M|	buf = g_malloc0(size);
  181|       |
  182|  1.68M|	if (object) {
  ------------------
  |  Branch (182:6): [True: 38.1k, False: 1.64M]
  ------------------
  183|  38.1k|		g_signal_connect(object, "postclose",
  ------------------
  |  |  491|  38.1k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  184|  38.1k|			G_CALLBACK(vips_malloc_cb), buf);
  185|  38.1k|		object->local_memory += size;
  186|  38.1k|	}
  187|       |
  188|  1.68M|	return buf;
  189|  1.68M|}
vips_strdup:
  208|     70|{
  209|     70|	char *str_dup;
  210|       |
  211|     70|	str_dup = g_strdup(str);
  212|       |
  213|     70|	if (object) {
  ------------------
  |  Branch (213:6): [True: 70, False: 0]
  ------------------
  214|     70|		g_signal_connect(object, "postclose",
  ------------------
  |  |  491|     70|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  215|     70|			G_CALLBACK(vips_malloc_cb), str_dup);
  216|     70|		object->local_memory += strlen(str);
  217|     70|	}
  218|       |
  219|     70|	return str_dup;
  220|     70|}
vips_tracked_free:
  234|  15.7k|{
  235|       |	/* Keep the size of the alloc in the previous 16 bytes. Ensures
  236|       |	 * alignment rules are kept.
  237|       |	 */
  238|  15.7k|	void *start = (void *) ((char *) s - 16);
  239|  15.7k|	size_t size = *((size_t *) start);
  240|       |
  241|  15.7k|	g_mutex_lock(&vips_tracked_mutex);
  242|       |
  243|       |#ifdef DEBUG_VERBOSE_MEM
  244|       |	printf("vips_tracked_free: %p, %zd bytes\n", s, size);
  245|       |#endif /*DEBUG_VERBOSE_MEM*/
  246|       |
  247|  15.7k|	if (vips_tracked_allocs <= 0)
  ------------------
  |  Branch (247:6): [True: 0, False: 15.7k]
  ------------------
  248|      0|		g_warning("%s", _("vips_free: too many frees"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  249|  15.7k|	if (vips_tracked_mem < size)
  ------------------
  |  Branch (249:6): [True: 0, False: 15.7k]
  ------------------
  250|      0|		g_warning("%s", _("vips_free: too much free"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  251|       |
  252|  15.7k|	vips_tracked_mem -= size;
  253|  15.7k|	vips_tracked_allocs -= 1;
  254|       |
  255|  15.7k|	g_mutex_unlock(&vips_tracked_mutex);
  256|       |
  257|  15.7k|	g_free(start);
  258|       |
  259|  15.7k|	VIPS_GATE_FREE(size);
  ------------------
  |  |   65|  15.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   66|  15.7k|	{ \
  |  |   67|  15.7k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (67:7): [True: 0, False: 15.7k]
  |  |  ------------------
  |  |   68|  15.7k|			vips__thread_malloc_free(-((gint64) (SIZE))); \
  |  |   69|  15.7k|	} \
  |  |   70|  15.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|  15.7k|}
vips_tracked_aligned_free:
  274|   229k|{
  275|   229k|	void *start = (size_t *) s - 1;
  276|   229k|	size_t size = *((size_t *) start);
  277|       |
  278|   229k|	g_mutex_lock(&vips_tracked_mutex);
  279|       |
  280|       |#ifdef DEBUG_VERBOSE
  281|       |	printf("vips_tracked_aligned_free: %p, %zd bytes\n", s, size);
  282|       |#endif /*DEBUG_VERBOSE*/
  283|       |
  284|   229k|	if (vips_tracked_allocs <= 0)
  ------------------
  |  Branch (284:6): [True: 0, False: 229k]
  ------------------
  285|      0|		g_warning("%s", _("vips_free: too many frees"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  286|   229k|	if (vips_tracked_mem < size)
  ------------------
  |  Branch (286:6): [True: 0, False: 229k]
  ------------------
  287|      0|		g_warning("%s", _("vips_free: too much free"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  288|       |
  289|   229k|	vips_tracked_mem -= size;
  290|   229k|	vips_tracked_allocs -= 1;
  291|       |
  292|   229k|	g_mutex_unlock(&vips_tracked_mutex);
  293|       |
  294|       |#ifdef HAVE__ALIGNED_MALLOC
  295|       |	_aligned_free(start);
  296|       |#else /*defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN)*/
  297|   229k|	free(start);
  298|   229k|#endif
  299|       |
  300|   229k|	VIPS_GATE_FREE(size);
  ------------------
  |  |   65|   229k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   229k|#define G_STMT_START  do
  |  |  ------------------
  |  |   66|   229k|	{ \
  |  |   67|   229k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (67:7): [True: 0, False: 229k]
  |  |  ------------------
  |  |   68|   229k|			vips__thread_malloc_free(-((gint64) (SIZE))); \
  |  |   69|   229k|	} \
  |  |   70|   229k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   229k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|   229k|}
vips_tracked_malloc:
  321|  15.7k|{
  322|  15.7k|	void *buf;
  323|       |
  324|       |	/* Need an extra sizeof(size_t) bytes to track
  325|       |	 * size of this block. Ask for an extra 16 to make sure we don't break
  326|       |	 * alignment rules.
  327|       |	 */
  328|  15.7k|	size += 16;
  329|       |
  330|  15.7k|	if (!(buf = g_try_malloc0(size))) {
  ------------------
  |  Branch (330:6): [True: 0, False: 15.7k]
  ------------------
  331|       |#ifdef DEBUG
  332|       |		g_assert_not_reached();
  333|       |#endif /*DEBUG*/
  334|       |
  335|      0|		vips_error("vips_tracked",
  336|      0|			_("out of memory --- size == %dMB"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  337|      0|			(int) (size / (1024.0 * 1024.0)));
  338|      0|		g_warning(_("out of memory --- size == %dMB"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  339|      0|			(int) (size / (1024.0 * 1024.0)));
  340|       |
  341|      0|		return NULL;
  342|      0|	}
  343|       |
  344|  15.7k|	g_mutex_lock(&vips_tracked_mutex);
  345|       |
  346|  15.7k|	*((size_t *) buf) = size;
  347|  15.7k|	buf = (void *) ((char *) buf + 16);
  348|       |
  349|  15.7k|	vips_tracked_mem += size;
  350|  15.7k|	if (vips_tracked_mem > vips_tracked_mem_highwater)
  ------------------
  |  Branch (350:6): [True: 13, False: 15.7k]
  ------------------
  351|     13|		vips_tracked_mem_highwater = vips_tracked_mem;
  352|  15.7k|	vips_tracked_allocs += 1;
  353|       |
  354|       |#ifdef DEBUG_VERBOSE_MEM
  355|       |	printf("vips_tracked_malloc: %p, %zd bytes\n", buf, size);
  356|       |#endif /*DEBUG_VERBOSE_MEM*/
  357|       |
  358|  15.7k|	g_mutex_unlock(&vips_tracked_mutex);
  359|       |
  360|  15.7k|	VIPS_GATE_MALLOC(size);
  ------------------
  |  |   57|  15.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   58|  15.7k|	{ \
  |  |   59|  15.7k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (59:7): [True: 0, False: 15.7k]
  |  |  ------------------
  |  |   60|  15.7k|			vips__thread_malloc_free((gint64) (SIZE)); \
  |  |   61|  15.7k|	} \
  |  |   62|  15.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  361|       |
  362|  15.7k|	return buf;
  363|  15.7k|}
vips_tracked_aligned_alloc:
  385|   229k|{
  386|   229k|	void *buf;
  387|       |
  388|   229k|	g_assert(!(align & (align - 1)));
  ------------------
  |  |  166|   229k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   229k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   229k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  389|       |
  390|       |	/* Need an extra sizeof(size_t) bytes to track
  391|       |	 * size of this block.
  392|       |	 */
  393|   229k|	size += sizeof(size_t);
  394|       |
  395|       |#ifdef HAVE__ALIGNED_MALLOC
  396|       |	if (!(buf = _aligned_malloc(size, align))) {
  397|       |#elif defined(HAVE_POSIX_MEMALIGN)
  398|   229k|	if (posix_memalign(&buf, align, size)) {
  ------------------
  |  Branch (398:6): [True: 0, False: 229k]
  ------------------
  399|       |#elif defined(HAVE_MEMALIGN)
  400|       |	if (!(buf = memalign(align, size))) {
  401|       |#else
  402|       |#error Missing aligned alloc implementation
  403|       |#endif
  404|       |#ifdef DEBUG
  405|       |		g_assert_not_reached();
  406|       |#endif /*DEBUG*/
  407|       |
  408|      0|		vips_error("vips_tracked",
  409|      0|			_("out of memory --- size == %dMB"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  410|      0|			(int) (size / (1024.0 * 1024.0)));
  411|      0|		g_warning(_("out of memory --- size == %dMB"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  412|      0|			(int) (size / (1024.0 * 1024.0)));
  413|       |
  414|      0|		return NULL;
  415|      0|	}
  416|       |
  417|   229k|	memset(buf, 0, size);
  418|       |
  419|   229k|	g_mutex_lock(&vips_tracked_mutex);
  420|       |
  421|   229k|	*((size_t *) buf) = size;
  422|       |
  423|   229k|	vips_tracked_mem += size;
  424|   229k|	if (vips_tracked_mem > vips_tracked_mem_highwater)
  ------------------
  |  Branch (424:6): [True: 442, False: 229k]
  ------------------
  425|    442|		vips_tracked_mem_highwater = vips_tracked_mem;
  426|   229k|	vips_tracked_allocs += 1;
  427|       |
  428|       |#ifdef DEBUG_VERBOSE
  429|       |	printf("vips_tracked_aligned_alloc: %p, %zd bytes\n", buf, size);
  430|       |#endif /*DEBUG_VERBOSE*/
  431|       |
  432|   229k|	g_mutex_unlock(&vips_tracked_mutex);
  433|       |
  434|   229k|	VIPS_GATE_MALLOC(size);
  ------------------
  |  |   57|   229k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   229k|#define G_STMT_START  do
  |  |  ------------------
  |  |   58|   229k|	{ \
  |  |   59|   229k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (59:7): [True: 0, False: 229k]
  |  |  ------------------
  |  |   60|   229k|			vips__thread_malloc_free((gint64) (SIZE)); \
  |  |   61|   229k|	} \
  |  |   62|   229k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   229k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|       |
  436|   229k|	return (void *) ((size_t *) buf + 1);
  437|   229k|}
vips_tracked_get_mem:
  530|   148k|{
  531|   148k|	size_t mem;
  532|       |
  533|   148k|	g_mutex_lock(&vips_tracked_mutex);
  534|       |
  535|   148k|	mem = vips_tracked_mem;
  536|       |
  537|   148k|	g_mutex_unlock(&vips_tracked_mutex);
  538|       |
  539|   148k|	return mem;
  540|   148k|}
vips_tracked_get_files:
  595|   148k|{
  596|   148k|	int n;
  597|       |
  598|   148k|	g_mutex_lock(&vips_tracked_mutex);
  599|       |
  600|   148k|	n = vips_tracked_files;
  601|       |
  602|   148k|	g_mutex_unlock(&vips_tracked_mutex);
  603|       |
  604|   148k|	return n;
  605|   148k|}
memory.c:vips_malloc_cb:
  155|  38.0k|{
  156|  38.0k|	g_free(buf);
  157|  38.0k|}

vips_argument_get_id:
  239|    864|{
  240|    864|	int id;
  241|       |
  242|       |	/* We probably don't need to lock: glib seems to single-thread class
  243|       |	 * creation.
  244|       |	 */
  245|    864|	id = _vips__argument_id++;
  246|       |
  247|    864|	return id;
  248|    864|}
vips_object_preclose:
  270|  1.32M|{
  271|  1.32M|	if (!object->preclose) {
  ------------------
  |  Branch (271:6): [True: 852k, False: 472k]
  ------------------
  272|   852k|		object->preclose = TRUE;
  ------------------
  |  |  798|   852k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   852k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  273|       |
  274|       |#ifdef DEBUG
  275|       |		printf("vips_object_preclose: ");
  276|       |		vips_object_print_name(object);
  277|       |		printf("\n");
  278|       |#endif /*DEBUG*/
  279|       |
  280|   852k|		g_signal_emit(object, vips_object_signals[SIG_PRECLOSE], 0);
  281|   852k|	}
  282|  1.32M|}
vips_object_build:
  356|   853k|{
  357|   853k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|   853k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|   853k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   853k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|       |
  359|       |	/* Input and output args must both be set.
  360|       |	 */
  361|   853k|	VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT | VIPS_ARGUMENT_OUTPUT;
  362|       |
  363|   853k|	int result;
  364|       |
  365|       |#ifdef DEBUG
  366|       |	printf("vips_object_build: ");
  367|       |	vips_object_print_name(object);
  368|       |	printf("\n");
  369|       |#endif /*DEBUG*/
  370|       |
  371|   853k|	if (class->build(object))
  ------------------
  |  Branch (371:6): [True: 17.4k, False: 835k]
  ------------------
  372|  17.4k|		return -1;
  373|       |
  374|       |	/* Check all required arguments have been supplied, don't stop on 1st
  375|       |	 * error.
  376|       |	 */
  377|   835k|	result = 0;
  378|   835k|	(void) vips_argument_map(object,
  379|   835k|		vips_object_check_required, &result, &iomask);
  380|       |
  381|       |	/* ... more checks go here.
  382|       |	 */
  383|   835k|	object->constructed = TRUE;
  ------------------
  |  |  798|   835k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   835k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  384|       |
  385|       |	/* Only postbuild on success.
  386|       |	 */
  387|   835k|	if (!result)
  ------------------
  |  Branch (387:6): [True: 835k, False: 0]
  ------------------
  388|   835k|		result = vips_object_postbuild(object);
  389|       |
  390|   835k|	return result;
  391|   853k|}
vips__argument_table_lookup:
  558|  58.0M|{
  559|  58.0M|	VipsArgument *argument;
  560|       |
  561|  58.0M|	g_mutex_lock(&vips__global_lock);
  562|  58.0M|	argument = (VipsArgument *) g_hash_table_lookup(table, pspec);
  563|  58.0M|	g_mutex_unlock(&vips__global_lock);
  564|       |
  565|  58.0M|	return argument;
  566|  58.0M|}
vips_argument_map:
  596|  3.94M|{
  597|       |	/* Make sure we can't go during the loop. This can happen if eg. we
  598|       |	 * flush an arg that refs us.
  599|       |	 */
  600|  3.94M|	g_object_ref(object);
  601|       |
  602|  31.0M|	VIPS_ARGUMENT_FOR_ALL(object,
  ------------------
  |  |  358|  3.94M|	{ \
  |  |  359|  3.94M|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|  3.94M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|  3.94M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|  3.94M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|  3.94M|		GSList *p; \
  |  |  361|  3.94M|\
  |  |  362|  35.0M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 31.0M, False: 3.94M]
  |  |  ------------------
  |  |  363|  31.0M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  31.0M|				(VipsArgumentClass *) p->data; \
  |  |  365|  31.0M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  31.0M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  31.0M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  31.0M|				vips__argument_get_instance(argument_class, \
  |  |  369|  31.0M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  31.0M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  31.0M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  31.0M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|  31.0M|		pspec, argument_class, argument_instance)
  604|  31.0M|	{
  605|  31.0M|		void *result;
  606|       |
  607|       |		/* argument_instance should not be NULL.
  608|       |		 */
  609|  31.0M|		g_assert(argument_instance);
  ------------------
  |  |  166|  31.0M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  31.0M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  31.0M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|       |
  611|  31.0M|		if ((result = fn(object, pspec,
  ------------------
  |  Branch (611:7): [True: 0, False: 31.0M]
  ------------------
  612|  31.0M|				 argument_class, argument_instance, a, b))) {
  613|      0|			g_object_unref(object);
  614|      0|			return result;
  615|      0|		}
  616|  31.0M|	}
  617|  31.0M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  31.0M|	} \
  |  |  373|  3.94M|	}
  ------------------
  618|       |
  619|  3.94M|	g_object_unref(object);
  620|       |
  621|  3.94M|	return NULL;
  622|  3.94M|}
vips__argument_get_instance:
  750|  49.4M|{
  751|       |	/* Make sure the instance args are built.
  752|       |	 */
  753|  49.4M|	vips_argument_init(object);
  754|       |
  755|  49.4M|	return (VipsArgumentInstance *)
  756|  49.4M|		vips__argument_table_lookup(object->argument_table,
  757|  49.4M|			((VipsArgument *) argument_class)->pspec);
  758|  49.4M|}
vips_object_get_argument:
  777|  1.37M|{
  778|  1.37M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.37M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.37M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.37M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|       |
  780|  1.37M|	if (!(*pspec = g_object_class_find_property(G_OBJECT_CLASS(class), name))) {
  ------------------
  |  |   58|  1.37M|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.37M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.37M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (780:6): [True: 0, False: 1.37M]
  ------------------
  781|      0|		vips_error(class->nickname, _("no property named `%s'"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  782|      0|		return -1;
  783|      0|	}
  784|       |
  785|  1.37M|	if (!(*argument_class = (VipsArgumentClass *)
  ------------------
  |  Branch (785:6): [True: 0, False: 1.37M]
  ------------------
  786|  1.37M|			vips__argument_table_lookup(class->argument_table, *pspec))) {
  787|      0|		vips_error(class->nickname, _("no vips argument named `%s'"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  788|      0|		return -1;
  789|      0|	}
  790|       |
  791|  1.37M|	if (!(*argument_instance = vips__argument_get_instance(
  ------------------
  |  Branch (791:6): [True: 0, False: 1.37M]
  ------------------
  792|  1.37M|		  *argument_class, object))) {
  793|      0|		vips_error(class->nickname, _("argument `%s' has no instance"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  794|      0|		return -1;
  795|      0|	}
  796|       |
  797|  1.37M|	return 0;
  798|  1.37M|}
vips_object_argument_isset:
  811|   790k|{
  812|   790k|	GParamSpec *pspec;
  813|   790k|	VipsArgumentClass *argument_class;
  814|   790k|	VipsArgumentInstance *argument_instance;
  815|       |
  816|   790k|	if (vips_object_get_argument(object, name,
  ------------------
  |  Branch (816:6): [True: 0, False: 790k]
  ------------------
  817|   790k|			&pspec, &argument_class, &argument_instance))
  818|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  819|       |
  820|   790k|	return argument_instance->assigned;
  821|   790k|}
vips__object_set_member:
 1088|   722k|{
 1089|   722k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|   722k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|   722k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   722k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|   722k|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1091|   722k|		vips__argument_table_lookup(class->argument_table, pspec);
 1092|   722k|	VipsArgumentInstance *argument_instance =
 1093|   722k|		vips__argument_get_instance(argument_class, object);
 1094|   722k|	GType otype = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|   722k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   722k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   722k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   722k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1095|       |
 1096|   722k|	g_assert(argument_instance);
  ------------------
  |  |  166|   722k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   722k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   722k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|       |
 1098|   722k|	vips_object_clear_member(argument_instance);
 1099|       |
 1100|   722k|	g_assert(!*member);
  ------------------
  |  |  166|   722k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   722k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   722k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|   722k|	*member = argument;
 1102|       |
 1103|   722k|	if (*member) {
  ------------------
  |  Branch (1103:6): [True: 291k, False: 431k]
  ------------------
 1104|   291k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (1104:7): [True: 153k, False: 137k]
  ------------------
 1105|       |#ifdef DEBUG_REF
 1106|       |			printf("vips__object_set_member: vips object: ");
 1107|       |			vips_object_print_name(object);
 1108|       |			printf("  refers to gobject %s (%p)\n",
 1109|       |				G_OBJECT_TYPE_NAME(*member), *member);
 1110|       |			printf("  count up to %d\n", G_OBJECT(*member)->ref_count);
 1111|       |#endif /*DEBUG_REF*/
 1112|       |
 1113|       |			/* Ref the argument.
 1114|       |			 */
 1115|   153k|			g_object_ref(*member);
 1116|   153k|		}
 1117|   137k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (1117:12): [True: 137k, False: 0]
  ------------------
 1118|       |#ifdef DEBUG_REF
 1119|       |			printf("vips__object_set_member: gobject %s (%p)\n",
 1120|       |				G_OBJECT_TYPE_NAME(*member), *member);
 1121|       |			printf("  refers to vips object: ");
 1122|       |			vips_object_print_name(object);
 1123|       |			printf("  count up to %d\n", G_OBJECT(object)->ref_count);
 1124|       |#endif /*DEBUG_REF*/
 1125|       |
 1126|       |			/* The argument reffs us.
 1127|       |			 */
 1128|   137k|			g_object_ref(object);
 1129|   137k|		}
 1130|   291k|	}
 1131|       |
 1132|   722k|	if (*member &&
  ------------------
  |  Branch (1132:6): [True: 291k, False: 431k]
  ------------------
 1133|   722k|		g_type_is_a(otype, VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  169|   291k|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  ------------------
  |  Branch (1133:3): [True: 267k, False: 24.3k]
  ------------------
 1134|   267k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (1134:7): [True: 129k, False: 137k]
  ------------------
 1135|   129k|			g_assert(!argument_instance->invalidate_id);
  ------------------
  |  |  166|   129k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   129k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   129k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |
 1137|   129k|			argument_instance->invalidate_id =
 1138|   129k|				g_signal_connect(*member, "invalidate",
  ------------------
  |  |  491|   129k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1139|   129k|					G_CALLBACK(vips_object_arg_invalidate),
 1140|   129k|					argument_instance);
 1141|   129k|		}
 1142|   137k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (1142:12): [True: 137k, False: 0]
  ------------------
 1143|   137k|			g_assert(!argument_instance->close_id);
  ------------------
  |  |  166|   137k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   137k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   137k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1144|       |
 1145|   137k|			argument_instance->close_id =
 1146|   137k|				g_signal_connect(*member, "close",
  ------------------
  |  |  491|   137k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1147|   137k|					G_CALLBACK(vips_object_arg_close),
 1148|   137k|					argument_instance);
 1149|   137k|		}
 1150|   267k|	}
 1151|   722k|}
vips_value_is_null:
 1159|  3.18M|{
 1160|  3.18M|	if (G_IS_PARAM_SPEC_STRING(pspec) &&
  ------------------
  |  |  370|  6.37M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  3.18M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  3.18M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  3.18M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  3.18M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  3.18M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 3.18M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  3.18M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  3.18M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 3.18M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 2.58M, False: 601k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  3.18M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  2.58M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  2.58M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  3.18M|  else \
  |  |  |  |  |  | 2321|  3.18M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  3.18M|  __r; \
  |  |  |  |  |  | 2323|  3.18M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 2.58M, False: 601k]
  |  |  ------------------
  ------------------
 1161|  3.18M|		!g_value_get_string(value))
  ------------------
  |  Branch (1161:3): [True: 2.58M, False: 0]
  ------------------
 1162|  2.58M|		return TRUE;
  ------------------
  |  |  798|  2.58M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.58M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1163|   601k|	if (G_IS_PARAM_SPEC_OBJECT(pspec) &&
  ------------------
  |  |  491|  1.20M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   601k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   601k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   601k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   601k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   601k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 601k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   601k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   601k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 601k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 398k, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   601k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   398k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   398k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   601k|  else \
  |  |  |  |  |  | 2321|   601k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   601k|  __r; \
  |  |  |  |  |  | 2323|   601k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 398k, False: 202k]
  |  |  ------------------
  ------------------
 1164|   601k|		!g_value_get_object(value))
  ------------------
  |  Branch (1164:3): [True: 398k, False: 0]
  ------------------
 1165|   398k|		return TRUE;
  ------------------
  |  |  798|   398k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   398k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1166|   202k|	if (G_IS_PARAM_SPEC_POINTER(pspec) &&
  ------------------
  |  |  439|   405k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|   202k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   202k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   202k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   202k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   202k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   202k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   202k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 202k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   202k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   202k|  else \
  |  |  |  |  |  | 2321|   202k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   202k|  __r; \
  |  |  |  |  |  | 2323|   202k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 202k]
  |  |  ------------------
  ------------------
 1167|   202k|		!g_value_get_pointer(value))
  ------------------
  |  Branch (1167:3): [True: 0, False: 0]
  ------------------
 1168|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1169|   202k|	if (G_IS_PARAM_SPEC_BOXED(pspec) &&
  ------------------
  |  |  416|   405k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|   202k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   202k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   202k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   202k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   202k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   202k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   202k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 202k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 202k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   202k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   202k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   202k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   202k|  else \
  |  |  |  |  |  | 2321|   202k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   202k|  __r; \
  |  |  |  |  |  | 2323|   202k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 202k, False: 0]
  |  |  ------------------
  ------------------
 1170|   202k|		!g_value_get_boxed(value))
  ------------------
  |  Branch (1170:3): [True: 202k, False: 0]
  ------------------
 1171|   202k|		return TRUE;
  ------------------
  |  |  798|   202k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   202k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1172|       |
 1173|      0|	return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 1174|   202k|}
vips_object_set_property:
 1181|  5.68M|{
 1182|  5.68M|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|  5.68M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  5.68M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  5.68M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|  5.68M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject);
  ------------------
  |  |  441|  5.68M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  5.68M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  5.68M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|  5.68M|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1185|  5.68M|		vips__argument_table_lookup(class->argument_table, pspec);
 1186|  5.68M|	VipsArgumentInstance *argument_instance =
 1187|  5.68M|		vips__argument_get_instance(argument_class, object);
 1188|       |
 1189|  5.68M|	g_assert(argument_instance);
  ------------------
  |  |  166|  5.68M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.68M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.68M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|       |
 1191|       |#ifdef DEBUG
 1192|       |	printf("vips_object_set_property: ");
 1193|       |	vips_object_print_name(object);
 1194|       |	printf(".%s\n", g_param_spec_get_name(pspec));
 1195|       |
 1196|       |	/* This can crash horribly with some values, have it as a separate
 1197|       |	 * chunk so we can easily comment it out.
 1198|       |	 */
 1199|       |	{
 1200|       |		char *str_value;
 1201|       |
 1202|       |		str_value = g_strdup_value_contents(value);
 1203|       |		printf("\t%s\n", str_value);
 1204|       |		g_free(str_value);
 1205|       |	}
 1206|       |#endif /*DEBUG*/
 1207|       |
 1208|  5.68M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  5.68M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.68M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.68M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1209|  5.68M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  5.68M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.68M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.68M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|       |
 1211|       |	/* If this is a construct-only argument, we can only set before we've
 1212|       |	 * built.
 1213|       |	 */
 1214|  5.68M|	if (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT &&
  ------------------
  |  Branch (1214:6): [True: 2.16M, False: 3.52M]
  ------------------
 1215|  5.68M|		object->constructed &&
  ------------------
  |  Branch (1215:3): [True: 1.14M, False: 1.01M]
  ------------------
 1216|  5.68M|		!vips_value_is_null(pspec, value)) {
  ------------------
  |  Branch (1216:3): [True: 0, False: 1.14M]
  ------------------
 1217|      0|		g_warning("%s: %s can't assign '%s' after construct",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1218|      0|			G_STRLOC,
 1219|      0|			G_OBJECT_TYPE_NAME(gobject),
 1220|      0|			g_param_spec_get_name(pspec));
 1221|      0|		return;
 1222|      0|	}
 1223|       |
 1224|       |	/* If this is a set-once argument, check we've not set it before.
 1225|       |	 */
 1226|  5.68M|	if (argument_class->flags & VIPS_ARGUMENT_SET_ONCE &&
  ------------------
  |  Branch (1226:6): [True: 4.09M, False: 1.59M]
  ------------------
 1227|  5.68M|		argument_instance->assigned &&
  ------------------
  |  Branch (1227:3): [True: 2.04M, False: 2.05M]
  ------------------
 1228|  5.68M|		!vips_value_is_null(pspec, value)) {
  ------------------
  |  Branch (1228:3): [True: 0, False: 2.04M]
  ------------------
 1229|      0|		g_warning("%s: %s can only assign '%s' once",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1230|      0|			G_STRLOC,
 1231|      0|			G_OBJECT_TYPE_NAME(gobject),
 1232|      0|			g_param_spec_get_name(pspec));
 1233|      0|		return;
 1234|      0|	}
 1235|       |
 1236|       |	/* We can't use a switch since some param specs don't have fundamental
 1237|       |	 * types and are hence not compile-time constants, argh.
 1238|       |	 */
 1239|  5.68M|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|  5.68M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  5.68M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  5.68M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  5.68M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  5.68M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  5.68M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 5.68M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  5.68M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  5.68M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 5.68M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 4.30M, False: 1.38M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  5.68M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  4.30M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  4.30M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  5.68M|  else \
  |  |  |  |  |  | 2321|  5.68M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  5.68M|  __r; \
  |  |  |  |  |  | 2323|  5.68M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 4.30M, False: 1.38M]
  |  |  ------------------
  ------------------
 1240|  4.30M|		char **member = &G_STRUCT_MEMBER(char *, object,
  ------------------
  |  |  842|  4.30M|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  4.30M|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1241|  4.30M|			argument_class->offset);
 1242|       |
 1243|  4.30M|		if (*member)
  ------------------
  |  Branch (1243:7): [True: 2.18M, False: 2.11M]
  ------------------
 1244|  2.18M|			g_free(*member);
 1245|  4.30M|		*member = g_value_dup_string(value);
 1246|  4.30M|	}
 1247|  1.38M|	else if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|  1.38M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  1.38M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  1.38M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  1.38M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  1.38M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  1.38M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 1.38M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  1.38M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  1.38M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 1.38M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 722k, False: 662k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  1.38M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   722k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   722k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  1.38M|  else \
  |  |  |  |  |  | 2321|  1.38M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  1.38M|  __r; \
  |  |  |  |  |  | 2323|  1.38M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 722k, False: 662k]
  |  |  ------------------
  ------------------
 1248|   722k|		GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   722k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   722k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1249|   722k|			argument_class->offset);
 1250|       |
 1251|   722k|		vips__object_set_member(object, pspec, member,
 1252|   722k|			g_value_get_object(value));
 1253|   722k|	}
 1254|   662k|	else if (G_IS_PARAM_SPEC_INT(pspec)) {
  ------------------
  |  |  117|   662k|#define G_IS_PARAM_SPEC_INT(pspec)         (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
  |  |  ------------------
  |  |  |  |  497|   662k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   662k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   662k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   662k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   662k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 662k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   662k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   662k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 662k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 121k, False: 541k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   662k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   121k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   121k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   662k|  else \
  |  |  |  |  |  | 2321|   662k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   662k|  __r; \
  |  |  |  |  |  | 2323|   662k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (117:44): [True: 121k, False: 541k]
  |  |  ------------------
  ------------------
 1255|   121k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|   121k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   121k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1256|   121k|			argument_class->offset);
 1257|       |
 1258|   121k|		*member = g_value_get_int(value);
 1259|   121k|	}
 1260|   541k|	else if (G_IS_PARAM_SPEC_UINT64(pspec)) {
  ------------------
  |  |  232|   541k|#define G_IS_PARAM_SPEC_UINT64(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
  |  |  ------------------
  |  |  |  |  497|   541k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   541k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   541k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   541k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   541k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 541k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   541k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   541k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 541k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 541k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   541k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   541k|  else \
  |  |  |  |  |  | 2321|   541k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   541k|  __r; \
  |  |  |  |  |  | 2323|   541k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (232:44): [True: 0, False: 541k]
  |  |  ------------------
  ------------------
 1261|      0|		guint64 *member = &G_STRUCT_MEMBER(guint64, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1262|      0|			argument_class->offset);
 1263|       |
 1264|      0|		*member = g_value_get_uint64(value);
 1265|      0|	}
 1266|   541k|	else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|   541k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|   541k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   541k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   541k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   541k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   541k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 541k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   541k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   541k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 541k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 16.7k, False: 524k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   541k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  16.7k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  16.7k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   541k|  else \
  |  |  |  |  |  | 2321|   541k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   541k|  __r; \
  |  |  |  |  |  | 2323|   541k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 16.7k, False: 524k]
  |  |  ------------------
  ------------------
 1267|  16.7k|		gboolean *member = &G_STRUCT_MEMBER(gboolean, object,
  ------------------
  |  |  842|  16.7k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  16.7k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1268|  16.7k|			argument_class->offset);
 1269|       |
 1270|  16.7k|		*member = g_value_get_boolean(value);
 1271|  16.7k|	}
 1272|   524k|	else if (G_IS_PARAM_SPEC_ENUM(pspec)) {
  ------------------
  |  |  278|   524k|#define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
  |  |  ------------------
  |  |  |  |  497|   524k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   524k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   524k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   524k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   524k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 524k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   524k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   524k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 524k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 60.0k, False: 464k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   524k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  60.0k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  60.0k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   524k|  else \
  |  |  |  |  |  | 2321|   524k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   524k|  __r; \
  |  |  |  |  |  | 2323|   524k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (278:44): [True: 60.0k, False: 464k]
  |  |  ------------------
  ------------------
 1273|  60.0k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|  60.0k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  60.0k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1274|  60.0k|			argument_class->offset);
 1275|       |
 1276|  60.0k|		*member = g_value_get_enum(value);
 1277|  60.0k|	}
 1278|   464k|	else if (G_IS_PARAM_SPEC_FLAGS(pspec)) {
  ------------------
  |  |  301|   464k|#define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
  |  |  ------------------
  |  |  |  |  497|   464k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   464k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   464k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   464k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   464k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 464k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   464k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   464k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 464k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 23.5k, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   464k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  23.5k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  23.5k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   464k|  else \
  |  |  |  |  |  | 2321|   464k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   464k|  __r; \
  |  |  |  |  |  | 2323|   464k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (301:44): [True: 23.5k, False: 440k]
  |  |  ------------------
  ------------------
 1279|  23.5k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|  23.5k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  23.5k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1280|  23.5k|			argument_class->offset);
 1281|       |
 1282|  23.5k|		*member = g_value_get_flags(value);
 1283|  23.5k|	}
 1284|   440k|	else if (G_IS_PARAM_SPEC_POINTER(pspec)) {
  ------------------
  |  |  439|   440k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|   440k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   440k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   440k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   440k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   440k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   440k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   440k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 440k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   440k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   440k|  else \
  |  |  |  |  |  | 2321|   440k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   440k|  __r; \
  |  |  |  |  |  | 2323|   440k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 440k]
  |  |  ------------------
  ------------------
 1285|      0|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1286|      0|			argument_class->offset);
 1287|       |
 1288|      0|		*member = g_value_get_pointer(value);
 1289|      0|	}
 1290|   440k|	else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) {
  ------------------
  |  |  347|   440k|#define G_IS_PARAM_SPEC_DOUBLE(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
  |  |  ------------------
  |  |  |  |  497|   440k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   440k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   440k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   440k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   440k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   440k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   440k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 440k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   440k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   440k|  else \
  |  |  |  |  |  | 2321|   440k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   440k|  __r; \
  |  |  |  |  |  | 2323|   440k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (347:44): [True: 0, False: 440k]
  |  |  ------------------
  ------------------
 1291|      0|		double *member = &G_STRUCT_MEMBER(double, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1292|      0|			argument_class->offset);
 1293|       |
 1294|      0|		*member = g_value_get_double(value);
 1295|      0|	}
 1296|   440k|	else if (G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|   440k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|   440k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   440k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   440k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   440k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   440k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 440k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   440k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   440k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 440k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 440k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   440k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   440k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   440k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   440k|  else \
  |  |  |  |  |  | 2321|   440k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   440k|  __r; \
  |  |  |  |  |  | 2323|   440k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 440k, False: 0]
  |  |  ------------------
  ------------------
 1297|   440k|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|   440k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   440k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1298|   440k|			argument_class->offset);
 1299|       |
 1300|   440k|		if (*member) {
  ------------------
  |  Branch (1300:7): [True: 237k, False: 203k]
  ------------------
 1301|   237k|			g_boxed_free(G_PARAM_SPEC_VALUE_TYPE(pspec),
  ------------------
  |  |  103|   237k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   237k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   237k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   237k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1302|   237k|				*member);
 1303|   237k|			*member = NULL;
 1304|   237k|		}
 1305|       |
 1306|       |		/* Copy the boxed into our pointer (will use eg.
 1307|       |		 * vips__object_vector_dup()).
 1308|       |		 */
 1309|   440k|		*member = g_value_dup_boxed(value);
 1310|   440k|	}
 1311|      0|	else {
 1312|      0|		g_warning("%s: %s.%s unimplemented property type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1313|      0|			G_STRLOC,
 1314|      0|			G_OBJECT_TYPE_NAME(gobject),
 1315|      0|			g_param_spec_get_name(pspec),
 1316|      0|			g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec)));
 1317|      0|	}
 1318|       |
 1319|       |	/* Note that it's now been set.
 1320|       |	 */
 1321|  5.68M|	argument_instance->assigned = TRUE;
  ------------------
  |  |  798|  5.68M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  5.68M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1322|  5.68M|}
vips_object_get_property:
 1329|   852k|{
 1330|   852k|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|   852k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   852k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   852k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|   852k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject);
  ------------------
  |  |  441|   852k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|   852k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   852k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1332|   852k|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1333|   852k|		vips__argument_table_lookup(class->argument_table, pspec);
 1334|   852k|	VipsArgumentInstance *argument_instance =
 1335|   852k|		vips__argument_get_instance(argument_class, object);
 1336|       |
 1337|   852k|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|   852k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   852k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   852k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|       |
 1339|   852k|	if (!argument_instance->assigned) {
  ------------------
  |  Branch (1339:6): [True: 0, False: 852k]
  ------------------
 1340|       |		/* Set the value to the default. Things like Ruby
 1341|       |		 * gobject-introspection will walk objects during GC, and we
 1342|       |		 * can find ourselves fetching object values between init and
 1343|       |		 * build.
 1344|       |		 */
 1345|      0|		g_param_value_set_default(pspec, value);
 1346|      0|		return;
 1347|      0|	}
 1348|       |
 1349|   852k|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|   852k|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|   852k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   852k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   852k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   852k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   852k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 852k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   852k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   852k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 852k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 852k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   852k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   852k|  else \
  |  |  |  |  |  | 2321|   852k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   852k|  __r; \
  |  |  |  |  |  | 2323|   852k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 0, False: 852k]
  |  |  ------------------
  ------------------
 1350|      0|		char *member = G_STRUCT_MEMBER(char *, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1351|      0|			argument_class->offset);
 1352|       |
 1353|      0|		g_value_set_string(value, member);
 1354|      0|	}
 1355|   852k|	else if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|   852k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   852k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   852k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   852k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   852k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   852k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 852k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   852k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   852k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 852k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 632k, False: 220k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   852k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   632k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   632k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   852k|  else \
  |  |  |  |  |  | 2321|   852k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   852k|  __r; \
  |  |  |  |  |  | 2323|   852k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 632k, False: 220k]
  |  |  ------------------
  ------------------
 1356|   632k|		GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   632k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   632k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1357|   632k|			argument_class->offset);
 1358|       |
 1359|   632k|		g_value_set_object(value, *member);
 1360|   632k|	}
 1361|   220k|	else if (G_IS_PARAM_SPEC_INT(pspec)) {
  ------------------
  |  |  117|   220k|#define G_IS_PARAM_SPEC_INT(pspec)         (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
  |  |  ------------------
  |  |  |  |  497|   220k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   220k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   220k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   220k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   220k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 220k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   220k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   220k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 220k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 89.4k, False: 130k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   220k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  89.4k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  89.4k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   220k|  else \
  |  |  |  |  |  | 2321|   220k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   220k|  __r; \
  |  |  |  |  |  | 2323|   220k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (117:44): [True: 89.4k, False: 130k]
  |  |  ------------------
  ------------------
 1362|  89.4k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|  89.4k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  89.4k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1363|  89.4k|			argument_class->offset);
 1364|       |
 1365|  89.4k|		g_value_set_int(value, *member);
 1366|  89.4k|	}
 1367|   130k|	else if (G_IS_PARAM_SPEC_UINT64(pspec)) {
  ------------------
  |  |  232|   130k|#define G_IS_PARAM_SPEC_UINT64(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
  |  |  ------------------
  |  |  |  |  497|   130k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   130k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   130k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   130k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   130k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 130k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   130k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   130k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 130k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 130k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   130k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   130k|  else \
  |  |  |  |  |  | 2321|   130k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   130k|  __r; \
  |  |  |  |  |  | 2323|   130k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (232:44): [True: 0, False: 130k]
  |  |  ------------------
  ------------------
 1368|      0|		guint64 *member = &G_STRUCT_MEMBER(guint64, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1369|      0|			argument_class->offset);
 1370|       |
 1371|      0|		g_value_set_uint64(value, *member);
 1372|      0|	}
 1373|   130k|	else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|   130k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|   130k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   130k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   130k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   130k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   130k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 130k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   130k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   130k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 130k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 2.42k, False: 128k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   130k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  2.42k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  2.42k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   130k|  else \
  |  |  |  |  |  | 2321|   130k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   130k|  __r; \
  |  |  |  |  |  | 2323|   130k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 2.42k, False: 128k]
  |  |  ------------------
  ------------------
 1374|  2.42k|		gboolean *member = &G_STRUCT_MEMBER(gboolean, object,
  ------------------
  |  |  842|  2.42k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  2.42k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1375|  2.42k|			argument_class->offset);
 1376|       |
 1377|  2.42k|		g_value_set_boolean(value, *member);
 1378|  2.42k|	}
 1379|   128k|	else if (G_IS_PARAM_SPEC_ENUM(pspec)) {
  ------------------
  |  |  278|   128k|#define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
  |  |  ------------------
  |  |  |  |  497|   128k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   128k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   128k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   128k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   128k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 128k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   128k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   128k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 128k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 69.2k, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   128k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  69.2k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  69.2k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   128k|  else \
  |  |  |  |  |  | 2321|   128k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   128k|  __r; \
  |  |  |  |  |  | 2323|   128k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (278:44): [True: 69.2k, False: 59.1k]
  |  |  ------------------
  ------------------
 1380|  69.2k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|  69.2k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  69.2k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1381|  69.2k|			argument_class->offset);
 1382|       |
 1383|  69.2k|		g_value_set_enum(value, *member);
 1384|  69.2k|	}
 1385|  59.1k|	else if (G_IS_PARAM_SPEC_FLAGS(pspec)) {
  ------------------
  |  |  301|  59.1k|#define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
  |  |  ------------------
  |  |  |  |  497|  59.1k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  59.1k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  59.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  59.1k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  59.1k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  59.1k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  59.1k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 59.1k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  59.1k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  59.1k|  else \
  |  |  |  |  |  | 2321|  59.1k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  59.1k|  __r; \
  |  |  |  |  |  | 2323|  59.1k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (301:44): [True: 0, False: 59.1k]
  |  |  ------------------
  ------------------
 1386|      0|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1387|      0|			argument_class->offset);
 1388|       |
 1389|      0|		g_value_set_flags(value, *member);
 1390|      0|	}
 1391|  59.1k|	else if (G_IS_PARAM_SPEC_POINTER(pspec)) {
  ------------------
  |  |  439|  59.1k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|  59.1k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  59.1k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  59.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  59.1k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  59.1k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  59.1k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  59.1k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 59.1k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  59.1k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  59.1k|  else \
  |  |  |  |  |  | 2321|  59.1k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  59.1k|  __r; \
  |  |  |  |  |  | 2323|  59.1k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 59.1k]
  |  |  ------------------
  ------------------
 1392|      0|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1393|      0|			argument_class->offset);
 1394|       |
 1395|      0|		g_value_set_pointer(value, *member);
 1396|      0|	}
 1397|  59.1k|	else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) {
  ------------------
  |  |  347|  59.1k|#define G_IS_PARAM_SPEC_DOUBLE(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
  |  |  ------------------
  |  |  |  |  497|  59.1k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  59.1k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  59.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  59.1k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  59.1k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  59.1k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  59.1k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 59.1k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  59.1k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  59.1k|  else \
  |  |  |  |  |  | 2321|  59.1k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  59.1k|  __r; \
  |  |  |  |  |  | 2323|  59.1k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (347:44): [True: 0, False: 59.1k]
  |  |  ------------------
  ------------------
 1398|      0|		double *member = &G_STRUCT_MEMBER(double, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1399|      0|			argument_class->offset);
 1400|       |
 1401|      0|		g_value_set_double(value, *member);
 1402|      0|	}
 1403|  59.1k|	else if (G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|  59.1k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|  59.1k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  59.1k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  59.1k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  59.1k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  59.1k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 59.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  59.1k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  59.1k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 59.1k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 59.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  59.1k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  59.1k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  59.1k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  59.1k|  else \
  |  |  |  |  |  | 2321|  59.1k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  59.1k|  __r; \
  |  |  |  |  |  | 2323|  59.1k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 59.1k, False: 0]
  |  |  ------------------
  ------------------
 1404|  59.1k|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|  59.1k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  59.1k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1405|  59.1k|			argument_class->offset);
 1406|       |
 1407|       |		/* Copy the boxed into our pointer (will use eg.
 1408|       |		 * vips__object_vector_dup ()).
 1409|       |		 */
 1410|  59.1k|		g_value_set_boxed(value, *member);
 1411|  59.1k|	}
 1412|      0|	else {
 1413|      0|		g_warning("%s: %s.%s unimplemented property type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1414|      0|			G_STRLOC,
 1415|      0|			G_OBJECT_TYPE_NAME(gobject),
 1416|      0|			g_param_spec_get_name(pspec),
 1417|      0|			g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec)));
 1418|      0|	}
 1419|   852k|}
vips_object_class_install_argument:
 1712|    864|{
 1713|    864|	VipsArgumentClass *argument_class = g_new(VipsArgumentClass, 1);
  ------------------
  |  |  282|    864|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|    864|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|    864|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|    864|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|    864|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|    864|	  gpointer __p;						\
  |  |  |  |  231|    864|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 864]
  |  |  |  |  ------------------
  |  |  |  |  232|    864|	    __p = g_##func (__n);				\
  |  |  |  |  233|    864|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 864, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|    864|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 864]
  |  |  |  |  |  Branch (234:26): [True: 864, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|    864|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|    864|	  else							\
  |  |  |  |  237|    864|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|    864|	  __p;							\
  |  |  |  |  239|    864|	}))
  |  |  ------------------
  ------------------
 1714|       |
 1715|    864|	GSList *argument_table_traverse;
 1716|    864|	VipsArgumentClass *ac;
 1717|       |
 1718|       |#ifdef DEBUG
 1719|       |	printf("vips_object_class_install_argument: %p %s %s\n",
 1720|       |		object_class,
 1721|       |		g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1722|       |		g_param_spec_get_name(pspec));
 1723|       |#endif /*DEBUG*/
 1724|       |
 1725|       |	/* object_class->argument* is shared, so we must lock.
 1726|       |	 */
 1727|    864|	g_mutex_lock(&vips__global_lock);
 1728|       |
 1729|       |	/* Must be a new one.
 1730|       |	 */
 1731|    864|	g_assert(!g_hash_table_lookup(object_class->argument_table, pspec));
  ------------------
  |  |  166|    864|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1732|       |
 1733|       |	/* Mustn't have INPUT and OUTPUT both set.
 1734|       |	 */
 1735|    864|	g_assert(!(
  ------------------
  |  |  166|    864|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1736|    864|		(flags & VIPS_ARGUMENT_INPUT) &&
 1737|    864|		(flags & VIPS_ARGUMENT_OUTPUT)));
 1738|       |
 1739|    864|	((VipsArgument *) argument_class)->pspec = pspec;
 1740|    864|	argument_class->object_class = object_class;
 1741|    864|	argument_class->flags = flags;
 1742|    864|	argument_class->priority = priority;
 1743|    864|	argument_class->offset = offset;
 1744|       |
 1745|    864|	vips_argument_table_replace(object_class->argument_table,
 1746|    864|		(VipsArgument *) argument_class);
 1747|       |
 1748|       |	/* If this is the first argument for a new subclass, we need to clone
 1749|       |	 * the traverse list we inherit.
 1750|       |	 */
 1751|    864|	if (object_class->argument_table_traverse_gtype !=
  ------------------
  |  Branch (1751:6): [True: 289, False: 575]
  ------------------
 1752|    864|		G_TYPE_FROM_CLASS(object_class)) {
  ------------------
  |  |  613|    864|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1753|       |#ifdef DEBUG
 1754|       |		printf("vips_object_class_install_argument: cloning traverse\n");
 1755|       |#endif /*DEBUG*/
 1756|       |
 1757|    289|		object_class->argument_table_traverse =
 1758|    289|			g_slist_copy(object_class->argument_table_traverse);
 1759|    289|		object_class->argument_table_traverse_gtype =
 1760|    289|			G_TYPE_FROM_CLASS(object_class);
  ------------------
  |  |  613|    289|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1761|    289|	}
 1762|       |
 1763|       |	/* We read argument_table_traverse without a lock (eg. see
 1764|       |	 * vips_argument_map()), so we must be very careful updating it.
 1765|       |	 */
 1766|    864|	argument_table_traverse =
 1767|    864|		g_slist_copy(object_class->argument_table_traverse);
 1768|       |
 1769|       |	/* We keep traverse sorted by priority, so we mustn't have duplicate
 1770|       |	 * priority values in required args.
 1771|       |	 */
 1772|    864|	if ((flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1772:6): [True: 436, False: 428]
  ------------------
 1773|    864|		!(flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1773:3): [True: 428, False: 8]
  ------------------
 1774|    864|		(ac = vips_slist_map2(argument_table_traverse,
  ------------------
  |  Branch (1774:3): [True: 0, False: 428]
  ------------------
 1775|    428|			 traverse_find_required_priority,
 1776|    428|			 GINT_TO_POINTER(priority), NULL)))
 1777|      0|		g_warning("vips_object_class_install_argument: "
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1778|    864|				  "%s.%s, %s.%s duplicate priority",
 1779|    864|			g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1780|    864|			g_param_spec_get_name(pspec),
 1781|    864|			g_type_name(G_TYPE_FROM_CLASS(ac->object_class)),
 1782|    864|			g_param_spec_get_name(((VipsArgument *) ac)->pspec));
 1783|       |
 1784|       |	/* Warn about optional boolean args which default TRUE. These won't
 1785|       |	 * work from the CLI, since simple GOption switches don't allow
 1786|       |	 * `=false`.
 1787|       |	 */
 1788|    864|	if (!(flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1788:6): [True: 428, False: 436]
  ------------------
 1789|    864|		!(flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1789:3): [True: 399, False: 29]
  ------------------
 1790|    864|		G_IS_PARAM_SPEC_BOOLEAN(pspec) &&
  ------------------
  |  |   94|  1.26k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|    399|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|    399|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|    399|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|    399|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|    399|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 399]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|    399|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|    399|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 399, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 72, False: 327]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|    399|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|     72|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|     72|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|    399|  else \
  |  |  |  |  |  | 2321|    399|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|    399|  __r; \
  |  |  |  |  |  | 2323|    399|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 72, False: 327]
  |  |  ------------------
  ------------------
 1791|    864|		G_PARAM_SPEC_BOOLEAN(pspec)->default_value)
  ------------------
  |  |  101|     72|#define G_PARAM_SPEC_BOOLEAN(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean))
  |  |  ------------------
  |  |  |  |  484|     72|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     72|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1791:3): [True: 0, False: 72]
  ------------------
 1792|      0|		g_warning("vips_object_class_install_argument: "
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1793|    864|				  "default TRUE BOOL arg %s.%s",
 1794|    864|			g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1795|    864|			g_param_spec_get_name(pspec));
 1796|       |
 1797|    864|	argument_table_traverse = g_slist_prepend(
 1798|    864|		argument_table_traverse, argument_class);
 1799|    864|	argument_table_traverse = g_slist_sort(
 1800|    864|		argument_table_traverse, (GCompareFunc) traverse_sort);
 1801|    864|	VIPS_SWAP(GSList *,
  ------------------
  |  |  114|    864|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|    864|	{ \
  |  |  116|    864|		TYPE t = (A); \
  |  |  117|    864|		(A) = (B); \
  |  |  118|    864|		(B) = t; \
  |  |  119|    864|	} \
  |  |  120|    864|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1802|    864|		argument_table_traverse,
 1803|    864|		object_class->argument_table_traverse);
 1804|       |
 1805|    864|	g_slist_free(argument_table_traverse);
 1806|       |
 1807|       |#ifdef DEBUG
 1808|       |	{
 1809|       |		GSList *p;
 1810|       |
 1811|       |		printf("%d items on traverse %p\n",
 1812|       |			g_slist_length(object_class->argument_table_traverse),
 1813|       |			&object_class->argument_table_traverse);
 1814|       |		for (p = object_class->argument_table_traverse; p; p = p->next) {
 1815|       |			VipsArgumentClass *argument_class =
 1816|       |				(VipsArgumentClass *) p->data;
 1817|       |
 1818|       |			printf("\t%p %s\n",
 1819|       |				argument_class,
 1820|       |				g_param_spec_get_name(
 1821|       |					((VipsArgument *) argument_class)->pspec));
 1822|       |		}
 1823|       |	}
 1824|       |#endif /*DEBUG*/
 1825|       |
 1826|    864|	g_mutex_unlock(&vips__global_lock);
 1827|    864|}
vips_object_new:
 2361|  25.9k|{
 2362|  25.9k|	VipsObject *object;
 2363|       |
 2364|  25.9k|	vips_check_init();
 2365|       |
 2366|  25.9k|	object = VIPS_OBJECT(g_object_new(type, NULL));
  ------------------
  |  |  433|  25.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  25.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  25.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2367|       |
 2368|  25.9k|	if (set && set(object, a, b)) {
  ------------------
  |  Branch (2368:6): [True: 25.9k, False: 0]
  |  Branch (2368:13): [True: 0, False: 25.9k]
  ------------------
 2369|      0|		g_object_unref(object);
 2370|      0|		return NULL;
 2371|      0|	}
 2372|       |
 2373|  25.9k|	if (vips_object_build(object)) {
  ------------------
  |  Branch (2373:6): [True: 0, False: 25.9k]
  ------------------
 2374|      0|		g_object_unref(object);
 2375|      0|		return NULL;
 2376|      0|	}
 2377|       |
 2378|  25.9k|	return object;
 2379|  25.9k|}
vips_object_set_valist:
 2392|   155k|{
 2393|   155k|	char *name;
 2394|       |
 2395|   155k|	VIPS_DEBUG_MSG("vips_object_set_valist:\n");
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2396|       |
 2397|   191k|	for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) {
  ------------------
  |  Branch (2397:34): [True: 36.3k, False: 155k]
  ------------------
 2398|  36.3k|		GParamSpec *pspec;
 2399|  36.3k|		VipsArgumentClass *argument_class;
 2400|  36.3k|		VipsArgumentInstance *argument_instance;
 2401|       |
 2402|  36.3k|		VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name);
  ------------------
  |  |   47|  36.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  36.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  36.3k|	{ \
  |  |   49|  36.3k|		; \
  |  |   50|  36.3k|	} \
  |  |   51|  36.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  36.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2403|       |
 2404|  36.3k|		if (vips_object_get_argument(VIPS_OBJECT(object), name,
  ------------------
  |  |  433|  36.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  36.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  36.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2404:7): [True: 0, False: 36.3k]
  ------------------
 2405|  36.3k|				&pspec, &argument_class, &argument_instance))
 2406|      0|			return -1;
 2407|       |
 2408|  72.6k|		VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|  36.3k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 36.3k, False: 0]
  |  |  ------------------
  |  |  400|  36.3k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|  36.3k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|  36.3k|		gchar *error = NULL; \
  |  |  402|  36.3k|\
  |  |  403|  36.3k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|  36.3k|		 * and must be collected. \
  |  |  405|  36.3k|		 */ \
  |  |  406|  36.3k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|  36.3k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  36.3k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|  36.3k|G_STMT_START {										\
  |  |  |  |   90|  36.3k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|  36.3k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|  36.3k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|  36.3k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|  36.3k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|  36.3k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|  36.3k|                                                                                        \
  |  |  |  |   97|  36.3k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|  72.6k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 36.3k, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |   99|  36.3k|    {											\
  |  |  |  |  100|  36.3k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|  36.3k|                                                                                        \
  |  |  |  |  102|  36.3k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|  36.3k|	{										\
  |  |  |  |  104|  35.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 35.2k, False: 1.08k]
  |  |  |  |  ------------------
  |  |  |  |  105|  35.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  35.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|  1.08k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 1.08k, False: 35.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|  1.08k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|  1.08k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|  36.3k|	}										\
  |  |  |  |  122|  36.3k|    }											\
  |  |  |  |  123|  36.3k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|  36.3k|				       g_vci_n_values,					\
  |  |  |  |  125|  36.3k|				       g_vci_cvalues,					\
  |  |  |  |  126|  36.3k|				       g_vci_flags);						\
  |  |  |  |  127|  36.3k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  36.3k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|  36.3k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|  36.3k|\
  |  |  409|  36.3k|		/* Don't bother with the error message. \
  |  |  410|  36.3k|		 */ \
  |  |  411|  36.3k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 36.3k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
 2409|       |
 2410|  72.6k|		g_object_set_property(G_OBJECT(object), name, &value);
  ------------------
  |  |   51|  36.3k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  36.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  36.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2411|       |
 2412|  72.6k|		VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|  36.3k|	g_value_unset(&value); \
  |  |  418|  36.3k|	} \
  |  |  419|  36.3k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 0, False: 0]
  |  |  ------------------
  |  |  420|      0|	{ \
  |  |  421|      0|		void **arg G_GNUC_UNUSED; \
  |  |  422|      0|\
  |  |  423|      0|		/* Output args are a pointer to where to send the \
  |  |  424|      0|		 * result. \
  |  |  425|      0|		 */ \
  |  |  426|      0|		arg = va_arg(AP, void **);
  ------------------
 2413|       |
 2414|      0|		VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|      0|	}
  ------------------
 2415|  36.3k|	}
 2416|       |
 2417|   155k|	return 0;
 2418|   155k|}
vips_object_set_from_string:
 2569|  41.5k|{
 2570|  41.5k|	const char *q;
 2571|  41.5k|	VipsToken token;
 2572|  41.5k|	char buffer[VIPS_PATH_MAX];
 2573|  41.5k|	char str[VIPS_PATH_MAX];
 2574|       |
 2575|  41.5k|	g_strlcpy(buffer, string, VIPS_PATH_MAX);
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
 2576|       |
 2577|       |	/* Does string start with a bracket? If it doesn't, enclose the whole
 2578|       |	 * thing in [].
 2579|       |	 */
 2580|  41.5k|	if (!(q = vips__token_get(buffer, &token, str, VIPS_PATH_MAX)) ||
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2580:6): [True: 41.5k, False: 0]
  ------------------
 2581|  41.5k|		token != VIPS_TOKEN_LEFT)
  ------------------
  |  Branch (2581:3): [True: 0, False: 0]
  ------------------
 2582|  41.5k|		g_snprintf(buffer, VIPS_PATH_MAX, "[%s]", string);
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
 2583|      0|	else
 2584|      0|		g_strlcpy(buffer, string, VIPS_PATH_MAX);
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2585|       |
 2586|  41.5k|	return vips_object_set_args(object, buffer);
 2587|  41.5k|}
vips_type_map:
 2768|  9.82M|{
 2769|  9.82M|	GType *child;
 2770|  9.82M|	guint n_children;
 2771|  9.82M|	unsigned int i;
 2772|  9.82M|	void *result;
 2773|       |
 2774|  9.82M|	child = g_type_children(base, &n_children);
 2775|  9.82M|	result = NULL;
 2776|  19.6M|	for (i = 0; i < n_children && !result; i++)
  ------------------
  |  Branch (2776:14): [True: 9.93M, False: 9.67M]
  |  Branch (2776:32): [True: 9.77M, False: 151k]
  ------------------
 2777|  9.77M|		result = fn(child[i], a, b);
 2778|  9.82M|	g_free(child);
 2779|       |
 2780|  9.82M|	return result;
 2781|  9.82M|}
vips_class_map_all:
 2822|  9.87M|{
 2823|  9.87M|	void *result;
 2824|       |
 2825|       |	/* Avoid abstract classes. Use type_map_all for them.
 2826|       |	 */
 2827|  9.87M|	if (!G_TYPE_IS_ABSTRACT(type)) {
  ------------------
  |  |  343|  9.87M|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2827:6): [True: 7.96M, False: 1.90M]
  ------------------
 2828|       |		/* We never unref this ref, but we never unload classes
 2829|       |		 * anyway, so so what.
 2830|       |		 */
 2831|  7.96M|		if ((result = fn(
  ------------------
  |  Branch (2831:7): [True: 44.3k, False: 7.92M]
  ------------------
 2832|  7.96M|				 VIPS_OBJECT_CLASS(g_type_class_ref(type)), a)))
  ------------------
  |  |  435|  7.96M|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  7.96M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  7.96M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2833|  44.3k|			return result;
 2834|  7.96M|	}
 2835|       |
 2836|  9.82M|	if ((result = vips_type_map(type,
  ------------------
  |  Branch (2836:6): [True: 171k, False: 9.65M]
  ------------------
 2837|  9.82M|			 (VipsTypeMap2Fn) vips_class_map_all, fn, a)))
 2838|   171k|		return result;
 2839|       |
 2840|  9.65M|	return NULL;
 2841|  9.82M|}
vips_class_find:
 2886|  44.3k|{
 2887|  44.3k|	const char *classname = basename ? basename : "VipsObject";
  ------------------
  |  Branch (2887:26): [True: 44.3k, False: 0]
  ------------------
 2888|       |
 2889|  44.3k|	VipsObjectClass *class;
 2890|  44.3k|	GType base;
 2891|       |
 2892|  44.3k|	if (!(base = g_type_from_name(classname)))
  ------------------
  |  Branch (2892:6): [True: 0, False: 44.3k]
  ------------------
 2893|      0|		return NULL;
 2894|  44.3k|	class = vips_class_map_all(base,
 2895|  44.3k|		(VipsClassMapFn) test_name, (void *) nickname);
 2896|       |
 2897|  44.3k|	return class;
 2898|  44.3k|}
vips_type_find:
 2968|   155k|{
 2969|   155k|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|   155k|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
 2970|       |
 2971|   155k|	const char *classname = basename ? basename : "VipsObject";
  ------------------
  |  Branch (2971:26): [True: 155k, False: 0]
  ------------------
 2972|       |
 2973|   155k|	NicknameGType *hit;
 2974|   155k|	GType base;
 2975|   155k|	GType type;
 2976|       |
 2977|   155k|	VIPS_ONCE(&once, vips_class_build_hash_cb, NULL);
  ------------------
  |  |   93|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|   155k|	{ \
  |  |   95|   155k|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|   155k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|   155k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   155k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|   155k|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|   155k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 155k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|   155k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|   155k|   else                                         \
  |  |  |  |  |  |  931|   155k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|   155k|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|   155k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|   155k|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|   155k|	} \
  |  |   98|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2978|       |
 2979|   155k|	hit = (NicknameGType *)
 2980|   155k|		g_hash_table_lookup(vips__object_nickname_table, (void *) nickname);
 2981|       |
 2982|       |	/* We must only search below basename ... check that the cache hit is
 2983|       |	 * in the right part of the tree.
 2984|       |	 */
 2985|   155k|	if (!(base = g_type_from_name(classname)))
  ------------------
  |  Branch (2985:6): [True: 0, False: 155k]
  ------------------
 2986|      0|		return 0;
 2987|   155k|	if (hit &&
  ------------------
  |  Branch (2987:6): [True: 114k, False: 41.5k]
  ------------------
 2988|   155k|		!hit->duplicate &&
  ------------------
  |  Branch (2988:3): [True: 111k, False: 2.78k]
  ------------------
 2989|   155k|		g_type_is_a(hit->type, base))
  ------------------
  |  Branch (2989:3): [True: 111k, False: 0]
  ------------------
 2990|   111k|		type = hit->type;
 2991|  44.3k|	else {
 2992|  44.3k|		const VipsObjectClass *class;
 2993|       |
 2994|  44.3k|		if (!(class = vips_class_find(basename, nickname)))
  ------------------
  |  Branch (2994:7): [True: 0, False: 44.3k]
  ------------------
 2995|      0|			return 0;
 2996|       |
 2997|  44.3k|		type = G_OBJECT_CLASS_TYPE(class);
  ------------------
  |  |  114|  44.3k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  ------------------
  |  |  |  |  613|  44.3k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  ------------------
  ------------------
 2998|  44.3k|	}
 2999|       |
 3000|   155k|	return type;
 3001|   155k|}
vips_object_local_cb:
 3030|  13.7k|{
 3031|  13.7k|	VIPS_FREEF(g_object_unref, gobject);
  ------------------
  |  |   41|  13.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  13.7k|	{ \
  |  |   43|  13.7k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 13.7k, False: 0]
  |  |  ------------------
  |  |   44|  13.7k|			(void) F((S)); \
  |  |   45|  13.7k|			(S) = 0; \
  |  |   46|  13.7k|		} \
  |  |   47|  13.7k|	} \
  |  |   48|  13.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3032|  13.7k|}
vips_object_local_array:
 3082|  86.4k|{
 3083|  86.4k|	VipsObjectLocal *local;
 3084|       |
 3085|  86.4k|	local = g_new(VipsObjectLocal, 1);
  ------------------
  |  |  282|  86.4k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  86.4k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  86.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  86.4k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  86.4k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  86.4k|	  gpointer __p;						\
  |  |  |  |  231|  86.4k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 86.4k]
  |  |  |  |  ------------------
  |  |  |  |  232|  86.4k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  86.4k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 86.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  86.4k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 86.4k]
  |  |  |  |  |  Branch (234:26): [True: 86.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  86.4k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  86.4k|	  else							\
  |  |  |  |  237|  86.4k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  86.4k|	  __p;							\
  |  |  |  |  239|  86.4k|	}))
  |  |  ------------------
  ------------------
 3086|  86.4k|	local->n = n;
 3087|       |	/* Make the array 1 too long so we can be sure there's a NULL
 3088|       |	 * terminator.
 3089|       |	 */
 3090|  86.4k|	local->array = g_new0(VipsObject *, n + 1);
  ------------------
  |  |  299|  86.4k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|  86.4k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  86.4k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  86.4k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  86.4k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  86.4k|	  gpointer __p;						\
  |  |  |  |  231|  86.4k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 86.4k]
  |  |  |  |  ------------------
  |  |  |  |  232|  86.4k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  86.4k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 0, False: 86.4k]
  |  |  |  |  ------------------
  |  |  |  |  234|  86.4k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (234:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  86.4k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  86.4k|	  else							\
  |  |  |  |  237|  86.4k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  86.4k|	  __p;							\
  |  |  |  |  239|  86.4k|	}))
  |  |  ------------------
  ------------------
 3091|       |
 3092|  86.4k|	g_signal_connect(parent, "close",
  ------------------
  |  |  491|  86.4k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 3093|  86.4k|		G_CALLBACK(vips_object_local_array_cb), local);
 3094|       |
 3095|  86.4k|	return local->array;
 3096|  86.4k|}
vips_object_unref_outputs:
 3233|  17.4k|{
 3234|  17.4k|	(void) vips_argument_map(object,
 3235|  17.4k|		vips_object_unref_outputs_sub, NULL, NULL);
 3236|  17.4k|}
object.c:vips_object_class_init:
 1559|      1|{
 1560|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1561|       |
 1562|       |	/* We must have threads set up before we can process.
 1563|       |	 */
 1564|      1|	vips_check_init();
 1565|       |
 1566|      1|	if (!vips__object_all)
  ------------------
  |  Branch (1566:6): [True: 1, False: 0]
  ------------------
 1567|      1|		vips__object_all = g_hash_table_new(g_direct_hash, g_direct_equal);
 1568|       |
 1569|      1|	gobject_class->dispose = vips_object_dispose;
 1570|      1|	gobject_class->finalize = vips_object_finalize;
 1571|      1|	gobject_class->set_property = vips_object_set_property;
 1572|      1|	gobject_class->get_property = vips_object_get_property;
 1573|       |
 1574|      1|	class->build = vips_object_real_build;
 1575|      1|	class->postbuild = vips_object_real_postbuild;
 1576|      1|	class->summary_class = vips_object_real_summary_class;
 1577|      1|	class->summary = vips_object_real_summary;
 1578|      1|	class->dump = vips_object_real_dump;
 1579|      1|	class->sanity = vips_object_real_sanity;
 1580|      1|	class->rewind = vips_object_real_rewind;
 1581|      1|	class->new_from_string = vips_object_real_new_from_string;
 1582|      1|	class->to_string = vips_object_real_to_string;
 1583|      1|	class->nickname = "object";
 1584|      1|	class->description = _("base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1585|       |
 1586|       |	/* Table of VipsArgumentClass ... we can just g_free() them.
 1587|       |	 */
 1588|      1|	class->argument_table = g_hash_table_new_full(
 1589|      1|		g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_free);
 1590|      1|	class->argument_table_traverse = NULL;
 1591|       |
 1592|       |	/* For setting double arguments from the command-line.
 1593|       |	 */
 1594|      1|	g_value_register_transform_func(G_TYPE_STRING, G_TYPE_DOUBLE,
  ------------------
  |  |  154|      1|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	g_value_register_transform_func(G_TYPE_STRING, G_TYPE_DOUBLE,
  ------------------
  |  |  148|      1|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1595|      1|		transform_string_double);
 1596|       |
 1597|      1|	VIPS_ARG_STRING(class, "nickname", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1598|      1|		_("Nickname"),
 1599|      1|		_("Class nickname"),
 1600|      1|		VIPS_ARGUMENT_SET_ONCE,
 1601|      1|		G_STRUCT_OFFSET(VipsObject, nickname),
 1602|      1|		"");
 1603|       |
 1604|      1|	VIPS_ARG_STRING(class, "description", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1605|      1|		_("Description"),
 1606|      1|		_("Class description"),
 1607|      1|		VIPS_ARGUMENT_SET_ONCE,
 1608|      1|		G_STRUCT_OFFSET(VipsObject, description),
 1609|      1|		"");
 1610|       |
 1611|       |	/**
 1612|       |	 * VipsObject::postbuild:
 1613|       |	 * @object: the object that has been built
 1614|       |	 *
 1615|       |	 * The ::postbuild signal is emitted once just after successful object
 1616|       |	 * construction. Return non-zero to cause object construction to fail.
 1617|       |	 */
 1618|      1|	vips_object_signals[SIG_POSTBUILD] = g_signal_new("postbuild",
 1619|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1620|      1|		G_SIGNAL_RUN_LAST,
 1621|      1|		G_STRUCT_OFFSET(VipsObjectClass, postbuild),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1622|      1|		NULL, NULL,
 1623|      1|		vips_INT__VOID,
 1624|      1|		G_TYPE_INT, 0);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1625|       |
 1626|       |	/**
 1627|       |	 * VipsObject::preclose:
 1628|       |	 * @object: the object that is to close
 1629|       |	 *
 1630|       |	 * The ::preclose signal is emitted once just before object close
 1631|       |	 * starts. The object is still alive.
 1632|       |	 */
 1633|      1|	vips_object_signals[SIG_PRECLOSE] = g_signal_new("preclose",
 1634|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1635|      1|		G_SIGNAL_RUN_LAST,
 1636|      1|		G_STRUCT_OFFSET(VipsObjectClass, preclose),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1637|      1|		NULL, NULL,
 1638|      1|		g_cclosure_marshal_VOID__VOID,
 1639|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1640|       |
 1641|       |	/**
 1642|       |	 * VipsObject::close:
 1643|       |	 * @object: the object that is closing
 1644|       |	 *
 1645|       |	 * The ::close signal is emitted once during object close. The object
 1646|       |	 * is dying and may not work.
 1647|       |	 */
 1648|      1|	vips_object_signals[SIG_CLOSE] = g_signal_new("close",
 1649|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1650|      1|		G_SIGNAL_RUN_LAST,
 1651|      1|		G_STRUCT_OFFSET(VipsObjectClass, close),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1652|      1|		NULL, NULL,
 1653|      1|		g_cclosure_marshal_VOID__VOID,
 1654|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1655|       |
 1656|       |	/**
 1657|       |	 * VipsObject::postclose:
 1658|       |	 * @object: the object that has closed
 1659|       |	 *
 1660|       |	 * The ::postclose signal is emitted once after object close. The
 1661|       |	 * object pointer is still valid, but nothing else.
 1662|       |	 */
 1663|      1|	vips_object_signals[SIG_POSTCLOSE] = g_signal_new("postclose",
 1664|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1665|      1|		G_SIGNAL_RUN_LAST,
 1666|      1|		G_STRUCT_OFFSET(VipsObjectClass, postclose),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1667|      1|		NULL, NULL,
 1668|      1|		g_cclosure_marshal_VOID__VOID,
 1669|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1670|      1|}
object.c:vips_object_dispose:
 1000|   852k|{
 1001|   852k|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|   852k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   852k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   852k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|       |
 1003|       |#ifdef DEBUG
 1004|       |	printf("vips_object_dispose: ");
 1005|       |	vips_object_print_name(object);
 1006|       |	printf("\n");
 1007|       |#endif /*DEBUG*/
 1008|       |
 1009|       |	/* Our subclasses should have already called this. Run it again, just
 1010|       |	 * in case.
 1011|       |	 */
 1012|       |#ifdef DEBUG
 1013|       |	if (!object->preclose)
 1014|       |		printf("vips_object_dispose: pre-close missing!\n");
 1015|       |#endif /*DEBUG*/
 1016|   852k|	vips_object_preclose(object);
 1017|       |
 1018|       |	/* Clear all our arguments: they may be holding resources we should
 1019|       |	 * drop.
 1020|       |	 */
 1021|   852k|	vips_argument_dispose_all(object);
 1022|       |
 1023|   852k|	vips_object_close(object);
 1024|       |
 1025|   852k|	vips_object_postclose(object);
 1026|       |
 1027|   852k|	vips_argument_free_all(object);
 1028|       |
 1029|   852k|	VIPS_FREEF(vips_argument_table_destroy, object->argument_table);
  ------------------
  |  |   41|   852k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   852k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   852k|	{ \
  |  |   43|   852k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 852k, False: 0]
  |  |  ------------------
  |  |   44|   852k|			(void) F((S)); \
  |  |   45|   852k|			(S) = 0; \
  |  |   46|   852k|		} \
  |  |   47|   852k|	} \
  |  |   48|   852k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   852k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1030|       |
 1031|   852k|	G_OBJECT_CLASS(vips_object_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   852k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   852k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   852k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|   852k|}
object.c:vips_argument_dispose_all:
  947|   852k|{
  948|       |#ifdef DEBUG
  949|       |	printf("vips_argument_dispose_all: ");
  950|       |	vips_object_print_name(object);
  951|       |	printf("\n");
  952|       |#endif /*DEBUG*/
  953|       |
  954|   852k|	vips_argument_map(object, vips_object_dispose_argument, NULL, NULL);
  955|   852k|}
object.c:vips_object_dispose_argument:
  916|  6.46M|{
  917|  6.46M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  6.46M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|  6.46M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  6.46M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|       |
  920|  6.46M|	if (G_IS_PARAM_SPEC_OBJECT(pspec) ||
  ------------------
  |  |  491|  12.9M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  6.46M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  6.46M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  6.46M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  6.46M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  6.46M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 6.46M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  6.46M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  6.46M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 6.46M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 293k, False: 6.17M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  6.46M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   293k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   293k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  6.46M|  else \
  |  |  |  |  |  | 2321|  6.46M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  6.46M|  __r; \
  |  |  |  |  |  | 2323|  6.46M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 293k, False: 6.17M]
  |  |  ------------------
  ------------------
  921|  6.46M|		G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|  6.17M|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|  6.17M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  6.17M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  6.17M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  6.17M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  6.17M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 6.17M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  6.17M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  6.17M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 6.17M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 235k, False: 5.93M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  6.17M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   235k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   235k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  6.17M|  else \
  |  |  |  |  |  | 2321|  6.17M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  6.17M|  __r; \
  |  |  |  |  |  | 2323|  6.17M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 235k, False: 5.93M]
  |  |  ------------------
  ------------------
  922|       |#ifdef DEBUG
  923|       |		printf("vips_object_dispose_argument: ");
  924|       |		vips_object_print_name(object);
  925|       |		printf(".%s\n", g_param_spec_get_name(pspec));
  926|       |#endif /*DEBUG*/
  927|       |
  928|   529k|		g_object_set(object,
  929|   529k|			g_param_spec_get_name(pspec), NULL,
  930|   529k|			NULL);
  931|   529k|	}
  932|       |
  933|  6.46M|	return NULL;
  934|  6.46M|}
object.c:vips_object_close:
  286|   852k|{
  287|   852k|	if (!object->close) {
  ------------------
  |  Branch (287:6): [True: 852k, False: 0]
  ------------------
  288|   852k|		object->close = TRUE;
  ------------------
  |  |  798|   852k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   852k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  289|       |
  290|       |#ifdef DEBUG
  291|       |		printf("vips_object_close: ");
  292|       |		vips_object_print_name(object);
  293|       |		printf("\n");
  294|       |#endif /*DEBUG*/
  295|       |
  296|   852k|		g_signal_emit(object, vips_object_signals[SIG_CLOSE], 0);
  297|   852k|	}
  298|   852k|}
object.c:vips_object_postclose:
  302|   852k|{
  303|   852k|	if (!object->postclose) {
  ------------------
  |  Branch (303:6): [True: 852k, False: 0]
  ------------------
  304|   852k|		object->postclose = TRUE;
  ------------------
  |  |  798|   852k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   852k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  305|       |
  306|       |#ifdef DEBUG
  307|       |		printf("vips_object_postclose: ");
  308|       |		vips_object_print_name(object);
  309|       |		printf("\n");
  310|       |#endif /*DEBUG*/
  311|       |
  312|   852k|		g_signal_emit(object, vips_object_signals[SIG_POSTCLOSE], 0);
  313|   852k|	}
  314|   852k|}
object.c:vips_argument_free_all:
  988|   852k|{
  989|       |#ifdef DEBUG
  990|       |	printf("vips_argument_free_all: ");
  991|       |	vips_object_print_name(object);
  992|       |	printf("\n");
  993|       |#endif /*DEBUG*/
  994|       |
  995|   852k|	vips_argument_map(object, vips_object_free_argument, NULL, NULL);
  996|   852k|}
object.c:vips_object_free_argument:
  964|  6.46M|{
  965|  6.46M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  6.46M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|  6.46M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  6.46M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.46M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.46M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|       |
  968|  6.46M|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|  6.46M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  6.46M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  6.46M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  6.46M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  6.46M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  6.46M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 6.46M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  6.46M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  6.46M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 6.46M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 2.25M, False: 4.20M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  6.46M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  2.25M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  2.25M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  6.46M|  else \
  |  |  |  |  |  | 2321|  6.46M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  6.46M|  __r; \
  |  |  |  |  |  | 2323|  6.46M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 2.25M, False: 4.20M]
  |  |  ------------------
  ------------------
  969|       |#ifdef DEBUG
  970|       |		printf("vips_object_free_argument: ");
  971|       |		vips_object_print_name(object);
  972|       |		printf(".%s\n", g_param_spec_get_name(pspec));
  973|       |#endif /*DEBUG*/
  974|       |
  975|  2.25M|		g_object_set(object,
  976|  2.25M|			g_param_spec_get_name(pspec), NULL,
  977|  2.25M|			NULL);
  978|  2.25M|	}
  979|       |
  980|  6.46M|	return NULL;
  981|  6.46M|}
object.c:vips_argument_table_destroy:
  576|   852k|{
  577|   852k|	g_hash_table_destroy(table);
  578|   852k|}
object.c:vips_object_finalize:
 1036|   852k|{
 1037|   852k|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|   852k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   852k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   852k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |
 1039|       |#ifdef DEBUG
 1040|       |	printf("vips_object_finalize: ");
 1041|       |	vips_object_print_name(object);
 1042|       |	printf("\n");
 1043|       |#endif /*DEBUG*/
 1044|       |
 1045|       |	/* I'd like to have post-close in here, but you can't emit signals
 1046|       |	 * from finalize, sadly.
 1047|       |	 */
 1048|       |
 1049|   852k|	g_mutex_lock(&vips__object_all_lock);
 1050|   852k|	g_hash_table_remove(vips__object_all, object);
 1051|   852k|	g_mutex_unlock(&vips__object_all_lock);
 1052|       |
 1053|   852k|	G_OBJECT_CLASS(vips_object_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   852k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   852k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   852k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|   852k|}
object.c:vips_object_real_build:
 1423|   850k|{
 1424|   850k|	VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|   850k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|   850k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   850k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|       |
 1426|       |	/* Only test input args, output ones can be set by our subclasses as
 1427|       |	 * they build. See vips_object_build() above.
 1428|       |	 */
 1429|   850k|	VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT;
 1430|       |
 1431|   850k|	int result;
 1432|       |
 1433|       |#ifdef DEBUG
 1434|       |	printf("vips_object_real_build: ");
 1435|       |	vips_object_print_name(object);
 1436|       |	printf("\n");
 1437|       |#endif /*DEBUG*/
 1438|       |
 1439|   850k|	g_assert(!object->constructed);
  ------------------
  |  |  166|   850k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   850k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   850k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1440|       |
 1441|       |	/* It'd be nice if this just copied a pointer rather than did a
 1442|       |	 * strdup(). Set these here rather than in object_init, so that the
 1443|       |	 * class gets a chance to set them.
 1444|       |	 */
 1445|   850k|	g_object_set(object,
 1446|   850k|		"nickname", object_class->nickname,
 1447|   850k|		"description", object_class->description, NULL);
 1448|       |
 1449|       |	/* Check all required input arguments have been supplied, don't stop
 1450|       |	 * on 1st error.
 1451|       |	 */
 1452|   850k|	result = 0;
 1453|   850k|	(void) vips_argument_map(object,
 1454|   850k|		vips_object_check_required, &result, &iomask);
 1455|       |
 1456|   850k|	return result;
 1457|   850k|}
object.c:vips_object_real_postbuild:
 1461|   835k|{
 1462|       |#ifdef DEBUG
 1463|       |	printf("vips_object_real_postbuild: ");
 1464|       |	vips_object_print_name(object);
 1465|       |	printf("\n");
 1466|       |#endif /*DEBUG*/
 1467|       |
 1468|   835k|	g_assert(object->constructed);
  ------------------
  |  |  166|   835k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   835k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   835k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|       |
 1470|   835k|	return 0;
 1471|   835k|}
object.c:vips_object_init:
 1674|   853k|{
 1675|       |#ifdef DEBUG
 1676|       |	printf("vips_object_init: ");
 1677|       |	vips_object_print_name(object);
 1678|       |	printf("\n");
 1679|       |#endif /*DEBUG*/
 1680|       |
 1681|   853k|	g_mutex_lock(&vips__object_all_lock);
 1682|   853k|	g_hash_table_insert(vips__object_all, object, object);
 1683|   853k|	g_mutex_unlock(&vips__object_all_lock);
 1684|   853k|}
object.c:vips_object_check_required:
  321|  12.6M|{
  322|  12.6M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  12.6M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  12.6M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  12.6M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|       |
  324|  12.6M|	int *result = (int *) a;
  325|  12.6M|	VipsArgumentFlags *iomask = (VipsArgumentFlags *) b;
  326|       |
  327|  12.6M|	VIPS_DEBUG_MSG("vips_object_check_required: %s\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|  12.6M|		g_param_spec_get_name(pspec));
  329|  12.6M|	VIPS_DEBUG_MSG("\trequired: %d\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  12.6M|		argument_class->flags & VIPS_ARGUMENT_REQUIRED);
  331|  12.6M|	VIPS_DEBUG_MSG("\tconstruct: %d\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  12.6M|		argument_class->flags & VIPS_ARGUMENT_CONSTRUCT);
  333|  12.6M|	VIPS_DEBUG_MSG("\tinput: %d\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  12.6M|		argument_class->flags & VIPS_ARGUMENT_INPUT);
  335|  12.6M|	VIPS_DEBUG_MSG("\toutput: %d\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|  12.6M|		argument_class->flags & VIPS_ARGUMENT_OUTPUT);
  337|  12.6M|	VIPS_DEBUG_MSG("\tassigned: %d\n",
  ------------------
  |  |   47|  12.6M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  12.6M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  12.6M|	{ \
  |  |   49|  12.6M|		; \
  |  |   50|  12.6M|	} \
  |  |   51|  12.6M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  12.6M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|  12.6M|		argument_instance->assigned);
  339|       |
  340|  12.6M|	if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (340:6): [True: 697k, False: 11.9M]
  ------------------
  341|  12.6M|		(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (341:3): [True: 697k, False: 0]
  ------------------
  342|  12.6M|		!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (342:3): [True: 697k, False: 0]
  ------------------
  343|  12.6M|		(argument_class->flags & *iomask) &&
  ------------------
  |  Branch (343:3): [True: 559k, False: 137k]
  ------------------
  344|  12.6M|		!argument_instance->assigned) {
  ------------------
  |  Branch (344:3): [True: 0, False: 559k]
  ------------------
  345|      0|		vips_error(class->nickname,
  346|      0|			_("parameter %s not set"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  347|      0|			g_param_spec_get_name(pspec));
  348|      0|		*result = -1;
  349|      0|	}
  350|       |
  351|  12.6M|	return NULL;
  352|  12.6M|}
object.c:vips_object_postbuild:
  254|   835k|{
  255|   835k|	int result;
  256|       |
  257|       |#ifdef DEBUG
  258|       |	printf("vips_object_postbuild: ");
  259|       |	vips_object_print_name(object);
  260|       |	printf("\n");
  261|       |#endif /*DEBUG*/
  262|       |
  263|   835k|	g_signal_emit(object, vips_object_signals[SIG_POSTBUILD], 0, &result);
  264|       |
  265|   835k|	return result;
  266|   835k|}
object.c:vips_argument_init:
  692|  49.4M|{
  693|  49.4M|	if (!object->argument_table) {
  ------------------
  |  Branch (693:6): [True: 853k, False: 48.5M]
  ------------------
  694|       |#ifdef DEBUG
  695|       |		printf("vips_argument_init: ");
  696|       |		vips_object_print_name(object);
  697|       |		printf("\n");
  698|       |#endif /*DEBUG*/
  699|       |
  700|   853k|		object->argument_table = g_hash_table_new_full(g_direct_hash,
  701|   853k|			g_direct_equal, NULL,
  702|   853k|			(GDestroyNotify) vips_argument_instance_free);
  703|       |
  704|       |		/* Make a VipsArgumentInstance for each installed argument
  705|       |		 * property. We can't use vips_argument_map() since that does
  706|       |		 * some sanity checks that won't pass until all arg instance
  707|       |		 * are built.
  708|       |		 */
  709|  6.47M|		VIPS_ARGUMENT_FOR_ALL(object,
  ------------------
  |  |  358|   853k|	{ \
  |  |  359|   853k|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|   853k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|   853k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|   853k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|   853k|		GSList *p; \
  |  |  361|   853k|\
  |  |  362|  7.32M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 6.47M, False: 853k]
  |  |  ------------------
  |  |  363|  6.47M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  6.47M|				(VipsArgumentClass *) p->data; \
  |  |  365|  6.47M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  6.47M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  6.47M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  6.47M|				vips__argument_get_instance(argument_class, \
  |  |  369|  6.47M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  6.47M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  6.47M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  6.47M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  710|  6.47M|			pspec, argument_class, argument_instance)
  711|  6.47M|		{
  712|       |#ifdef DEBUG
  713|       |			printf("vips_argument_init: adding instance argument for %s\n",
  714|       |				g_param_spec_get_name(pspec));
  715|       |#endif /*DEBUG*/
  716|       |
  717|       |			/* argument_instance should be NULL since we've not
  718|       |			 * set it yet.
  719|       |			 */
  720|  6.47M|			g_assert(argument_instance == NULL);
  ------------------
  |  |  166|  6.47M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.47M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.47M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  721|       |
  722|  6.47M|			argument_instance = g_new(VipsArgumentInstance, 1);
  ------------------
  |  |  282|  6.47M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  6.47M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  6.47M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  6.47M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  6.47M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  6.47M|	  gpointer __p;						\
  |  |  |  |  231|  6.47M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6.47M]
  |  |  |  |  ------------------
  |  |  |  |  232|  6.47M|	    __p = g_##func (__n);				\
  |  |  |  |  233|  6.47M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6.47M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  6.47M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6.47M]
  |  |  |  |  |  Branch (234:26): [True: 6.47M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  6.47M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  6.47M|	  else							\
  |  |  |  |  237|  6.47M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  6.47M|	  __p;							\
  |  |  |  |  239|  6.47M|	}))
  |  |  ------------------
  ------------------
  723|       |
  724|  6.47M|			((VipsArgument *) argument_instance)->pspec = pspec;
  725|  6.47M|			argument_instance->argument_class = argument_class;
  726|  6.47M|			argument_instance->object = object;
  727|       |			/* SET_ALWAYS args default to assigned.
  728|       |			 */
  729|  6.47M|			argument_instance->assigned =
  730|  6.47M|				argument_class->flags &
  731|  6.47M|				VIPS_ARGUMENT_SET_ALWAYS;
  732|  6.47M|			argument_instance->close_id = 0;
  733|  6.47M|			argument_instance->invalidate_id = 0;
  734|       |
  735|  6.47M|			vips_argument_table_replace(object->argument_table,
  736|  6.47M|				(VipsArgument *) argument_instance);
  737|  6.47M|		}
  738|  6.47M|		VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  6.47M|	} \
  |  |  373|   853k|	}
  ------------------
  739|   853k|	}
  740|  49.4M|}
object.c:vips_argument_instance_free:
  551|  6.46M|{
  552|  6.46M|	vips_argument_instance_detach(argument_instance);
  553|  6.46M|	g_free(argument_instance);
  554|  6.46M|}
object.c:vips_argument_instance_detach:
  517|  7.18M|{
  518|  7.18M|	VipsObject *object = argument_instance->object;
  519|  7.18M|	VipsArgumentClass *argument_class = argument_instance->argument_class;
  520|       |
  521|  7.18M|	if (argument_instance->close_id) {
  ------------------
  |  Branch (521:6): [True: 137k, False: 7.05M]
  ------------------
  522|       |		/* If close_id is set, the argument must be a gobject of some
  523|       |		 * sort, so we can fetch it.
  524|       |		 */
  525|   137k|		GObject *member = G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   137k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   137k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  526|   137k|			argument_class->offset);
  527|       |
  528|   137k|		if (g_signal_handler_is_connected(member,
  ------------------
  |  Branch (528:7): [True: 137k, False: 0]
  ------------------
  529|   137k|				argument_instance->close_id))
  530|   137k|			g_signal_handler_disconnect(member,
  531|   137k|				argument_instance->close_id);
  532|   137k|		argument_instance->close_id = 0;
  533|   137k|	}
  534|       |
  535|  7.18M|	if (argument_instance->invalidate_id) {
  ------------------
  |  Branch (535:6): [True: 129k, False: 7.05M]
  ------------------
  536|   129k|		GObject *member = G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   129k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   129k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  537|   129k|			argument_class->offset);
  538|       |
  539|   129k|		if (g_signal_handler_is_connected(member,
  ------------------
  |  Branch (539:7): [True: 129k, False: 0]
  ------------------
  540|   129k|				argument_instance->invalidate_id))
  541|   129k|			g_signal_handler_disconnect(member,
  542|   129k|				argument_instance->invalidate_id);
  543|   129k|		argument_instance->invalidate_id = 0;
  544|   129k|	}
  545|  7.18M|}
object.c:vips_object_clear_member:
  871|   722k|{
  872|   722k|	VipsObject *object = argument_instance->object;
  873|   722k|	VipsArgumentClass *argument_class = argument_instance->argument_class;
  874|   722k|	GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   722k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   722k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  875|   722k|		argument_class->offset);
  876|       |
  877|   722k|	vips_argument_instance_detach(argument_instance);
  878|       |
  879|   722k|	if (*member) {
  ------------------
  |  Branch (879:6): [True: 291k, False: 431k]
  ------------------
  880|   291k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (880:7): [True: 153k, False: 137k]
  ------------------
  881|       |#ifdef DEBUG_REF
  882|       |			printf("vips_object_clear_member: vips object: ");
  883|       |			vips_object_print_name(object);
  884|       |			printf("  no longer refers to gobject %s (%p)\n",
  885|       |				G_OBJECT_TYPE_NAME(*member), *member);
  886|       |			printf("  count down to %d\n", G_OBJECT(*member)->ref_count - 1);
  887|       |#endif /*DEBUG_REF*/
  888|       |
  889|       |			/* We reffed the object.
  890|       |			 */
  891|   153k|			g_object_unref(*member);
  892|   153k|		}
  893|   137k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (893:12): [True: 137k, False: 0]
  ------------------
  894|       |#ifdef DEBUG_REF
  895|       |			printf("vips_object_clear_member: gobject %s (%p)\n",
  896|       |				G_OBJECT_TYPE_NAME(*member), *member);
  897|       |			printf("  no longer refers to vips object: ");
  898|       |			vips_object_print_name(object);
  899|       |			printf("  count down to %d\n", G_OBJECT(object)->ref_count - 1);
  900|       |#endif /*DEBUG_REF*/
  901|       |
  902|   137k|			g_object_unref(object);
  903|   137k|		}
  904|       |
  905|   291k|		*member = NULL;
  906|   291k|	}
  907|   722k|}
object.c:vips_object_arg_close:
 1070|   137k|{
 1071|   137k|	VipsObject *object = argument_instance->object;
 1072|   137k|	GParamSpec *pspec = ((VipsArgument *) argument_instance)->pspec;
 1073|       |
 1074|       |	/* Argument had reffed us ... now it's being closed, so we NULL out
 1075|       |	 * the pointer to unref.
 1076|       |	 */
 1077|   137k|	g_object_set(object,
 1078|   137k|		g_param_spec_get_name(pspec), NULL,
 1079|   137k|		NULL);
 1080|   137k|}
object.c:vips_argument_table_replace:
  570|  6.47M|{
  571|  6.47M|	g_hash_table_replace(table, argument->pspec, argument);
  572|  6.47M|}
object.c:traverse_find_required_priority:
 1688|  2.58k|{
 1689|  2.58k|	VipsArgumentClass *argument_class = (VipsArgumentClass *) data;
 1690|  2.58k|	int priority = GPOINTER_TO_INT(a);
 1691|       |
 1692|  2.58k|	if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1692:6): [True: 805, False: 1.78k]
  ------------------
 1693|  2.58k|		!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1693:3): [True: 805, False: 0]
  ------------------
 1694|  2.58k|		argument_class->priority == priority)
  ------------------
  |  Branch (1694:3): [True: 0, False: 805]
  ------------------
 1695|      0|		return argument_class;
 1696|       |
 1697|  2.58k|	return NULL;
 1698|  2.58k|}
object.c:traverse_sort:
 1703|  13.9k|{
 1704|  13.9k|	return class1->priority - class2->priority;
 1705|  13.9k|}
object.c:vips_object_set_args:
 2459|  41.5k|{
 2460|  41.5k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  41.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  41.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  41.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2461|       |
 2462|  41.5k|	VipsToken token;
 2463|  41.5k|	char string[VIPS_PATH_MAX];
 2464|  41.5k|	char string2[VIPS_PATH_MAX];
 2465|  41.5k|	GParamSpec *pspec;
 2466|  41.5k|	VipsArgumentClass *argument_class;
 2467|  41.5k|	VipsArgumentInstance *argument_instance;
 2468|       |
 2469|  41.5k|	if (!(p = vips__token_need(p, VIPS_TOKEN_LEFT,
  ------------------
  |  Branch (2469:6): [True: 0, False: 41.5k]
  ------------------
 2470|  41.5k|			  string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
 2471|      0|		return -1;
 2472|       |
 2473|  41.5k|	if (!(p = vips__token_segment(p, &token, string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2473:6): [True: 0, False: 41.5k]
  ------------------
 2474|      0|		return -1;
 2475|       |
 2476|  41.5k|	for (;;) {
 2477|  41.5k|		if (token == VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (2477:7): [True: 41.5k, False: 0]
  ------------------
 2478|  41.5k|			break;
 2479|      0|		if (token != VIPS_TOKEN_STRING) {
  ------------------
  |  Branch (2479:7): [True: 0, False: 0]
  ------------------
 2480|      0|			vips_error(class->nickname,
 2481|      0|				_("expected string or ), saw %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2482|      0|				vips_enum_nick(VIPS_TYPE_TOKEN, token));
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 2483|      0|			return -1;
 2484|      0|		}
 2485|       |
 2486|       |		/* We have to look for a '=', ']' or a ',' to see if string is
 2487|       |		 * a param name or a value.
 2488|       |		 */
 2489|      0|		if (!(p = vips__token_segment(p, &token,
  ------------------
  |  Branch (2489:7): [True: 0, False: 0]
  ------------------
 2490|      0|				  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2491|      0|			return -1;
 2492|      0|		if (token == VIPS_TOKEN_EQUALS) {
  ------------------
  |  Branch (2492:7): [True: 0, False: 0]
  ------------------
 2493|      0|			if (!(p = vips__token_segment_need(p, VIPS_TOKEN_STRING,
  ------------------
  |  Branch (2493:8): [True: 0, False: 0]
  ------------------
 2494|      0|					  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2495|      0|				return -1;
 2496|      0|			if (vips_object_set_argument_from_string(object,
  ------------------
  |  Branch (2496:8): [True: 0, False: 0]
  ------------------
 2497|      0|					string, string2))
 2498|      0|				return -1;
 2499|       |
 2500|      0|			if (!(p = vips__token_must(p, &token,
  ------------------
  |  Branch (2500:8): [True: 0, False: 0]
  ------------------
 2501|      0|					  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2502|      0|				return -1;
 2503|      0|		}
 2504|      0|		else if (g_object_class_find_property(
  ------------------
  |  Branch (2504:12): [True: 0, False: 0]
  ------------------
 2505|      0|					 G_OBJECT_GET_CLASS(object), string) &&
  ------------------
  |  |   86|      0|#define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2506|      0|			!vips_object_get_argument(object, string,
  ------------------
  |  Branch (2506:4): [True: 0, False: 0]
  ------------------
 2507|      0|				&pspec, &argument_class, &argument_instance) &&
 2508|      0|			(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (2508:4): [True: 0, False: 0]
  ------------------
 2509|      0|			(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (2509:4): [True: 0, False: 0]
  ------------------
 2510|      0|			G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|      0|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|      0|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|      0|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|      0|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|      0|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|      0|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|      0|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|      0|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|      0|  else \
  |  |  |  |  |  | 2321|      0|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|      0|  __r; \
  |  |  |  |  |  | 2323|      0|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2511|       |			/* The string is the name of an optional
 2512|       |			 * input boolean ... set it!
 2513|       |			 */
 2514|      0|			if (!argument_instance->assigned)
  ------------------
  |  Branch (2514:8): [True: 0, False: 0]
  ------------------
 2515|      0|				g_object_set(object, string, TRUE, NULL);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2516|      0|		}
 2517|      0|		else if ((pspec = vips_object_find_required(object))) {
  ------------------
  |  Branch (2517:12): [True: 0, False: 0]
  ------------------
 2518|      0|			if (vips_object_set_argument_from_string(object,
  ------------------
  |  Branch (2518:8): [True: 0, False: 0]
  ------------------
 2519|      0|					g_param_spec_get_name(pspec), string))
 2520|      0|				return -1;
 2521|      0|		}
 2522|      0|		else {
 2523|      0|			vips_error(class->nickname,
 2524|      0|				_("unable to set '%s'"), string);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2525|      0|			return -1;
 2526|      0|		}
 2527|       |
 2528|       |		/* Now must be a , or a ).
 2529|       |		 */
 2530|      0|		if (token == VIPS_TOKEN_COMMA) {
  ------------------
  |  Branch (2530:7): [True: 0, False: 0]
  ------------------
 2531|      0|			if (!(p = vips__token_must(p, &token,
  ------------------
  |  Branch (2531:8): [True: 0, False: 0]
  ------------------
 2532|      0|					  string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2533|      0|				return -1;
 2534|      0|		}
 2535|      0|		else if (token != VIPS_TOKEN_RIGHT) {
  ------------------
  |  Branch (2535:12): [True: 0, False: 0]
  ------------------
 2536|      0|			vips_error(class->nickname,
 2537|      0|				"%s", _("not , or ) after parameter"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2538|      0|			return -1;
 2539|      0|		}
 2540|      0|	}
 2541|       |
 2542|  41.5k|	if ((p = vips__token_get(p, &token, string, VIPS_PATH_MAX))) {
  ------------------
  |  |  245|  41.5k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2542:6): [True: 0, False: 41.5k]
  ------------------
 2543|      0|		vips_error(class->nickname,
 2544|      0|			"%s", _("extra tokens after ')'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2545|      0|		return -1;
 2546|      0|	}
 2547|       |
 2548|  41.5k|	return 0;
 2549|  41.5k|}
object.c:test_name:
 2860|  6.21M|{
 2861|  6.21M|	if (g_ascii_strcasecmp(class->nickname, nickname) == 0)
  ------------------
  |  Branch (2861:6): [True: 2.78k, False: 6.21M]
  ------------------
 2862|  2.78k|		return class;
 2863|       |
 2864|       |	/* Check the class name too, why not.
 2865|       |	 */
 2866|  6.21M|	if (g_ascii_strcasecmp(G_OBJECT_CLASS_NAME(class), nickname) == 0)
  ------------------
  |  |  124|  6.21M|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  6.21M|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  6.21M|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2866:6): [True: 41.5k, False: 6.17M]
  ------------------
 2867|  41.5k|		return class;
 2868|       |
 2869|  6.17M|	return NULL;
 2870|  6.21M|}
object.c:vips_class_build_hash_cb:
 2936|      1|{
 2937|      1|	GType base;
 2938|       |
 2939|      1|	vips__object_nickname_table = g_hash_table_new(g_str_hash, g_str_equal);
 2940|       |
 2941|      1|	base = g_type_from_name("VipsObject");
 2942|      1|	g_assert(base);
  ------------------
  |  |  166|      1|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2943|       |
 2944|      1|	vips_class_map_all(base,
 2945|      1|		(VipsClassMapFn) vips_class_add_hash,
 2946|      1|		(void *) vips__object_nickname_table);
 2947|       |
 2948|      1|	return NULL;
 2949|      1|}
object.c:vips_class_add_hash:
 2911|    306|{
 2912|    306|	GType type = G_OBJECT_CLASS_TYPE(class);
  ------------------
  |  |  114|    306|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  ------------------
  |  |  |  |  613|    306|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  ------------------
  ------------------
 2913|    306|	NicknameGType *hit;
 2914|       |
 2915|    306|	hit = (NicknameGType *)
 2916|    306|		g_hash_table_lookup(table, (void *) class->nickname);
 2917|       |
 2918|       |	/* If this is not a unique name, mark as a duplicate. In this case
 2919|       |	 * we'll need to fall back to a search.
 2920|       |	 */
 2921|    306|	if (hit)
  ------------------
  |  Branch (2921:6): [True: 1, False: 305]
  ------------------
 2922|      1|		hit->duplicate = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2923|    305|	else {
 2924|    305|		hit = g_new(NicknameGType, 1);
  ------------------
  |  |  282|    305|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|    305|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|    305|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|    305|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|    305|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|    305|	  gpointer __p;						\
  |  |  |  |  231|    305|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 305]
  |  |  |  |  ------------------
  |  |  |  |  232|    305|	    __p = g_##func (__n);				\
  |  |  |  |  233|    305|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 305, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|    305|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 305]
  |  |  |  |  |  Branch (234:26): [True: 305, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|    305|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|    305|	  else							\
  |  |  |  |  237|    305|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|    305|	  __p;							\
  |  |  |  |  239|    305|	}))
  |  |  ------------------
  ------------------
 2925|    305|		hit->nickname = class->nickname;
 2926|    305|		hit->type = type;
 2927|    305|		hit->duplicate = FALSE;
  ------------------
  |  |  794|    305|#define	FALSE	(0)
  ------------------
 2928|    305|		g_hash_table_insert(table, (void *) hit->nickname, hit);
 2929|    305|	}
 2930|       |
 2931|    306|	return NULL;
 2932|    306|}
object.c:vips_object_local_array_cb:
 3041|  86.3k|{
 3042|  86.3k|	int i;
 3043|       |
 3044|   240k|	for (i = 0; i < local->n; i++)
  ------------------
  |  Branch (3044:14): [True: 154k, False: 86.3k]
  ------------------
 3045|   154k|		VIPS_FREEF(g_object_unref, local->array[i]);
  ------------------
  |  |   41|   154k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   154k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   154k|	{ \
  |  |   43|   154k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 106k, False: 47.5k]
  |  |  ------------------
  |  |   44|   106k|			(void) F((S)); \
  |  |   45|   106k|			(S) = 0; \
  |  |   46|   106k|		} \
  |  |   47|   154k|	} \
  |  |   48|   154k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   154k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3046|       |
 3047|  86.3k|	VIPS_FREEF(g_free, local->array);
  ------------------
  |  |   41|  86.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  86.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  86.3k|	{ \
  |  |   43|  86.3k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 86.3k, False: 0]
  |  |  ------------------
  |  |   44|  86.3k|			(void) F((S)); \
  |  |   45|  86.3k|			(S) = 0; \
  |  |   46|  86.3k|		} \
  |  |   47|  86.3k|	} \
  |  |   48|  86.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  86.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3048|  86.3k|	VIPS_FREEF(g_free, local);
  ------------------
  |  |   41|  86.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  86.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  86.3k|	{ \
  |  |   43|  86.3k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 86.3k, False: 0]
  |  |  ------------------
  |  |   44|  86.3k|			(void) F((S)); \
  |  |   45|  86.3k|			(S) = 0; \
  |  |   46|  86.3k|		} \
  |  |   47|  86.3k|	} \
  |  |   48|  86.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  86.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3049|  86.3k|}
object.c:vips_object_unref_outputs_sub:
 3199|   208k|{
 3200|   208k|	if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (3200:6): [True: 18.3k, False: 190k]
  ------------------
 3201|   208k|		G_IS_PARAM_SPEC_OBJECT(pspec) &&
  ------------------
  |  |  491|   226k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  18.3k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  18.3k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  18.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  18.3k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  18.3k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 18.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  18.3k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  18.3k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 18.3k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 9.17k, False: 9.17k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  18.3k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  9.17k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  9.17k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  18.3k|  else \
  |  |  |  |  |  | 2321|  18.3k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  18.3k|  __r; \
  |  |  |  |  |  | 2323|  18.3k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 9.17k, False: 9.17k]
  |  |  ------------------
  ------------------
 3202|   208k|		argument_instance->assigned) {
  ------------------
  |  Branch (3202:3): [True: 6.73k, False: 2.43k]
  ------------------
 3203|  6.73k|		GObject *value;
 3204|       |
 3205|  6.73k|		g_object_get(object,
 3206|  6.73k|			g_param_spec_get_name(pspec), &value, NULL);
 3207|       |
 3208|       |		/* Doing the get refs the object, so unref the get, then unref
 3209|       |		 * again since this an an output object of the operation.
 3210|       |		 */
 3211|  6.73k|		g_object_unref(value);
 3212|  6.73k|		g_object_unref(value);
 3213|  6.73k|	}
 3214|       |
 3215|   208k|	return NULL;
 3216|   208k|}

vips_operation_get_flags:
  693|   293k|{
  694|   293k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation);
  ------------------
  |  |   67|   293k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   293k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   293k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   293k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  695|       |
  696|   293k|	return class->get_flags(operation);
  697|   293k|}
vips_operation_invalidate:
  717|  18.6k|{
  718|       |#ifdef VIPS_DEBUG
  719|       |	printf("vips_operation_invalidate: %p\n", operation);
  720|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  721|       |#endif /*VIPS_DEBUG*/
  722|       |
  723|  18.6k|	g_signal_emit(operation, vips_operation_signals[SIG_INVALIDATE], 0);
  724|  18.6k|}
vips_operation_new:
  740|   155k|{
  741|   155k|	GType type;
  742|   155k|	VipsObject *object;
  743|   155k|	VipsOperation *operation;
  744|       |
  745|   155k|	vips_check_init();
  746|       |
  747|   155k|	if (!(type = vips_type_find("VipsOperation", name))) {
  ------------------
  |  Branch (747:6): [True: 0, False: 155k]
  ------------------
  748|      0|		vips_error("VipsOperation",
  749|      0|			_("class \"%s\" not found"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  750|      0|		return NULL;
  751|      0|	}
  752|       |
  753|   155k|	if (!(object = g_object_new(type, NULL))) {
  ------------------
  |  Branch (753:6): [True: 0, False: 155k]
  ------------------
  754|      0|		vips_error("VipsOperation",
  755|      0|			_("\"%s\" is not an instantiable class"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  756|      0|		return NULL;
  757|      0|	}
  758|       |
  759|   155k|	operation = VIPS_OPERATION(object);
  ------------------
  |  |   57|   155k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   155k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   155k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   155k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  760|       |
  761|   155k|	VIPS_DEBUG_MSG("vips_operation_new: %s (%p)\n", name, operation);
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|       |
  763|   155k|	return operation;
  764|   155k|}
vips_call_required_optional:
  956|   155k|{
  957|   155k|	int result;
  958|   155k|	va_list a;
  959|   155k|	va_list b;
  960|       |
  961|       |	/* We need to be able to walk required and optional twice. On x64 gcc,
  962|       |	 * vips_operation_set_valist_required() etc. will destructively alter
  963|       |	 * the passed-in va_list. We make a copy and walk that instead.
  964|       |	 */
  965|   155k|	va_copy(a, required);
  966|   155k|	va_copy(b, optional);
  967|   155k|	result = vips_operation_set_valist_required(*operation, a) ||
  ------------------
  |  Branch (967:11): [True: 0, False: 155k]
  ------------------
  968|   155k|		vips_object_set_valist(VIPS_OBJECT(*operation), b);
  ------------------
  |  |  433|   155k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   155k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   155k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (968:3): [True: 0, False: 155k]
  ------------------
  969|   155k|	va_end(a);
  970|   155k|	va_end(b);
  971|       |
  972|   155k|	if (result)
  ------------------
  |  Branch (972:6): [True: 0, False: 155k]
  ------------------
  973|      0|		return -1;
  974|       |
  975|       |	/* Build from cache.
  976|       |	 */
  977|   155k|	if (vips_cache_operation_buildp(operation))
  ------------------
  |  Branch (977:6): [True: 17.4k, False: 138k]
  ------------------
  978|  17.4k|		return -1;
  979|       |
  980|       |	/* Walk args again, writing output.
  981|       |	 */
  982|   138k|	va_copy(a, required);
  983|   138k|	va_copy(b, optional);
  984|   138k|	result = vips_operation_get_valist_required(*operation, required) ||
  ------------------
  |  Branch (984:11): [True: 0, False: 138k]
  ------------------
  985|   138k|		vips_operation_get_valist_optional(*operation, optional);
  ------------------
  |  Branch (985:3): [True: 0, False: 138k]
  ------------------
  986|   138k|	va_end(a);
  987|   138k|	va_end(b);
  988|       |
  989|   138k|	return result;
  990|   155k|}
vips_call_split:
 1118|   114k|{
 1119|   114k|	int result;
 1120|   114k|	va_list required;
 1121|       |
 1122|   114k|	va_start(required, optional);
 1123|   114k|	result = vips_call_by_name(operation_name, NULL,
 1124|   114k|		required, optional);
 1125|   114k|	va_end(required);
 1126|       |
 1127|   114k|	return result;
 1128|   114k|}
vips_call_split_option_string:
 1133|  41.5k|{
 1134|  41.5k|	int result;
 1135|  41.5k|	va_list required;
 1136|       |
 1137|  41.5k|	va_start(required, optional);
 1138|  41.5k|	result = vips_call_by_name(operation_name, option_string,
 1139|  41.5k|		required, optional);
 1140|  41.5k|	va_end(required);
 1141|       |
 1142|  41.5k|	return result;
 1143|  41.5k|}
operation.c:vips_operation_class_init:
  653|      1|{
  654|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  656|       |
  657|      1|	gobject_class->finalize = vips_operation_finalize;
  658|      1|	gobject_class->dispose = vips_operation_dispose;
  659|       |
  660|      1|	vobject_class->build = vips_operation_build;
  661|      1|	vobject_class->summary = vips_operation_summary;
  662|      1|	vobject_class->dump = vips_operation_dump;
  663|      1|	vobject_class->nickname = "operation";
  664|      1|	vobject_class->description = _("operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  665|       |
  666|      1|	class->usage = vips_operation_usage;
  667|      1|	class->get_flags = vips_operation_real_get_flags;
  668|       |
  669|      1|	vips_operation_signals[SIG_INVALIDATE] = g_signal_new("invalidate",
  670|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  671|      1|		G_SIGNAL_RUN_LAST,
  672|      1|		G_STRUCT_OFFSET(VipsOperationClass, invalidate),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  673|      1|		NULL, NULL,
  674|      1|		g_cclosure_marshal_VOID__VOID,
  675|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  676|      1|}
operation.c:vips_operation_finalize:
  229|   155k|{
  230|   155k|	VipsOperation *operation = VIPS_OPERATION(gobject);
  ------------------
  |  |   57|   155k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   155k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   155k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   155k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  231|       |
  232|   155k|	VIPS_DEBUG_MSG("vips_operation_finalize: %p\n", gobject);
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|   155k|	if (operation->pixels)
  ------------------
  |  Branch (234:6): [True: 0, False: 155k]
  ------------------
  235|      0|		g_info(_("%d pixels calculated"), operation->pixels);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  236|       |
  237|   155k|	G_OBJECT_CLASS(vips_operation_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   155k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   155k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   155k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|   155k|}
operation.c:vips_operation_dispose:
  242|   155k|{
  243|   155k|	VIPS_DEBUG_MSG("vips_operation_dispose: %p\n", gobject);
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|       |
  245|   155k|	G_OBJECT_CLASS(vips_operation_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   155k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   155k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   155k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|   155k|}
operation.c:vips_operation_build:
  607|   153k|{
  608|   153k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(object);
  ------------------
  |  |   67|   153k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   153k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   153k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   153k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  609|       |
  610|       |#ifdef VIPS_DEBUG
  611|       |	printf("vips_operation_build: ");
  612|       |	vips_object_print_name(object);
  613|       |	printf("\n");
  614|       |#endif /*VIPS_DEBUG*/
  615|       |
  616|   153k|	if (class->flags & VIPS_OPERATION_BLOCKED) {
  ------------------
  |  Branch (616:6): [True: 0, False: 153k]
  ------------------
  617|      0|		vips_error(VIPS_OBJECT_CLASS(class)->nickname,
  ------------------
  |  |  435|      0|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      0|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      0|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  618|      0|			"%s", _("operation is blocked"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  619|      0|		return -1;
  620|      0|	}
  621|       |
  622|   153k|	if (VIPS_OBJECT_CLASS(vips_operation_parent_class)->build(object))
  ------------------
  |  |  435|   153k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   153k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   153k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (622:6): [True: 0, False: 153k]
  ------------------
  623|      0|		return -1;
  624|       |
  625|   153k|	return 0;
  626|   153k|}
operation.c:vips_operation_real_get_flags:
  645|   293k|{
  646|   293k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation);
  ------------------
  |  |   67|   293k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   293k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   293k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   293k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  647|       |
  648|   293k|	return class->flags;
  649|   293k|}
operation.c:vips_operation_init:
  680|   155k|{
  681|   155k|}
operation.c:vips_operation_set_valist_required:
  777|   155k|{
  778|   155k|	VIPS_DEBUG_MSG("vips_operation_set_valist_required:\n");
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|       |
  780|       |	/* Set required input arguments. Can't use vips_argument_map here
  781|       |	 * :-( because passing va_list by reference is not portable.
  782|       |	 */
  783|  1.71M|	VIPS_ARGUMENT_FOR_ALL(operation,
  ------------------
  |  |  358|   155k|	{ \
  |  |  359|   155k|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|   155k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|   155k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|   155k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|   155k|		GSList *p; \
  |  |  361|   155k|\
  |  |  362|  1.87M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 1.71M, False: 155k]
  |  |  ------------------
  |  |  363|  1.71M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  1.71M|				(VipsArgumentClass *) p->data; \
  |  |  365|  1.71M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  1.71M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  1.71M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  1.71M|				vips__argument_get_instance(argument_class, \
  |  |  369|  1.71M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  1.71M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  1.71M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  1.71M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|  1.71M|		pspec, argument_class, argument_instance)
  785|  1.71M|	{
  786|       |
  787|  1.71M|		g_assert(argument_instance);
  ------------------
  |  |  166|  1.71M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.71M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.71M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  788|       |
  789|       |		/* We skip deprecated required args. There will be a new,
  790|       |		 * renamed arg in the same place.
  791|       |		 */
  792|  1.71M|		if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (792:7): [True: 359k, False: 1.35M]
  ------------------
  793|  1.71M|			!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) {
  ------------------
  |  Branch (793:4): [True: 359k, False: 0]
  ------------------
  794|   439k|			VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|   359k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 219k, False: 139k]
  |  |  ------------------
  |  |  400|   219k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|   219k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|   219k|		gchar *error = NULL; \
  |  |  402|   219k|\
  |  |  403|   219k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|   219k|		 * and must be collected. \
  |  |  405|   219k|		 */ \
  |  |  406|   219k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|   219k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   219k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|   219k|G_STMT_START {										\
  |  |  |  |   90|   219k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|   219k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|   219k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|   219k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|   219k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|   219k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|   219k|                                                                                        \
  |  |  |  |   97|   219k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   439k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 219k, False: 219k]
  |  |  |  |  ------------------
  |  |  |  |   99|   219k|    {											\
  |  |  |  |  100|   219k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|   219k|                                                                                        \
  |  |  |  |  102|   219k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|   219k|	{										\
  |  |  |  |  104|  45.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 45.2k, False: 174k]
  |  |  |  |  ------------------
  |  |  |  |  105|  45.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  45.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 219k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 219k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 219k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|   174k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 174k, False: 45.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|   174k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|   174k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 219k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|   219k|	}										\
  |  |  |  |  122|   219k|    }											\
  |  |  |  |  123|   219k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|   219k|				       g_vci_n_values,					\
  |  |  |  |  125|   219k|				       g_vci_cvalues,					\
  |  |  |  |  126|   219k|				       g_vci_flags);						\
  |  |  |  |  127|   219k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   219k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|   219k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|   219k|\
  |  |  409|   219k|		/* Don't bother with the error message. \
  |  |  410|   219k|		 */ \
  |  |  411|   219k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 219k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  795|       |
  796|       |#ifdef VIPS_DEBUG
  797|       |			{
  798|       |				char *str;
  799|       |
  800|       |				str = g_strdup_value_contents(&value);
  801|       |				VIPS_DEBUG_MSG("\t%s = %s\n",
  802|       |					g_param_spec_get_name(pspec), str);
  803|       |				g_free(str);
  804|       |			}
  805|       |#endif /*VIPS_DEBUG */
  806|       |
  807|   439k|			g_object_set_property(G_OBJECT(operation),
  ------------------
  |  |   51|   219k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   219k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   219k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|   439k|				g_param_spec_get_name(pspec), &value);
  809|       |
  810|   439k|			VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|   219k|	g_value_unset(&value); \
  |  |  418|   219k|	} \
  |  |  419|   359k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 139k, False: 0]
  |  |  ------------------
  |  |  420|   139k|	{ \
  |  |  421|   139k|		void **arg G_GNUC_UNUSED; \
  |  |  422|   139k|\
  |  |  423|   139k|		/* Output args are a pointer to where to send the \
  |  |  424|   139k|		 * result. \
  |  |  425|   139k|		 */ \
  |  |  426|   139k|		arg = va_arg(AP, void **);
  ------------------
  811|       |
  812|       |#ifdef VIPS_DEBUG
  813|       |			printf("\tskipping arg %p for %s\n",
  814|       |				arg, g_param_spec_get_name(pspec));
  815|       |#endif /*VIPS_DEBUG */
  816|       |
  817|   279k|			VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|   139k|	}
  ------------------
  818|   359k|		}
  819|  1.71M|	}
  820|  1.71M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  1.71M|	} \
  |  |  373|   155k|	}
  ------------------
  821|       |
  822|   155k|	return 0;
  823|   155k|}
operation.c:vips_operation_get_valist_required:
  827|   138k|{
  828|   138k|	VIPS_DEBUG_MSG("vips_operation_get_valist_required:\n");
  ------------------
  |  |   47|   138k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   138k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   138k|	{ \
  |  |   49|   138k|		; \
  |  |   50|   138k|	} \
  |  |   51|   138k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   138k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  829|       |
  830|       |	/* Extract output arguments. Can't use vips_argument_map here
  831|       |	 * :-( because passing va_list by reference is not portable.
  832|       |	 */
  833|  1.50M|	VIPS_ARGUMENT_FOR_ALL(operation,
  ------------------
  |  |  358|   138k|	{ \
  |  |  359|   138k|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|   138k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|   138k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|   138k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|   138k|		GSList *p; \
  |  |  361|   138k|\
  |  |  362|  1.64M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 1.50M, False: 138k]
  |  |  ------------------
  |  |  363|  1.50M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  1.50M|				(VipsArgumentClass *) p->data; \
  |  |  365|  1.50M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  1.50M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  1.50M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  1.50M|				vips__argument_get_instance(argument_class, \
  |  |  369|  1.50M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  1.50M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  1.50M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  1.50M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  834|  1.50M|		pspec, argument_class, argument_instance)
  835|  1.50M|	{
  836|  1.50M|		if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED)) {
  ------------------
  |  Branch (836:7): [True: 324k, False: 1.18M]
  ------------------
  837|   388k|			VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|   324k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 194k, False: 130k]
  |  |  ------------------
  |  |  400|   194k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|   194k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|   194k|		gchar *error = NULL; \
  |  |  402|   194k|\
  |  |  403|   194k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|   194k|		 * and must be collected. \
  |  |  405|   194k|		 */ \
  |  |  406|   194k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|   194k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   194k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|   194k|G_STMT_START {										\
  |  |  |  |   90|   194k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|   194k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|   194k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|   194k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|   194k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|   194k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|   194k|                                                                                        \
  |  |  |  |   97|   194k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   388k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 194k, False: 194k]
  |  |  |  |  ------------------
  |  |  |  |   99|   194k|    {											\
  |  |  |  |  100|   194k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|   194k|                                                                                        \
  |  |  |  |  102|   194k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|   194k|	{										\
  |  |  |  |  104|  45.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 45.2k, False: 148k]
  |  |  |  |  ------------------
  |  |  |  |  105|  45.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  45.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 194k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 194k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 194k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|   148k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 148k, False: 45.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|   148k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|   148k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 194k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|   194k|	}										\
  |  |  |  |  122|   194k|    }											\
  |  |  |  |  123|   194k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|   194k|				       g_vci_n_values,					\
  |  |  |  |  125|   194k|				       g_vci_cvalues,					\
  |  |  |  |  126|   194k|				       g_vci_flags);						\
  |  |  |  |  127|   194k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   194k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|   194k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|   194k|\
  |  |  409|   194k|		/* Don't bother with the error message. \
  |  |  410|   194k|		 */ \
  |  |  411|   194k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 194k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  838|       |
  839|   388k|			VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|   194k|	g_value_unset(&value); \
  |  |  418|   194k|	} \
  |  |  419|   324k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 130k, False: 0]
  |  |  ------------------
  |  |  420|   130k|	{ \
  |  |  421|   130k|		void **arg G_GNUC_UNUSED; \
  |  |  422|   130k|\
  |  |  423|   130k|		/* Output args are a pointer to where to send the \
  |  |  424|   130k|		 * result. \
  |  |  425|   130k|		 */ \
  |  |  426|   130k|		arg = va_arg(AP, void **);
  ------------------
  840|       |
  841|   261k|			if (!argument_instance->assigned)
  ------------------
  |  Branch (841:8): [True: 0, False: 130k]
  ------------------
  842|      0|				continue;
  843|       |
  844|       |#ifdef VIPS_DEBUG
  845|       |			printf("\twriting %s to %p\n",
  846|       |				g_param_spec_get_name(pspec), arg);
  847|       |#endif /*VIPS_DEBUG */
  848|       |
  849|       |			/* It'd be nice to be able to test for arg being a
  850|       |			 * valid gobject pointer, since passing in a valid
  851|       |			 * pointer (and having us destroy it) is a common
  852|       |			 * error and a cause of hard-to-find leaks.
  853|       |			 *
  854|       |			 * Unfortunately, G_IS_OBJECT() can't be given an
  855|       |			 * arbitrary pointer for testing -- you're very likely
  856|       |			 * to get coredumps.
  857|       |			 */
  858|       |
  859|   130k|			g_object_get(G_OBJECT(operation),
  ------------------
  |  |   51|   130k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   130k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   130k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  860|   130k|				g_param_spec_get_name(pspec), arg, NULL);
  861|       |
  862|       |			/* If the pspec is an object, that will up the ref
  863|       |			 * count. We want to hand over the ref, so we have to
  864|       |			 * knock it down again.
  865|       |			 */
  866|   130k|			if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|   130k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   130k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   130k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   130k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   130k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   130k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 130k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   130k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   130k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 130k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 130k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   130k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   130k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   130k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   130k|  else \
  |  |  |  |  |  | 2321|   130k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   130k|  __r; \
  |  |  |  |  |  | 2323|   130k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 130k, False: 0]
  |  |  ------------------
  ------------------
  867|   130k|				GObject *object;
  868|       |
  869|   130k|				object = *((GObject **) arg);
  870|   130k|				g_object_unref(object);
  871|   130k|			}
  872|       |
  873|   130k|			VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|   130k|	}
  ------------------
  874|   324k|		}
  875|  1.50M|	}
  876|  1.50M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  1.50M|	} \
  |  |  373|   138k|	}
  ------------------
  877|       |
  878|   138k|	return 0;
  879|   138k|}
operation.c:vips_operation_get_valist_optional:
  883|   138k|{
  884|   138k|	char *name;
  885|       |
  886|   138k|	VIPS_DEBUG_MSG("vips_operation_get_valist_optional:\n");
  ------------------
  |  |   47|   138k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   138k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   138k|	{ \
  |  |   49|   138k|		; \
  |  |   50|   138k|	} \
  |  |   51|   138k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   138k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|       |
  888|   174k|	for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) {
  ------------------
  |  Branch (888:34): [True: 36.3k, False: 138k]
  ------------------
  889|  36.3k|		GParamSpec *pspec;
  890|  36.3k|		VipsArgumentClass *argument_class;
  891|  36.3k|		VipsArgumentInstance *argument_instance;
  892|       |
  893|  36.3k|		VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name);
  ------------------
  |  |   47|  36.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  36.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  36.3k|	{ \
  |  |   49|  36.3k|		; \
  |  |   50|  36.3k|	} \
  |  |   51|  36.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  36.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  894|       |
  895|  36.3k|		if (vips_object_get_argument(VIPS_OBJECT(operation), name,
  ------------------
  |  |  433|  36.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  36.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  36.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (895:7): [True: 0, False: 36.3k]
  ------------------
  896|  36.3k|				&pspec, &argument_class, &argument_instance))
  897|      0|			return -1;
  898|       |
  899|  72.6k|		VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|  36.3k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 36.3k, False: 0]
  |  |  ------------------
  |  |  400|  36.3k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|  36.3k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|  36.3k|		gchar *error = NULL; \
  |  |  402|  36.3k|\
  |  |  403|  36.3k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|  36.3k|		 * and must be collected. \
  |  |  405|  36.3k|		 */ \
  |  |  406|  36.3k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|  36.3k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  36.3k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|  36.3k|G_STMT_START {										\
  |  |  |  |   90|  36.3k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|  36.3k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|  36.3k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|  36.3k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|  36.3k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|  36.3k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|  36.3k|                                                                                        \
  |  |  |  |   97|  36.3k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|  72.6k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 36.3k, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |   99|  36.3k|    {											\
  |  |  |  |  100|  36.3k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|  36.3k|                                                                                        \
  |  |  |  |  102|  36.3k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|  36.3k|	{										\
  |  |  |  |  104|  35.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 35.2k, False: 1.08k]
  |  |  |  |  ------------------
  |  |  |  |  105|  35.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  35.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|  1.08k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 1.08k, False: 35.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|  1.08k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|  1.08k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 36.3k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|  36.3k|	}										\
  |  |  |  |  122|  36.3k|    }											\
  |  |  |  |  123|  36.3k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|  36.3k|				       g_vci_n_values,					\
  |  |  |  |  125|  36.3k|				       g_vci_cvalues,					\
  |  |  |  |  126|  36.3k|				       g_vci_flags);						\
  |  |  |  |  127|  36.3k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  36.3k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|  36.3k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|  36.3k|\
  |  |  409|  36.3k|		/* Don't bother with the error message. \
  |  |  410|  36.3k|		 */ \
  |  |  411|  36.3k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 36.3k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  900|       |
  901|       |		/* We must collect input args as we walk the name/value list,
  902|       |		 * but we don't do anything with them.
  903|       |		 */
  904|       |
  905|  72.6k|		VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|  36.3k|	g_value_unset(&value); \
  |  |  418|  36.3k|	} \
  |  |  419|  36.3k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 0, False: 0]
  |  |  ------------------
  |  |  420|      0|	{ \
  |  |  421|      0|		void **arg G_GNUC_UNUSED; \
  |  |  422|      0|\
  |  |  423|      0|		/* Output args are a pointer to where to send the \
  |  |  424|      0|		 * result. \
  |  |  425|      0|		 */ \
  |  |  426|      0|		arg = va_arg(AP, void **);
  ------------------
  906|       |
  907|       |		/* Here's an output arg.
  908|       |		 */
  909|       |
  910|       |#ifdef VIPS_DEBUG
  911|       |		printf("\twriting %s to %p\n",
  912|       |			g_param_spec_get_name(pspec), arg);
  913|       |#endif /*VIPS_DEBUG */
  914|       |
  915|       |		/* If the dest pointer is NULL, skip the read.
  916|       |		 */
  917|      0|		if (arg) {
  ------------------
  |  Branch (917:7): [True: 0, False: 0]
  ------------------
  918|      0|			g_object_get(G_OBJECT(operation),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|      0|				g_param_spec_get_name(pspec), arg,
  920|      0|				NULL);
  921|       |
  922|       |			/* If the pspec is an object, that will up
  923|       |			 * the ref count. We want to hand over the
  924|       |			 * ref, so we have to knock it down again.
  925|       |			 */
  926|      0|			if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|      0|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|      0|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|      0|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|      0|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|      0|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|      0|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|      0|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|      0|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|      0|  else \
  |  |  |  |  |  | 2321|      0|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|      0|  __r; \
  |  |  |  |  |  | 2323|      0|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  927|      0|				GObject *object;
  928|       |
  929|      0|				object = *((GObject **) arg);
  930|      0|				g_object_unref(object);
  931|      0|			}
  932|      0|		}
  933|       |
  934|      0|		VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|      0|	}
  ------------------
  935|  36.3k|	}
  936|       |
  937|   138k|	return 0;
  938|   138k|}
operation.c:vips_call_by_name:
  995|   155k|{
  996|   155k|	VipsOperation *operation;
  997|   155k|	int result;
  998|       |
  999|   155k|	VIPS_DEBUG_MSG("vips_call_by_name: starting for %s ...\n",
  ------------------
  |  |   47|   155k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   155k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   155k|	{ \
  |  |   49|   155k|		; \
  |  |   50|   155k|	} \
  |  |   51|   155k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   155k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1000|   155k|		operation_name);
 1001|       |
 1002|   155k|	if (!(operation = vips_operation_new(operation_name)))
  ------------------
  |  Branch (1002:6): [True: 0, False: 155k]
  ------------------
 1003|      0|		return -1;
 1004|       |
 1005|       |	/* Set str options before vargs options, so the user can't override
 1006|       |	 * things we set deliberately.
 1007|       |	 */
 1008|   155k|	if (option_string &&
  ------------------
  |  Branch (1008:6): [True: 41.5k, False: 114k]
  ------------------
 1009|   155k|		vips_object_set_from_string(VIPS_OBJECT(operation),
  ------------------
  |  |  433|  41.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  41.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  41.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1009:3): [True: 0, False: 41.5k]
  ------------------
 1010|  41.5k|			option_string)) {
 1011|      0|		vips_object_unref_outputs(VIPS_OBJECT(operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|      0|		g_object_unref(operation);
 1013|       |
 1014|      0|		return -1;
 1015|      0|	}
 1016|       |
 1017|   155k|	result = vips_call_required_optional(&operation, required, optional);
 1018|       |
 1019|       |	/* Build failed: junk args and back out.
 1020|       |	 */
 1021|   155k|	if (result) {
  ------------------
  |  Branch (1021:6): [True: 17.4k, False: 138k]
  ------------------
 1022|  17.4k|		vips_object_unref_outputs(VIPS_OBJECT(operation));
  ------------------
  |  |  433|  17.4k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  17.4k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  17.4k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|  17.4k|		g_object_unref(operation);
 1024|       |
 1025|  17.4k|		return -1;
 1026|  17.4k|	}
 1027|       |
 1028|       |	/* The operation we have built should now have been reffed by one of
 1029|       |	 * its arguments or have finished its work. Either way, we can unref.
 1030|       |	 */
 1031|   138k|	g_object_unref(operation);
 1032|       |
 1033|   138k|	return result;
 1034|   155k|}

vips_rect_isempty:
   97|   842k|{
   98|   842k|	return r->width <= 0 || r->height <= 0;
  ------------------
  |  Branch (98:9): [True: 0, False: 842k]
  |  Branch (98:26): [True: 0, False: 842k]
  ------------------
   99|   842k|}
vips_rect_includesrect:
  112|   367k|{
  113|   367k|	return r1->left <= r2->left &&
  ------------------
  |  Branch (113:9): [True: 367k, False: 0]
  ------------------
  114|   367k|		r1->top <= r2->top &&
  ------------------
  |  Branch (114:3): [True: 367k, False: 0]
  ------------------
  115|   367k|		r1->left + r1->width >= r2->left + r2->width &&
  ------------------
  |  Branch (115:3): [True: 367k, False: 0]
  ------------------
  116|   367k|		r1->top + r1->height >= r2->top + r2->height;
  ------------------
  |  Branch (116:3): [True: 332k, False: 34.2k]
  ------------------
  117|   367k|}
vips_rect_intersectrect:
  180|  1.54M|{
  181|  1.54M|	int left = VIPS_MAX(r1->left, r2->left);
  ------------------
  |  |   54|  1.54M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.54M]
  |  |  ------------------
  ------------------
  182|  1.54M|	int top = VIPS_MAX(r1->top, r2->top);
  ------------------
  |  |   54|  1.54M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 613k, False: 927k]
  |  |  ------------------
  ------------------
  183|  1.54M|	int right = VIPS_MIN(VIPS_RECT_RIGHT(r1), VIPS_RECT_RIGHT(r2));
  ------------------
  |  |   55|  1.54M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 2.42k, False: 1.53M]
  |  |  ------------------
  ------------------
  184|  1.54M|	int bottom = VIPS_MIN(VIPS_RECT_BOTTOM(r1), VIPS_RECT_BOTTOM(r2));
  ------------------
  |  |   55|  1.54M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 797k, False: 742k]
  |  |  ------------------
  ------------------
  185|  1.54M|	int width = VIPS_MAX(0, right - left);
  ------------------
  |  |   54|  1.54M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.54M]
  |  |  ------------------
  ------------------
  186|  1.54M|	int height = VIPS_MAX(0, bottom - top);
  ------------------
  |  |   54|  1.54M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.54M]
  |  |  ------------------
  ------------------
  187|       |
  188|  1.54M|	out->left = left;
  189|  1.54M|	out->top = top;
  190|  1.54M|	out->width = width;
  191|  1.54M|	out->height = height;
  192|  1.54M|}

vips__region_start:
  228|   303k|{
  229|   303k|	VipsImage *image = region->im;
  230|       |
  231|   303k|	if (!region->seq && image->start_fn) {
  ------------------
  |  Branch (231:6): [True: 191k, False: 112k]
  |  Branch (231:22): [True: 139k, False: 52.0k]
  ------------------
  232|   139k|		VIPS_GATE_START("vips__region_start: wait");
  ------------------
  |  |   41|   139k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   139k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   139k|	{ \
  |  |   43|   139k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 139k]
  |  |  ------------------
  |  |   44|   139k|			vips__thread_gate_start(NAME); \
  |  |   45|   139k|	} \
  |  |   46|   139k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   139k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|   139k|		g_mutex_lock(image->sslock);
  235|       |
  236|   139k|		VIPS_GATE_STOP("vips__region_start: wait");
  ------------------
  |  |   49|   139k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   139k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   139k|	{ \
  |  |   51|   139k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 139k]
  |  |  ------------------
  |  |   52|   139k|			vips__thread_gate_stop(NAME); \
  |  |   53|   139k|	} \
  |  |   54|   139k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   139k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|       |
  238|   139k|		region->seq = image->start_fn(image,
  239|   139k|			image->client1, image->client2);
  240|       |
  241|   139k|		g_mutex_unlock(image->sslock);
  242|       |
  243|   139k|		if (!region->seq) {
  ------------------
  |  Branch (243:7): [True: 7.39k, False: 131k]
  ------------------
  244|       |#ifdef DEBUG
  245|       |			printf("vips__region_start: start function failed for image %s",
  246|       |				image->filename);
  247|       |#endif /*DEBUG*/
  248|       |
  249|  7.39k|			return -1;
  250|  7.39k|		}
  251|   139k|	}
  252|       |
  253|   296k|	return 0;
  254|   303k|}
vips__region_stop:
  260|   300k|{
  261|   300k|	VipsImage *image = region->im;
  262|       |
  263|   300k|	if (region->seq && image->stop_fn) {
  ------------------
  |  Branch (263:6): [True: 131k, False: 168k]
  |  Branch (263:21): [True: 131k, False: 0]
  ------------------
  264|   131k|		int result;
  265|       |
  266|   131k|		VIPS_GATE_START("vips__region_stop: wait");
  ------------------
  |  |   41|   131k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   131k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   131k|	{ \
  |  |   43|   131k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 131k]
  |  |  ------------------
  |  |   44|   131k|			vips__thread_gate_start(NAME); \
  |  |   45|   131k|	} \
  |  |   46|   131k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   131k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|   131k|		g_mutex_lock(image->sslock);
  269|       |
  270|   131k|		VIPS_GATE_STOP("vips__region_stop: wait");
  ------------------
  |  |   49|   131k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   131k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   131k|	{ \
  |  |   51|   131k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 131k]
  |  |  ------------------
  |  |   52|   131k|			vips__thread_gate_stop(NAME); \
  |  |   53|   131k|	} \
  |  |   54|   131k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   131k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|       |
  272|   131k|		result = image->stop_fn(region->seq,
  273|   131k|			image->client1, image->client2);
  274|       |
  275|   131k|		g_mutex_unlock(image->sslock);
  276|       |
  277|       |		/* stop function can return an error, but we have nothing we
  278|       |		 * can really do with it, sadly.
  279|       |		 */
  280|   131k|		if (result)
  ------------------
  |  Branch (280:7): [True: 0, False: 131k]
  ------------------
  281|      0|			g_warning("stop callback failed for image %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  282|   131k|				image->filename);
  283|       |
  284|   131k|		region->seq = NULL;
  285|   131k|	}
  286|   300k|}
vips__region_take_ownership:
  379|   315k|{
  380|       |	/* Lock so that there's a memory barrier with the thread doing the
  381|       |	 * vips__region_no_ownership() before us.
  382|       |	 */
  383|   315k|	VIPS_GATE_START("vips__region_take_ownership: wait");
  ------------------
  |  |   41|   315k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   315k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   315k|	{ \
  |  |   43|   315k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 315k]
  |  |  ------------------
  |  |   44|   315k|			vips__thread_gate_start(NAME); \
  |  |   45|   315k|	} \
  |  |   46|   315k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   315k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|       |
  385|   315k|	g_mutex_lock(region->im->sslock);
  386|       |
  387|   315k|	VIPS_GATE_STOP("vips__region_take_ownership: wait");
  ------------------
  |  |   49|   315k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   315k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   315k|	{ \
  |  |   51|   315k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 315k]
  |  |  ------------------
  |  |   52|   315k|			vips__thread_gate_stop(NAME); \
  |  |   53|   315k|	} \
  |  |   54|   315k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   315k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |
  389|   315k|	if (region->thread != g_thread_self()) {
  ------------------
  |  Branch (389:6): [True: 315k, False: 0]
  ------------------
  390|   315k|		g_assert(region->thread == NULL);
  ------------------
  |  |  166|   315k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   315k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   315k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|       |
  392|       |		/* We don't want to move shared buffers: the other region
  393|       |		 * using this buffer will still be on the other thread.
  394|       |		 * Not sure if this will ever happen: if it does, we'll
  395|       |		 * need to dup the buffer.
  396|       |		 */
  397|   315k|		g_assert(!region->buffer ||
  ------------------
  |  |  166|   315k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   315k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   315k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  398|   315k|			region->buffer->ref_count == 1);
  399|       |
  400|   315k|		region->thread = g_thread_self();
  401|   315k|	}
  402|       |
  403|   315k|	g_mutex_unlock(region->im->sslock);
  404|   315k|}
vips__region_check_ownership:
  408|   939k|{
  409|   939k|	if (region->thread) {
  ------------------
  |  Branch (409:6): [True: 836k, False: 102k]
  ------------------
  410|   836k|		g_assert(region->thread == g_thread_self());
  ------------------
  |  |  166|   836k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   836k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   836k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|   836k|		if (region->buffer && region->buffer->cache)
  ------------------
  |  Branch (411:7): [True: 167k, False: 669k]
  |  Branch (411:25): [True: 68.4k, False: 98.7k]
  ------------------
  412|   836k|			g_assert(region->thread ==
  ------------------
  |  |  166|  68.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  68.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  68.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|   836k|				region->buffer->cache->thread);
  414|   836k|	}
  415|   939k|}
vips__region_no_ownership:
  422|   147k|{
  423|   147k|	VIPS_GATE_START("vips__region_no_ownership: wait");
  ------------------
  |  |   41|   147k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   147k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   147k|	{ \
  |  |   43|   147k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 147k]
  |  |  ------------------
  |  |   44|   147k|			vips__thread_gate_start(NAME); \
  |  |   45|   147k|	} \
  |  |   46|   147k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   147k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|   147k|	g_mutex_lock(region->im->sslock);
  426|       |
  427|   147k|	VIPS_GATE_STOP("vips__region_no_ownership: wait");
  ------------------
  |  |   49|   147k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   147k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   147k|	{ \
  |  |   51|   147k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 147k]
  |  |  ------------------
  |  |   52|   147k|			vips__thread_gate_stop(NAME); \
  |  |   53|   147k|	} \
  |  |   54|   147k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   147k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|       |
  429|   147k|	vips__region_check_ownership(region);
  430|       |
  431|   147k|	region->thread = NULL;
  432|   147k|	if (region->buffer)
  ------------------
  |  Branch (432:6): [True: 14.8k, False: 132k]
  ------------------
  433|  14.8k|		vips_buffer_undone(region->buffer);
  434|       |
  435|   147k|	g_mutex_unlock(region->im->sslock);
  436|   147k|}
vips_region_new:
  505|   300k|{
  506|   300k|	VipsRegion *region;
  507|       |
  508|       |	/* Ref quickly, we want to make sure we keep the image around.
  509|       |	 * We can't use the property system, we need to be very threaded.
  510|       |	 */
  511|   300k|	g_object_ref(image);
  512|   300k|	g_assert(G_OBJECT(image)->ref_count > 1);
  ------------------
  |  |  166|   300k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|   300k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|   300k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|       |
  515|   300k|	region = VIPS_REGION(g_object_new(VIPS_TYPE_REGION, NULL));
  ------------------
  |  |   52|   300k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   300k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   300k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   300k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  516|   300k|	region->im = image;
  517|       |
  518|   300k|	if (vips_object_build(VIPS_OBJECT(region))) {
  ------------------
  |  |  433|   300k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   300k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   300k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (518:6): [True: 0, False: 300k]
  ------------------
  519|      0|		VIPS_UNREF(region);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      0|		return NULL;
  521|      0|	}
  522|       |
  523|   300k|	g_assert(vips_object_sanity(VIPS_OBJECT(region)));
  ------------------
  |  |  166|   300k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|   300k|	return region;
  526|   300k|}
vips_region_buffer:
  545|   316k|{
  546|   316k|	VipsImage *im = reg->im;
  547|       |
  548|   316k|	VipsRect image;
  549|   316k|	VipsRect clipped;
  550|       |
  551|   316k|	vips__region_check_ownership(reg);
  552|       |
  553|       |	/* Clip against image.
  554|       |	 */
  555|   316k|	image.top = 0;
  556|   316k|	image.left = 0;
  557|   316k|	image.width = im->Xsize;
  558|   316k|	image.height = im->Ysize;
  559|   316k|	vips_rect_intersectrect(r, &image, &clipped);
  560|       |
  561|       |	/* Test for empty.
  562|       |	 */
  563|   316k|	if (vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (563:6): [True: 0, False: 316k]
  ------------------
  564|      0|		vips_error("VipsRegion",
  565|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  566|      0|		return -1;
  567|      0|	}
  568|       |
  569|   316k|	VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|   316k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   316k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   316k|	{ \
  |  |   43|   316k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 316k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   316k|	} \
  |  |   48|   316k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   316k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|       |
  571|       |	/* Have we been asked to drop caches? We want to throw everything
  572|       |	 * away.
  573|       |	 *
  574|       |	 * If not, try to reuse the current buffer.
  575|       |	 */
  576|   316k|	if (reg->invalid) {
  ------------------
  |  Branch (576:6): [True: 0, False: 316k]
  ------------------
  577|      0|		VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  578|      0|		reg->invalid = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  579|       |
  580|      0|		if (!(reg->buffer = vips_buffer_new(im, &clipped)))
  ------------------
  |  Branch (580:7): [True: 0, False: 0]
  ------------------
  581|      0|			return -1;
  582|      0|	}
  583|   316k|	else {
  584|       |		/* We combine buffer unref and new buffer ref in one call
  585|       |		 * to reduce malloc/free cycling.
  586|       |		 */
  587|   316k|		if (!(reg->buffer =
  ------------------
  |  Branch (587:7): [True: 0, False: 316k]
  ------------------
  588|   316k|					vips_buffer_unref_ref(reg->buffer, im, &clipped)))
  589|      0|			return -1;
  590|   316k|	}
  591|       |
  592|       |	/* Init new stuff.
  593|       |	 */
  594|   316k|	reg->valid = reg->buffer->area;
  595|   316k|	reg->bpl = VIPS_IMAGE_SIZEOF_PEL(im) * reg->buffer->area.width;
  ------------------
  |  |  384|   316k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   316k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  596|   316k|	reg->type = VIPS_REGION_BUFFER;
  597|   316k|	reg->data = reg->buffer->buf;
  598|       |
  599|   316k|	return 0;
  600|   316k|}
vips_region_image:
  615|  30.1k|{
  616|  30.1k|	VipsImage *image = reg->im;
  617|       |
  618|  30.1k|	VipsRect all;
  619|  30.1k|	VipsRect clipped;
  620|       |
  621|       |	/* Sanity check.
  622|       |	 */
  623|  30.1k|	vips__region_check_ownership(reg);
  624|       |
  625|       |	/* Clip against image.
  626|       |	 */
  627|  30.1k|	all.top = 0;
  628|  30.1k|	all.left = 0;
  629|  30.1k|	all.width = image->Xsize;
  630|  30.1k|	all.height = image->Ysize;
  631|  30.1k|	vips_rect_intersectrect(r, &all, &clipped);
  632|       |
  633|  30.1k|	if (vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (633:6): [True: 0, False: 30.1k]
  ------------------
  634|      0|		vips_error("VipsRegion",
  635|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  636|      0|		return -1;
  637|      0|	}
  638|       |
  639|  30.1k|	reg->invalid = FALSE;
  ------------------
  |  |  794|  30.1k|#define	FALSE	(0)
  ------------------
  640|  30.1k|	VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|  30.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  30.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  30.1k|	{ \
  |  |   43|  30.1k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 30.1k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  30.1k|	} \
  |  |   48|  30.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  30.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|       |
  642|  30.1k|	if (image->data) {
  ------------------
  |  Branch (642:6): [True: 30.1k, False: 0]
  ------------------
  643|       |		/* We have the whole image available ... easy!
  644|       |		 */
  645|  30.1k|		VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|  30.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  30.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  30.1k|	{ \
  |  |   43|  30.1k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 30.1k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  30.1k|	} \
  |  |   48|  30.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  30.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|       |
  647|       |		/* We can't just set valid = whole image, since this may be an
  648|       |		 * incompletely calculated memory buffer. Just set valid to r.
  649|       |		 */
  650|  30.1k|		reg->valid = clipped;
  651|  30.1k|		reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image);
  ------------------
  |  |  386|  30.1k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  30.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  30.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  652|  30.1k|		reg->data = VIPS_IMAGE_ADDR(image, clipped.left, clipped.top);
  ------------------
  |  |  418|  30.1k|	((I)->data + \
  |  |  419|  30.1k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  30.1k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  30.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  30.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  30.1k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  30.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  30.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|  30.1k|		reg->type = VIPS_REGION_OTHER_IMAGE;
  654|  30.1k|	}
  655|      0|	else if (image->dtype == VIPS_IMAGE_OPENIN) {
  ------------------
  |  Branch (655:11): [True: 0, False: 0]
  ------------------
  656|       |		/* No complete image data ... but we can use a rolling window.
  657|       |		 */
  658|      0|		reg->type = VIPS_REGION_WINDOW;
  659|      0|		if (!(reg->window = vips_window_take(reg->window, image,
  ------------------
  |  Branch (659:7): [True: 0, False: 0]
  ------------------
  660|      0|				  clipped.top, clipped.height)))
  661|      0|			return -1;
  662|       |
  663|       |		/* Note the area the window actually represents.
  664|       |		 */
  665|      0|		reg->valid.left = 0;
  666|      0|		reg->valid.top = reg->window->top;
  667|      0|		reg->valid.width = image->Xsize;
  668|      0|		reg->valid.height = reg->window->height;
  669|      0|		reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image);
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|      0|		reg->data = reg->window->data;
  671|      0|	}
  672|      0|	else {
  673|      0|		VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|       |
  675|      0|		vips_error("VipsRegion", "%s", _("bad image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  676|      0|		return -1;
  677|      0|	}
  678|       |
  679|  30.1k|	return 0;
  680|  30.1k|}
vips_region_region:
  708|   228k|{
  709|   228k|	VipsRect image;
  710|   228k|	VipsRect wanted;
  711|   228k|	VipsRect clipped;
  712|   228k|	VipsRect clipped2;
  713|   228k|	VipsRect final;
  714|       |
  715|       |	/* Sanity check.
  716|       |	 */
  717|   228k|	if (!dest->data) {
  ------------------
  |  Branch (717:6): [True: 0, False: 228k]
  ------------------
  718|      0|		vips_error("VipsRegion",
  719|      0|			"%s", _("no pixel data on attached image"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  720|      0|		return -1;
  721|      0|	}
  722|   228k|	if (VIPS_IMAGE_SIZEOF_PEL(dest->im) !=
  ------------------
  |  |  384|   228k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   228k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  |  Branch (722:6): [True: 0, False: 228k]
  ------------------
  723|   228k|		VIPS_IMAGE_SIZEOF_PEL(reg->im)) {
  ------------------
  |  |  384|   228k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   228k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  724|      0|		vips_error("VipsRegion",
  725|      0|			"%s", _("images do not match in pixel size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  726|      0|		return -1;
  727|      0|	}
  728|   228k|	vips__region_check_ownership(reg);
  729|       |
  730|       |	/* We can't test
  731|       |
  732|       |		g_assert(dest->thread == g_thread_self());
  733|       |
  734|       |	 * since we can have several threads writing to the same region in
  735|       |	 * threadgroup.
  736|       |	 */
  737|       |
  738|       |	/* Clip r against size of the image.
  739|       |	 */
  740|   228k|	image.top = 0;
  741|   228k|	image.left = 0;
  742|   228k|	image.width = reg->im->Xsize;
  743|   228k|	image.height = reg->im->Ysize;
  744|   228k|	vips_rect_intersectrect(r, &image, &clipped);
  745|       |
  746|       |	/* Translate to dest's coordinate space and clip against the available
  747|       |	 * pixels.
  748|       |	 */
  749|   228k|	wanted.left = x + (clipped.left - r->left);
  750|   228k|	wanted.top = y + (clipped.top - r->top);
  751|   228k|	wanted.width = clipped.width;
  752|   228k|	wanted.height = clipped.height;
  753|       |
  754|       |	/* Test that dest->valid is large enough.
  755|       |	 */
  756|   228k|	if (!vips_rect_includesrect(&dest->valid, &wanted)) {
  ------------------
  |  Branch (756:6): [True: 0, False: 228k]
  ------------------
  757|      0|		vips_error("VipsRegion",
  758|      0|			"%s", _("dest too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  759|      0|		return -1;
  760|      0|	}
  761|       |
  762|       |	/* Clip against the available pixels.
  763|       |	 */
  764|   228k|	vips_rect_intersectrect(&wanted, &dest->valid, &clipped2);
  765|       |
  766|       |	/* Translate back to reg's coordinate space and set as valid.
  767|       |	 */
  768|   228k|	final.left = r->left + (clipped2.left - wanted.left);
  769|   228k|	final.top = r->top + (clipped2.top - wanted.top);
  770|   228k|	final.width = clipped2.width;
  771|   228k|	final.height = clipped2.height;
  772|       |
  773|       |	/* Test for empty.
  774|       |	 */
  775|   228k|	if (vips_rect_isempty(&final)) {
  ------------------
  |  Branch (775:6): [True: 0, False: 228k]
  ------------------
  776|      0|		vips_error("VipsRegion",
  777|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  778|      0|		return -1;
  779|      0|	}
  780|       |
  781|       |	/* Init new stuff.
  782|       |	 */
  783|   228k|	VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|   228k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   228k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   228k|	{ \
  |  |   43|   228k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 83.8k, False: 144k]
  |  |  ------------------
  |  |   44|  83.8k|			(void) F((S)); \
  |  |   45|  83.8k|			(S) = 0; \
  |  |   46|  83.8k|		} \
  |  |   47|   228k|	} \
  |  |   48|   228k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   228k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|   228k|	VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|   228k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   228k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   228k|	{ \
  |  |   43|   228k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 228k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   228k|	} \
  |  |   48|   228k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   228k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|   228k|	reg->invalid = FALSE;
  ------------------
  |  |  794|   228k|#define	FALSE	(0)
  ------------------
  786|   228k|	reg->valid = final;
  787|   228k|	reg->bpl = dest->bpl;
  788|   228k|	reg->data = VIPS_REGION_ADDR(dest, clipped2.left, clipped2.top);
  ------------------
  |  |  227|   228k|	((R)->data + \
  |  |  228|   228k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   228k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   228k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   228k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   228k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   228k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|   228k|	reg->type = VIPS_REGION_OTHER_REGION;
  790|       |
  791|   228k|	return 0;
  792|   228k|}
vips_region_fill:
  860|   198k|{
  861|   198k|	g_assert(reg->im->dtype == VIPS_IMAGE_PARTIAL);
  ------------------
  |  |  166|   198k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   198k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   198k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|   198k|	g_assert(reg->im->generate_fn);
  ------------------
  |  |  166|   198k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   198k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   198k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  863|       |
  864|       |	/* You'd think we could check reg and see if it already has some of
  865|       |	 * the pixels we need. If it does, we could copy them and only
  866|       |	 * generate the new ones.
  867|       |	 *
  868|       |	 * However, we usually have neighbouring regions on different threads,
  869|       |	 * so from the point of view of this thread, we will get no overlaps
  870|       |	 * on successive prepare requests.
  871|       |	 */
  872|       |
  873|       |	/* Should have local memory.
  874|       |	 */
  875|   198k|	if (vips_region_buffer(reg, r))
  ------------------
  |  Branch (875:6): [True: 0, False: 198k]
  ------------------
  876|      0|		return -1;
  877|       |
  878|       |	/* Evaluate into out_region, if we've not got calculated pixels.
  879|       |	 */
  880|   198k|	if (!reg->buffer->done) {
  ------------------
  |  Branch (880:6): [True: 198k, False: 0]
  ------------------
  881|   198k|		if (fn(reg, a))
  ------------------
  |  Branch (881:7): [True: 58.5k, False: 140k]
  ------------------
  882|  58.5k|			return -1;
  883|       |
  884|       |		/* Publish our results.
  885|       |		 */
  886|   140k|		if (reg->buffer)
  ------------------
  |  Branch (886:7): [True: 56.2k, False: 83.8k]
  ------------------
  887|  56.2k|			vips_buffer_done(reg->buffer);
  888|   140k|	}
  889|       |
  890|   140k|	return 0;
  891|   198k|}
vips_region_paint:
  923|  54.6k|{
  924|  54.6k|	VipsRect clipped;
  925|       |
  926|  54.6k|	vips_rect_intersectrect(r, &reg->valid, &clipped);
  927|  54.6k|	if (!vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (927:6): [True: 54.6k, False: 0]
  ------------------
  928|  54.6k|		VipsPel *q = VIPS_REGION_ADDR(reg, clipped.left, clipped.top);
  ------------------
  |  |  227|  54.6k|	((R)->data + \
  |  |  228|  54.6k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  54.6k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  54.6k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  54.6k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  54.6k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  54.6k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  929|  54.6k|		size_t ls = VIPS_REGION_LSKIP(reg);
  ------------------
  |  |  195|  54.6k|	((size_t) ((R)->bpl))
  ------------------
  930|  54.6k|		size_t wd = clipped.width * VIPS_IMAGE_SIZEOF_PEL(reg->im);
  ------------------
  |  |  384|  54.6k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  54.6k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  931|  54.6k|		int y;
  932|       |
  933|  54.6k|		if (vips_band_format_isint(reg->im->BandFmt)) {
  ------------------
  |  Branch (933:7): [True: 54.6k, False: 0]
  ------------------
  934|   127k|			for (y = 0; y < clipped.height; y++) {
  ------------------
  |  Branch (934:16): [True: 72.7k, False: 54.6k]
  ------------------
  935|  72.7k|				memset((char *) q, value, wd);
  936|  72.7k|				q += ls;
  937|  72.7k|			}
  938|  54.6k|		}
  939|      0|		else {
  940|      0|			gboolean iscomplex =
  941|      0|				vips_band_format_iscomplex(reg->im->BandFmt);
  942|      0|			int nele = clipped.width * reg->im->Bands *
  943|      0|				(iscomplex ? 2 : 1);
  ------------------
  |  Branch (943:6): [True: 0, False: 0]
  ------------------
  944|      0|			VipsPel *q1;
  945|       |
  946|      0|			switch (reg->im->BandFmt) {
  947|      0|			case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (947:4): [True: 0, False: 0]
  ------------------
  948|      0|			case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (948:4): [True: 0, False: 0]
  ------------------
  949|      0|				FILL_LINE(float, q, nele, value);
  ------------------
  |  |  894|      0|	{ \
  |  |  895|      0|		int x; \
  |  |  896|      0|		TYPE *QT = (TYPE *) Q; \
  |  |  897|      0|\
  |  |  898|      0|		for (x = 0; x < (N); x++) \
  |  |  ------------------
  |  |  |  Branch (898:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  899|      0|			QT[x] = (V); \
  |  |  900|      0|	}
  ------------------
  950|      0|				break;
  951|       |
  952|      0|			case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (952:4): [True: 0, False: 0]
  ------------------
  953|      0|			case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (953:4): [True: 0, False: 0]
  ------------------
  954|      0|				FILL_LINE(double, q, nele, value);
  ------------------
  |  |  894|      0|	{ \
  |  |  895|      0|		int x; \
  |  |  896|      0|		TYPE *QT = (TYPE *) Q; \
  |  |  897|      0|\
  |  |  898|      0|		for (x = 0; x < (N); x++) \
  |  |  ------------------
  |  |  |  Branch (898:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  899|      0|			QT[x] = (V); \
  |  |  900|      0|	}
  ------------------
  955|      0|				break;
  956|       |
  957|      0|			default:
  ------------------
  |  Branch (957:4): [True: 0, False: 0]
  ------------------
  958|      0|				g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|      0|			}
  960|       |
  961|      0|			q1 = q + ls;
  962|       |
  963|      0|			for (y = 1; y < clipped.height; y++) {
  ------------------
  |  Branch (963:16): [True: 0, False: 0]
  ------------------
  964|      0|				memcpy((char *) q1, (char *) q, wd);
  965|      0|				q1 += ls;
  966|      0|			}
  967|      0|		}
  968|  54.6k|	}
  969|  54.6k|}
vips_region_black:
 1032|  54.6k|{
 1033|  54.6k|	vips_region_paint(reg, &reg->valid, 0);
 1034|  54.6k|}
vips_region_copy:
 1053|   147k|{
 1054|   147k|	size_t len = VIPS_IMAGE_SIZEOF_PEL(reg->im) * r->width;
  ------------------
  |  |  384|   147k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   147k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 1055|   147k|	VipsPel *p = VIPS_REGION_ADDR(reg, r->left, r->top);
  ------------------
  |  |  227|   147k|	((R)->data + \
  |  |  228|   147k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   147k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   147k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   147k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   147k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   147k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|   147k|	VipsPel *q = VIPS_REGION_ADDR(dest, x, y);
  ------------------
  |  |  227|   147k|	((R)->data + \
  |  |  228|   147k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   147k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   147k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   147k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   147k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   147k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|   147k|	size_t plsk = VIPS_REGION_LSKIP(reg);
  ------------------
  |  |  195|   147k|	((size_t) ((R)->bpl))
  ------------------
 1058|   147k|	size_t qlsk = VIPS_REGION_LSKIP(dest);
  ------------------
  |  |  195|   147k|	((size_t) ((R)->bpl))
  ------------------
 1059|       |
 1060|   147k|	int z;
 1061|       |
 1062|       |#ifdef DEBUG
 1063|       |	/* Find the area we will write to in dest.
 1064|       |	 */
 1065|       |	VipsRect output;
 1066|       |
 1067|       |	printf("vips_region_copy: sanity check\n");
 1068|       |
 1069|       |	output.left = x;
 1070|       |	output.top = y;
 1071|       |	output.width = r->width;
 1072|       |	output.height = r->height;
 1073|       |
 1074|       |	/* Must be inside dest->valid.
 1075|       |	 */
 1076|       |	g_assert(vips_rect_includesrect(&dest->valid, &output));
 1077|       |
 1078|       |	/* Check the area we are reading from in reg.
 1079|       |	 */
 1080|       |	g_assert(vips_rect_includesrect(&reg->valid, r));
 1081|       |
 1082|       |	/* VipsPel size must be the same.
 1083|       |	 */
 1084|       |	g_assert(VIPS_IMAGE_SIZEOF_PEL(reg->im) ==
 1085|       |		VIPS_IMAGE_SIZEOF_PEL(dest->im));
 1086|       |#endif /*DEBUG*/
 1087|       |
 1088|       |	/* Copy the scanlines.
 1089|       |	 *
 1090|       |	 * Special case: if the two sets of scanlines are end-to-end (this
 1091|       |	 * happens if we are copying complete regions) we can do a single
 1092|       |	 * memcpy() for the whole thing. This is a little faster since we
 1093|       |	 * won't have to do unaligned copies.
 1094|       |	 */
 1095|   147k|	if (len == plsk &&
  ------------------
  |  Branch (1095:6): [True: 147k, False: 0]
  ------------------
 1096|   147k|		len == qlsk)
  ------------------
  |  Branch (1096:3): [True: 147k, False: 0]
  ------------------
 1097|   147k|		memcpy(q, p, len * r->height);
 1098|      0|	else
 1099|      0|		for (z = 0; z < r->height; z++) {
  ------------------
  |  Branch (1099:15): [True: 0, False: 0]
  ------------------
 1100|      0|			memcpy(q, p, len);
 1101|       |
 1102|      0|			p += plsk;
 1103|      0|			q += qlsk;
 1104|      0|		}
 1105|   147k|}
vips_region_prepare:
 1657|   217k|{
 1658|   217k|	VipsImage *im = reg->im;
 1659|       |
 1660|   217k|	VipsRect save = *r;
 1661|       |
 1662|   217k|	vips__region_check_ownership(reg);
 1663|       |
 1664|   217k|	if (vips_image_iskilled(im))
  ------------------
  |  Branch (1664:6): [True: 0, False: 217k]
  ------------------
 1665|      0|		return -1;
 1666|       |
 1667|       |	/* We use save for sanity checking valid: we test at the end that the
 1668|       |	 * pixels we have generated are indeed all the ones that were asked
 1669|       |	 * for.
 1670|       |	 *
 1671|       |	 * However, r may be clipped by the image size, so we need to clip
 1672|       |	 * save as well to make sure we don't fail the assert due to that.
 1673|       |	 */
 1674|   217k|	{
 1675|   217k|		VipsRect image;
 1676|       |
 1677|   217k|		image.left = 0;
 1678|   217k|		image.top = 0;
 1679|   217k|		image.width = reg->im->Xsize;
 1680|   217k|		image.height = reg->im->Ysize;
 1681|   217k|		vips_rect_intersectrect(&save, &image, &save);
 1682|   217k|	}
 1683|       |
 1684|       |#ifdef DEBUG
 1685|       |	printf("vips_region_prepare: "
 1686|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 1687|       |		r->left, r->top, r->width, r->height);
 1688|       |#endif /*DEBUG*/
 1689|       |
 1690|   217k|	switch (im->dtype) {
 1691|   198k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (1691:2): [True: 198k, False: 19.0k]
  ------------------
 1692|   198k|		if (vips_region_fill(reg, r, vips_region_generate, NULL))
  ------------------
  |  Branch (1692:7): [True: 58.5k, False: 140k]
  ------------------
 1693|  58.5k|			return -1;
 1694|       |
 1695|   140k|		break;
 1696|       |
 1697|   140k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (1697:2): [True: 19.0k, False: 198k]
  ------------------
 1698|  19.0k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (1698:2): [True: 0, False: 217k]
  ------------------
 1699|  19.0k|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (1699:2): [True: 0, False: 217k]
  ------------------
 1700|  19.0k|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (1700:2): [True: 0, False: 217k]
  ------------------
 1701|  19.0k|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (1701:2): [True: 0, False: 217k]
  ------------------
 1702|       |		/* Attach to existing buffer.
 1703|       |		 */
 1704|  19.0k|		if (vips_region_image(reg, r))
  ------------------
  |  Branch (1704:7): [True: 0, False: 19.0k]
  ------------------
 1705|      0|			return -1;
 1706|       |
 1707|  19.0k|		break;
 1708|       |
 1709|  19.0k|	default:
  ------------------
  |  Branch (1709:2): [True: 0, False: 217k]
  ------------------
 1710|      0|		vips_error("vips_region_prepare",
 1711|      0|			_("unable to input from a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1712|      0|			vips_enum_string(VIPS_TYPE_DEMAND_STYLE, im->dtype));
  ------------------
  |  |  136|      0|#define VIPS_TYPE_DEMAND_STYLE (vips_demand_style_get_type())
  ------------------
 1713|      0|		return -1;
 1714|   217k|	}
 1715|       |
 1716|       |	/* valid should now include all the pixels that were asked for.
 1717|       |	 */
 1718|   217k|	g_assert(vips_rect_includesrect(&reg->valid, &save));
  ------------------
  |  |  166|   217k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   159k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   217k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1719|       |
 1720|   159k|	return 0;
 1721|   217k|}
vips_region_prepare_to:
 1787|   104k|{
 1788|   104k|	VipsImage *im = reg->im;
 1789|   104k|	VipsRect image;
 1790|   104k|	VipsRect wanted;
 1791|   104k|	VipsRect clipped;
 1792|   104k|	VipsRect clipped2;
 1793|   104k|	VipsRect final;
 1794|       |
 1795|   104k|	if (vips_image_iskilled(im))
  ------------------
  |  Branch (1795:6): [True: 0, False: 104k]
  ------------------
 1796|      0|		return -1;
 1797|       |
 1798|       |	/* Sanity check.
 1799|       |	 */
 1800|   104k|	if (!dest->data ||
  ------------------
  |  Branch (1800:6): [True: 0, False: 104k]
  ------------------
 1801|   104k|		dest->im->BandFmt != reg->im->BandFmt ||
  ------------------
  |  Branch (1801:3): [True: 0, False: 104k]
  ------------------
 1802|   104k|		dest->im->Bands != reg->im->Bands) {
  ------------------
  |  Branch (1802:3): [True: 0, False: 104k]
  ------------------
 1803|      0|		vips_error("vips_region_prepare_to",
 1804|      0|			"%s", _("inappropriate region type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1805|      0|		return -1;
 1806|      0|	}
 1807|       |
 1808|       |	/* clip r first against the size of reg->im, then again against the
 1809|       |	 * memory we have available to write to on dest. Just like
 1810|       |	 * vips_region_region()
 1811|       |	 */
 1812|   104k|	image.top = 0;
 1813|   104k|	image.left = 0;
 1814|   104k|	image.width = reg->im->Xsize;
 1815|   104k|	image.height = reg->im->Ysize;
 1816|   104k|	vips_rect_intersectrect(r, &image, &clipped);
 1817|       |
 1818|   104k|	g_assert(clipped.left == r->left);
  ------------------
  |  |  166|   104k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   104k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   104k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1819|   104k|	g_assert(clipped.top == r->top);
  ------------------
  |  |  166|   104k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   104k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   104k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1820|       |
 1821|   104k|	wanted.left = x + (clipped.left - r->left);
 1822|   104k|	wanted.top = y + (clipped.top - r->top);
 1823|   104k|	wanted.width = clipped.width;
 1824|   104k|	wanted.height = clipped.height;
 1825|       |
 1826|       |	/* Test that dest->valid is large enough.
 1827|       |	 */
 1828|   104k|	if (!vips_rect_includesrect(&dest->valid, &wanted)) {
  ------------------
  |  Branch (1828:6): [True: 0, False: 104k]
  ------------------
 1829|      0|		vips_error("vips_region_prepare_to",
 1830|      0|			"%s", _("dest too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1831|      0|		return -1;
 1832|      0|	}
 1833|       |
 1834|   104k|	vips_rect_intersectrect(&wanted, &dest->valid, &clipped2);
 1835|       |
 1836|       |	/* Translate back to reg's coordinate space and set as valid.
 1837|       |	 */
 1838|   104k|	final.left = r->left + (clipped2.left - wanted.left);
 1839|   104k|	final.top = r->top + (clipped2.top - wanted.top);
 1840|   104k|	final.width = clipped2.width;
 1841|   104k|	final.height = clipped2.height;
 1842|       |
 1843|   104k|	x = clipped2.left;
 1844|   104k|	y = clipped2.top;
 1845|       |
 1846|   104k|	if (vips_rect_isempty(&final)) {
  ------------------
  |  Branch (1846:6): [True: 0, False: 104k]
  ------------------
 1847|      0|		vips_error("vips_region_prepare_to",
 1848|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1849|      0|		return -1;
 1850|      0|	}
 1851|       |
 1852|       |#ifdef DEBUG
 1853|       |	printf("vips_region_prepare_to: "
 1854|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 1855|       |		final.left, final.top, final.width, final.height);
 1856|       |#endif /*DEBUG*/
 1857|       |
 1858|       |	/* Input or output image type?
 1859|       |	 */
 1860|   104k|	switch (im->dtype) {
 1861|      0|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (1861:2): [True: 0, False: 104k]
  ------------------
 1862|  80.9k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (1862:2): [True: 80.9k, False: 23.9k]
  ------------------
 1863|       |		/* We are generating with a sequence.
 1864|       |		 */
 1865|  80.9k|		if (vips_region_prepare_to_generate(reg, dest, &final, x, y))
  ------------------
  |  Branch (1865:7): [True: 12.5k, False: 68.3k]
  ------------------
 1866|  12.5k|			return -1;
 1867|       |
 1868|  68.3k|		break;
 1869|       |
 1870|  68.3k|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (1870:2): [True: 0, False: 104k]
  ------------------
 1871|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (1871:2): [True: 0, False: 104k]
  ------------------
 1872|      0|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (1872:2): [True: 0, False: 104k]
  ------------------
 1873|       |		/* Attach to existing buffer and copy to dest.
 1874|       |		 */
 1875|      0|		if (vips_region_image(reg, &final))
  ------------------
  |  Branch (1875:7): [True: 0, False: 0]
  ------------------
 1876|      0|			return -1;
 1877|      0|		vips_region_copy(reg, dest, &final, x, y);
 1878|       |
 1879|      0|		break;
 1880|       |
 1881|  23.9k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (1881:2): [True: 23.9k, False: 80.9k]
  ------------------
 1882|  23.9k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (1882:2): [True: 0, False: 104k]
  ------------------
 1883|       |		/* Could be either input or output. If there is a generate
 1884|       |		 * function, we are outputting.
 1885|       |		 */
 1886|  23.9k|		if (im->generate_fn) {
  ------------------
  |  Branch (1886:7): [True: 23.9k, False: 0]
  ------------------
 1887|  23.9k|			if (vips_region_prepare_to_generate(reg,
  ------------------
  |  Branch (1887:8): [True: 4.84k, False: 19.1k]
  ------------------
 1888|  23.9k|					dest, &final, x, y))
 1889|  4.84k|				return -1;
 1890|  23.9k|		}
 1891|      0|		else {
 1892|      0|			if (vips_region_image(reg, &final))
  ------------------
  |  Branch (1892:8): [True: 0, False: 0]
  ------------------
 1893|      0|				return -1;
 1894|      0|			vips_region_copy(reg, dest, &final, x, y);
 1895|      0|		}
 1896|       |
 1897|  19.1k|		break;
 1898|       |
 1899|  19.1k|	default:
  ------------------
  |  Branch (1899:2): [True: 0, False: 104k]
  ------------------
 1900|      0|		vips_error("vips_region_prepare_to",
 1901|      0|			_("unable to input from a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1902|      0|			vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, im->dtype));
  ------------------
  |  |  136|      0|#define VIPS_TYPE_DEMAND_STYLE (vips_demand_style_get_type())
  ------------------
 1903|      0|		return -1;
 1904|   104k|	}
 1905|       |
 1906|       |	/* We've written fresh pixels to dest, it's no longer invalid (if it
 1907|       |	 * was).
 1908|       |	 *
 1909|       |	 * We need this extra thing here because, unlike
 1910|       |	 * vips_region_prepare(), we don't vips_region_buffer() dest before
 1911|       |	 * writing it.
 1912|       |	 */
 1913|  87.5k|	dest->invalid = FALSE;
  ------------------
  |  |  794|  87.5k|#define	FALSE	(0)
  ------------------
 1914|       |
 1915|  87.5k|	return 0;
 1916|   104k|}
vips__region_count_pixels:
 2071|  1.65k|{
 2072|  1.65k|	VipsImage *image = region->im;
 2073|  1.65k|	VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|  1.65k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  1.65k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.65k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2074|  1.65k|		vips__image_pixels_quark);
 2075|       |
 2076|  1.65k|	g_mutex_lock(&vips__global_lock);
 2077|  1.65k|	if (!pixels->tpels)
  ------------------
  |  Branch (2077:6): [True: 1.03k, False: 618]
  ------------------
 2078|  1.03k|		pixels->tpels = VIPS_IMAGE_N_PELS(image);
  ------------------
  |  |  392|  1.03k|	((guint64) (I)->Xsize * (I)->Ysize)
  ------------------
 2079|  1.65k|	if (!pixels->nickname)
  ------------------
  |  Branch (2079:6): [True: 1.03k, False: 618]
  ------------------
 2080|  1.03k|		pixels->nickname = nickname;
 2081|  1.65k|	pixels->npels += region->valid.width * region->valid.height;
 2082|  1.65k|	g_mutex_unlock(&vips__global_lock);
 2083|  1.65k|}
region.c:vips_region_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      1|	gobject_class->finalize = vips_region_finalize;
  473|      1|	gobject_class->dispose = vips_region_dispose;
  474|       |
  475|      1|	vobject_class->summary = vips_region_summary;
  476|      1|	vobject_class->dump = vips_region_dump;
  477|      1|	vobject_class->build = vips_region_build;
  478|      1|}
region.c:vips_region_finalize:
  208|   300k|{
  209|       |#ifdef VIPS_DEBUG
  210|       |	VIPS_DEBUG_MSG("vips_region_finalize: ");
  211|       |	vips_object_print_name(VIPS_OBJECT(gobject));
  212|       |	VIPS_DEBUG_MSG("\n");
  213|       |#endif /*VIPS_DEBUG*/
  214|       |
  215|       |#ifdef VIPS_DEBUG
  216|       |	g_mutex_lock(&vips__global_lock);
  217|       |	vips__regions_all = g_slist_remove(vips__regions_all, gobject);
  218|       |	g_mutex_unlock(&vips__global_lock);
  219|       |#endif /*VIPS_DEBUG*/
  220|       |
  221|   300k|	G_OBJECT_CLASS(vips_region_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   300k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   300k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   300k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|   300k|}
region.c:vips_region_dispose:
  290|   300k|{
  291|   300k|	VipsRegion *region = VIPS_REGION(gobject);
  ------------------
  |  |   52|   300k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   300k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   300k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   300k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  292|   300k|	VipsImage *image = region->im;
  293|       |
  294|       |#ifdef VIPS_DEBUG
  295|       |	VIPS_DEBUG_MSG("vips_region_dispose: ");
  296|       |	vips_object_print_name(VIPS_OBJECT(gobject));
  297|       |	VIPS_DEBUG_MSG("\n");
  298|       |#endif /*VIPS_DEBUG*/
  299|       |
  300|   300k|	vips_object_preclose(VIPS_OBJECT(gobject));
  ------------------
  |  |  433|   300k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   300k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   300k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|       |
  302|       |	/* Stop this sequence.
  303|       |	 */
  304|   300k|	vips__region_stop(region);
  305|       |
  306|       |	/* Free any attached memory.
  307|       |	 */
  308|   300k|	VIPS_FREEF(vips_window_unref, region->window);
  ------------------
  |  |   41|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   300k|	{ \
  |  |   43|   300k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 300k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   300k|	} \
  |  |   48|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|   300k|	VIPS_FREEF(vips_buffer_unref, region->buffer);
  ------------------
  |  |   41|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   300k|	{ \
  |  |   43|   300k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 198k, False: 101k]
  |  |  ------------------
  |  |   44|   198k|			(void) F((S)); \
  |  |   45|   198k|			(S) = 0; \
  |  |   46|   198k|		} \
  |  |   47|   300k|	} \
  |  |   48|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|       |
  311|       |	/* Detach from image.
  312|       |	 */
  313|   300k|	VIPS_GATE_START("vips_region_dispose: wait");
  ------------------
  |  |   41|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   300k|	{ \
  |  |   43|   300k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 300k]
  |  |  ------------------
  |  |   44|   300k|			vips__thread_gate_start(NAME); \
  |  |   45|   300k|	} \
  |  |   46|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|       |
  315|   300k|	g_mutex_lock(image->sslock);
  316|       |
  317|   300k|	VIPS_GATE_STOP("vips_region_dispose: wait");
  ------------------
  |  |   49|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   300k|	{ \
  |  |   51|   300k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 300k]
  |  |  ------------------
  |  |   52|   300k|			vips__thread_gate_stop(NAME); \
  |  |   53|   300k|	} \
  |  |   54|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|   300k|	image->regions = g_slist_remove(image->regions, region);
  320|       |
  321|   300k|	g_mutex_unlock(image->sslock);
  322|       |
  323|   300k|	region->im = NULL;
  324|       |
  325|   300k|	g_object_unref(image);
  326|       |
  327|   300k|	G_OBJECT_CLASS(vips_region_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   300k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   300k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   300k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|   300k|}
region.c:vips_region_build:
  440|   300k|{
  441|   300k|	VipsRegion *region = VIPS_REGION(object);
  ------------------
  |  |   52|   300k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   300k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   300k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   300k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  442|   300k|	VipsImage *image = region->im;
  443|       |
  444|   300k|	VIPS_DEBUG_MSG("vips_region_build: %p\n", region);
  ------------------
  |  |   47|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   300k|	{ \
  |  |   49|   300k|		; \
  |  |   50|   300k|	} \
  |  |   51|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|       |
  446|   300k|	if (VIPS_OBJECT_CLASS(vips_region_parent_class)->build(object))
  ------------------
  |  |  435|   300k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   300k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   300k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (446:6): [True: 0, False: 300k]
  ------------------
  447|      0|		return -1;
  448|       |
  449|   300k|	vips__region_take_ownership(region);
  450|       |
  451|       |	/* We're usually inside the ss lock anyway. But be safe ...
  452|       |	 */
  453|   300k|	VIPS_GATE_START("vips_region_build: wait");
  ------------------
  |  |   41|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   300k|	{ \
  |  |   43|   300k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 300k]
  |  |  ------------------
  |  |   44|   300k|			vips__thread_gate_start(NAME); \
  |  |   45|   300k|	} \
  |  |   46|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|   300k|	g_mutex_lock(image->sslock);
  456|       |
  457|   300k|	VIPS_GATE_STOP("vips_region_build: wait");
  ------------------
  |  |   49|   300k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   300k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   300k|	{ \
  |  |   51|   300k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 300k]
  |  |  ------------------
  |  |   52|   300k|			vips__thread_gate_stop(NAME); \
  |  |   53|   300k|	} \
  |  |   54|   300k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   300k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|       |
  459|   300k|	image->regions = g_slist_prepend(image->regions, region);
  460|       |
  461|   300k|	g_mutex_unlock(image->sslock);
  462|       |
  463|   300k|	return 0;
  464|   300k|}
region.c:vips_region_init:
  482|   300k|{
  483|   300k|	region->type = VIPS_REGION_NONE;
  484|       |
  485|       |#ifdef VIPS_DEBUG
  486|       |	g_mutex_lock(&vips__global_lock);
  487|       |	vips__regions_all = g_slist_prepend(vips__regions_all, region);
  488|       |	printf("vips_region_init: %d regions in vips\n",
  489|       |		g_slist_length(vips__regions_all));
  490|       |	g_mutex_unlock(&vips__global_lock);
  491|       |#endif /*VIPS_DEBUG*/
  492|   300k|}
region.c:vips_region_generate:
 1611|   303k|{
 1612|   303k|	VipsImage *im = reg->im;
 1613|       |
 1614|   303k|	gboolean stop;
 1615|       |
 1616|       |	/* Start new sequence, if necessary.
 1617|       |	 */
 1618|   303k|	if (vips__region_start(reg))
  ------------------
  |  Branch (1618:6): [True: 7.39k, False: 296k]
  ------------------
 1619|  7.39k|		return -1;
 1620|       |
 1621|       |	/* Ask for evaluation.
 1622|       |	 */
 1623|   296k|	stop = FALSE;
  ------------------
  |  |  794|   296k|#define	FALSE	(0)
  ------------------
 1624|   296k|	if (im->generate_fn(reg, reg->seq, im->client1, im->client2, &stop))
  ------------------
  |  Branch (1624:6): [True: 68.5k, False: 227k]
  ------------------
 1625|  68.5k|		return -1;
 1626|   227k|	if (stop) {
  ------------------
  |  Branch (1626:6): [True: 0, False: 227k]
  ------------------
 1627|      0|		vips_error("vips_region_generate",
 1628|      0|			"%s", _("stop requested"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1629|      0|		return -1;
 1630|      0|	}
 1631|       |
 1632|   227k|	return 0;
 1633|   227k|}
region.c:vips_region_prepare_to_generate:
 1729|   104k|{
 1730|   104k|	VipsImage *im = reg->im;
 1731|   104k|	VipsPel *p;
 1732|       |
 1733|   104k|	if (!im->generate_fn) {
  ------------------
  |  Branch (1733:6): [True: 0, False: 104k]
  ------------------
 1734|      0|		vips_error("vips_region_prepare_to",
 1735|      0|			"%s", _("incomplete header"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1736|      0|		return -1;
 1737|      0|	}
 1738|       |
 1739|   104k|	if (vips_region_region(reg, dest, r, x, y))
  ------------------
  |  Branch (1739:6): [True: 0, False: 104k]
  ------------------
 1740|      0|		return -1;
 1741|       |
 1742|       |	/* Remember where reg is pointing now.
 1743|       |	 */
 1744|   104k|	p = VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top);
  ------------------
  |  |  227|   104k|	((R)->data + \
  |  |  228|   104k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   104k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   104k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   104k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   104k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   104k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1745|       |
 1746|       |	/* Run sequence into reg.
 1747|       |	 */
 1748|   104k|	if (vips_region_generate(reg, NULL))
  ------------------
  |  Branch (1748:6): [True: 17.3k, False: 87.5k]
  ------------------
 1749|  17.3k|		return -1;
 1750|       |
 1751|       |	/* The generate function may not have actually made any pixels ... it
 1752|       |	 * might just have redirected reg to point somewhere else. If it has,
 1753|       |	 * we need an extra copy operation.
 1754|       |	 */
 1755|  87.5k|	if (VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top) != p)
  ------------------
  |  |  227|  87.5k|	((R)->data + \
  |  |  228|  87.5k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  87.5k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  87.5k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  87.5k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  87.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  87.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1755:6): [True: 39.2k, False: 48.2k]
  ------------------
 1756|  39.2k|		vips_region_copy(reg, dest, r, x, y);
 1757|       |
 1758|  87.5k|	return 0;
 1759|   104k|}

vips__reorder_set_input:
  171|   187k|{
  172|   187k|	VipsReorder *reorder = vips_reorder_get(image);
  173|       |
  174|   187k|	int i;
  175|   187k|	int total;
  176|       |
  177|       |	/* We have to support being called more than once on the same image.
  178|       |	 * Two cases:
  179|       |	 *
  180|       |	 * 1. in the first call, no images were set ... we throw away
  181|       |	 * everything from the first call and try again. foreign can do this.
  182|       |	 *
  183|       |	 * 2. warn if the args were different and do nothing.
  184|       |	 */
  185|   187k|	if (reorder->source) {
  ------------------
  |  Branch (185:6): [True: 24.2k, False: 163k]
  ------------------
  186|  24.2k|		if (reorder->n_inputs == 0) {
  ------------------
  |  Branch (186:7): [True: 24.2k, False: 0]
  ------------------
  187|  24.2k|			reorder->n_sources = 0;
  188|  24.2k|			vips_reorder_free(reorder);
  189|  24.2k|		}
  190|      0|		else {
  191|      0|			for (i = 0; in[i]; i++)
  ------------------
  |  Branch (191:16): [True: 0, False: 0]
  ------------------
  192|      0|				if (i >= reorder->n_inputs ||
  ------------------
  |  Branch (192:9): [True: 0, False: 0]
  ------------------
  193|      0|					in[i] != reorder->input[i]) {
  ------------------
  |  Branch (193:6): [True: 0, False: 0]
  ------------------
  194|       |					/* Should never happen.
  195|       |					 */
  196|      0|					g_warning("vips__reorder_set_input: args differ\n");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  197|      0|					break;
  198|      0|				}
  199|       |
  200|      0|			return 0;
  201|      0|		}
  202|  24.2k|	}
  203|       |
  204|       |	/* Make a copy of the input array.
  205|       |	 */
  206|   322k|	for (i = 0; in[i]; i++)
  ------------------
  |  Branch (206:14): [True: 134k, False: 187k]
  ------------------
  207|   134k|		;
  208|   187k|	reorder->n_inputs = i;
  209|   187k|	reorder->input = VIPS_ARRAY(NULL, reorder->n_inputs + 1, VipsImage *);
  ------------------
  |  |   72|   187k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   187k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   187k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   187k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   187k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|   187k|	reorder->score = VIPS_ARRAY(NULL, reorder->n_inputs, int);
  ------------------
  |  |   72|   187k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   187k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   187k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   187k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   187k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|   187k|	reorder->recomp_order = VIPS_ARRAY(NULL, reorder->n_inputs, int);
  ------------------
  |  |   72|   187k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   187k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   187k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   187k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   187k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|   187k|	if (!reorder->input)
  ------------------
  |  Branch (212:6): [True: 0, False: 187k]
  ------------------
  213|      0|		return -1;
  214|   187k|	if (reorder->n_inputs &&
  ------------------
  |  Branch (214:6): [True: 134k, False: 52.8k]
  ------------------
  215|   187k|		(!reorder->score ||
  ------------------
  |  Branch (215:4): [True: 0, False: 134k]
  ------------------
  216|   134k|			!reorder->recomp_order))
  ------------------
  |  Branch (216:4): [True: 0, False: 134k]
  ------------------
  217|      0|		return -1;
  218|       |
  219|   322k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (219:14): [True: 134k, False: 187k]
  ------------------
  220|   134k|		reorder->input[i] = in[i];
  221|   134k|		reorder->score[i] = 0;
  222|   134k|		reorder->recomp_order[i] = i;
  223|   134k|	}
  224|   187k|	reorder->input[i] = NULL;
  225|       |
  226|       |	/* Find the total number of source images -- this gives an upper bound
  227|       |	 * to the size of the unique source image array we will need.
  228|       |	 */
  229|   187k|	total = 0;
  230|   322k|	for (i = 0; i < reorder->n_inputs; i++)
  ------------------
  |  Branch (230:14): [True: 134k, False: 187k]
  ------------------
  231|   134k|		total += vips_reorder_get(reorder->input[i])->n_sources;
  232|       |
  233|       |	/* No source images means this must itself be a source image, so it has
  234|       |	 * a source image of itself.
  235|       |	 */
  236|   187k|	total = VIPS_MAX(1, total);
  ------------------
  |  |   54|   187k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 59.1k, False: 128k]
  |  |  ------------------
  ------------------
  237|       |
  238|   187k|	reorder->source = VIPS_ARRAY(NULL, total + 1, VipsImage *);
  ------------------
  |  |   72|   187k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   187k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   187k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   187k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   187k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|   187k|	reorder->cumulative_margin = VIPS_ARRAY(NULL, total, int);
  ------------------
  |  |   72|   187k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   187k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   187k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   187k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   187k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|   187k|	if (!reorder->source ||
  ------------------
  |  Branch (240:6): [True: 0, False: 187k]
  ------------------
  241|   187k|		!reorder->cumulative_margin)
  ------------------
  |  Branch (241:3): [True: 0, False: 187k]
  ------------------
  242|      0|		return -1;
  243|       |
  244|       |	/* Copy source images over, removing duplicates. If we find a
  245|       |	 * duplicate, we have a reordering opportunity, and we adjust the
  246|       |	 * scores of the two images containing the dupe.
  247|       |	 */
  248|   322k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (248:14): [True: 134k, False: 187k]
  ------------------
  249|   134k|		VipsReorder *input = vips_reorder_get(reorder->input[i]);
  250|       |
  251|   134k|		int j;
  252|       |
  253|   263k|		for (j = 0; j < input->n_sources; j++) {
  ------------------
  |  Branch (253:15): [True: 128k, False: 134k]
  ------------------
  254|   128k|			int k;
  255|       |
  256|       |			/* Search for dupe.
  257|       |			 */
  258|   128k|			for (k = 0; k < reorder->n_sources; k++)
  ------------------
  |  Branch (258:16): [True: 0, False: 128k]
  ------------------
  259|      0|				if (reorder->source[k] == input->source[j])
  ------------------
  |  Branch (259:9): [True: 0, False: 0]
  ------------------
  260|      0|					break;
  261|       |
  262|   128k|			if (k < reorder->n_sources) {
  ------------------
  |  Branch (262:8): [True: 0, False: 128k]
  ------------------
  263|       |				/* Found a dupe. Does this new use of
  264|       |				 * input->source[j] have a larger or smaller
  265|       |				 * margin? Adjust the score to reflect the
  266|       |				 * change, note the new max.
  267|       |				 */
  268|      0|				reorder->score[i] +=
  269|      0|					input->cumulative_margin[j] -
  270|      0|					reorder->cumulative_margin[k];
  271|       |
  272|      0|				reorder->cumulative_margin[k] = VIPS_MAX(
  ------------------
  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  273|      0|					reorder->cumulative_margin[k],
  274|      0|					input->cumulative_margin[j]);
  275|      0|			}
  276|   128k|			else {
  277|       |				/* No dupe, just add to the table.
  278|       |				 */
  279|   128k|				reorder->source[reorder->n_sources] =
  280|   128k|					input->source[j];
  281|   128k|				reorder->cumulative_margin[reorder->n_sources] =
  282|   128k|					input->cumulative_margin[j];
  283|   128k|				reorder->n_sources += 1;
  284|   128k|			}
  285|   128k|		}
  286|   134k|	}
  287|       |
  288|       |	/* Sort recomp_order by score. qsort_r() is a GNU libc thing, don't use
  289|       |	 * it.
  290|       |	 */
  291|   187k|	if (reorder->n_inputs > 1)
  ------------------
  |  Branch (291:6): [True: 0, False: 187k]
  ------------------
  292|       |#if GLIB_CHECK_VERSION(2, 82, 0)
  293|       |		g_sort_array
  294|       |#else
  295|      0|		g_qsort_with_data
  296|      0|#endif
  297|      0|			(reorder->recomp_order,
  298|      0|				reorder->n_inputs,
  299|      0|				sizeof(int),
  300|      0|				vips_reorder_compare_score, reorder);
  301|       |
  302|       |	/* No sources ... make one, us!
  303|       |	 */
  304|   187k|	if (reorder->n_inputs == 0) {
  ------------------
  |  Branch (304:6): [True: 52.8k, False: 134k]
  ------------------
  305|  52.8k|		reorder->source[0] = image;
  306|  52.8k|		reorder->cumulative_margin[0] = 0;
  307|  52.8k|		reorder->n_sources = 1;
  308|  52.8k|	}
  309|       |
  310|       |#ifdef DEBUG
  311|       |	vips_reorder_print(reorder);
  312|       |#endif /*DEBUG*/
  313|       |
  314|   187k|	return 0;
  315|   187k|}
vips_reorder_prepare_many:
  335|  20.6k|{
  336|  20.6k|	VipsReorder *reorder = vips_reorder_get(image);
  337|       |
  338|  20.6k|	int i;
  339|       |
  340|  31.4k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (340:14): [True: 20.6k, False: 10.7k]
  ------------------
  341|  20.6k|		g_assert(regions[i]);
  ------------------
  |  |  166|  20.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  20.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  20.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|  20.6k|		if (vips_region_prepare(
  ------------------
  |  Branch (343:7): [True: 9.92k, False: 10.7k]
  ------------------
  344|  20.6k|				regions[reorder->recomp_order[i]], r))
  345|  9.92k|			return -1;
  346|  20.6k|	}
  347|       |
  348|  10.7k|	return 0;
  349|  20.6k|}
vips__reorder_clear:
  379|  6.27k|{
  380|  6.27k|	g_object_set_qdata(G_OBJECT(image),
  ------------------
  |  |   51|  6.27k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  6.27k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  6.27k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|  6.27k|		vips__image_reorder_quark, NULL);
  382|  6.27k|}
vips__reorder_init:
  386|      2|{
  387|      2|	if (!vips__image_reorder_quark)
  ------------------
  |  Branch (387:6): [True: 2, False: 0]
  ------------------
  388|      2|		vips__image_reorder_quark =
  389|      2|			g_quark_from_static_string("vips-image-reorder");
  390|      2|}
reorder.c:vips_reorder_get:
  136|   478k|{
  137|   478k|	VipsReorder *reorder;
  138|       |
  139|   478k|	if ((reorder = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|   478k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   478k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   478k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (139:6): [True: 308k, False: 169k]
  ------------------
  140|   478k|			 vips__image_reorder_quark)))
  141|   308k|		return reorder;
  142|       |
  143|   169k|	reorder = VIPS_NEW(NULL, VipsReorder);
  ------------------
  |  |   70|   169k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   169k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   169k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   169k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   169k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|   169k|	reorder->image = image;
  145|   169k|	reorder->n_inputs = 0;
  146|   169k|	reorder->input = NULL;
  147|   169k|	reorder->score = NULL;
  148|   169k|	reorder->recomp_order = NULL;
  149|   169k|	reorder->n_sources = 0;
  150|   169k|	reorder->source = NULL;
  151|   169k|	reorder->cumulative_margin = NULL;
  152|       |
  153|   169k|	g_object_set_qdata_full(G_OBJECT(image), vips__image_reorder_quark,
  ------------------
  |  |   51|   169k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   169k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   169k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|   169k|		reorder, (GDestroyNotify) vips_reorder_destroy);
  155|       |
  156|   169k|	return reorder;
  157|   478k|}
reorder.c:vips_reorder_destroy:
  129|   169k|{
  130|   169k|	vips_reorder_free(reorder);
  131|   169k|	VIPS_FREE(reorder);
  ------------------
  |  |   50|   169k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   169k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   169k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   169k|	{ \
  |  |  |  |   43|   169k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 169k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   169k|			(void) F((S)); \
  |  |  |  |   45|   169k|			(S) = 0; \
  |  |  |  |   46|   169k|		} \
  |  |  |  |   47|   169k|	} \
  |  |  |  |   48|   169k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   169k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|   169k|}
reorder.c:vips_reorder_free:
  115|   193k|{
  116|       |	/* We free explicitly, rather than using VIPS_ARRAY(image, ...), since
  117|       |	 * we need to make sure these pointers are valid to this point in the
  118|       |	 * close cycle.
  119|       |	 */
  120|   193k|	VIPS_FREE(reorder->input);
  ------------------
  |  |   50|   193k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   193k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   193k|	{ \
  |  |  |  |   43|   193k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 187k, False: 6.22k]
  |  |  |  |  ------------------
  |  |  |  |   44|   187k|			(void) F((S)); \
  |  |  |  |   45|   187k|			(S) = 0; \
  |  |  |  |   46|   187k|		} \
  |  |  |  |   47|   193k|	} \
  |  |  |  |   48|   193k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|   193k|	VIPS_FREE(reorder->score);
  ------------------
  |  |   50|   193k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   193k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   193k|	{ \
  |  |  |  |   43|   193k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 134k, False: 59.0k]
  |  |  |  |  ------------------
  |  |  |  |   44|   134k|			(void) F((S)); \
  |  |  |  |   45|   134k|			(S) = 0; \
  |  |  |  |   46|   134k|		} \
  |  |  |  |   47|   193k|	} \
  |  |  |  |   48|   193k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|   193k|	VIPS_FREE(reorder->recomp_order);
  ------------------
  |  |   50|   193k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   193k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   193k|	{ \
  |  |  |  |   43|   193k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 134k, False: 59.0k]
  |  |  |  |  ------------------
  |  |  |  |   44|   134k|			(void) F((S)); \
  |  |  |  |   45|   134k|			(S) = 0; \
  |  |  |  |   46|   134k|		} \
  |  |  |  |   47|   193k|	} \
  |  |  |  |   48|   193k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|   193k|	VIPS_FREE(reorder->source);
  ------------------
  |  |   50|   193k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   193k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   193k|	{ \
  |  |  |  |   43|   193k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 187k, False: 6.22k]
  |  |  |  |  ------------------
  |  |  |  |   44|   187k|			(void) F((S)); \
  |  |  |  |   45|   187k|			(S) = 0; \
  |  |  |  |   46|   187k|		} \
  |  |  |  |   47|   193k|	} \
  |  |  |  |   48|   193k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|   193k|	VIPS_FREE(reorder->cumulative_margin);
  ------------------
  |  |   50|   193k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   193k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   193k|	{ \
  |  |  |  |   43|   193k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 187k, False: 6.22k]
  |  |  |  |  ------------------
  |  |  |  |   44|   187k|			(void) F((S)); \
  |  |  |  |   45|   187k|			(S) = 0; \
  |  |  |  |   46|   187k|		} \
  |  |  |  |   47|   193k|	} \
  |  |  |  |   48|   193k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|   193k|}

vips_sbuf_new_from_source:
  113|  8.77k|{
  114|  8.77k|	VipsSbuf *sbuf;
  115|       |
  116|  8.77k|	g_assert(source);
  ------------------
  |  |  166|  8.77k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.77k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.77k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|       |
  118|  8.77k|	sbuf = VIPS_SBUF(g_object_new(VIPS_TYPE_SBUF,
  ------------------
  |  |   46|  8.77k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  8.77k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  8.77k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  8.77k|		VIPS_TYPE_SBUF, VipsSbuf))
  ------------------
  119|  8.77k|		"input", source,
  120|  8.77k|		NULL));
  121|       |
  122|  8.77k|	if (vips_object_build(VIPS_OBJECT(sbuf))) {
  ------------------
  |  |  433|  8.77k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  8.77k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  8.77k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (122:6): [True: 0, False: 8.77k]
  ------------------
  123|      0|		VIPS_UNREF(sbuf);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      0|		return NULL;
  125|      0|	}
  126|       |
  127|  8.77k|	return sbuf;
  128|  8.77k|}
vips_sbuf_getc:
  189|  16.2k|{
  190|  16.2k|	if (sbuf->read_point == sbuf->chars_in_buffer &&
  ------------------
  |  Branch (190:6): [True: 16.2k, False: 0]
  ------------------
  191|  16.2k|		vips_sbuf_refill(sbuf) <= 0)
  ------------------
  |  Branch (191:3): [True: 6.13k, False: 10.0k]
  ------------------
  192|  6.13k|		return -1;
  193|       |
  194|  16.2k|	g_assert(sbuf->read_point < sbuf->chars_in_buffer);
  ------------------
  |  |  166|  16.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  16.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|       |
  196|  10.0k|	return sbuf->input_buffer[sbuf->read_point++];
  197|  16.2k|}
vips_sbuf_require:
  247|    651|{
  248|    651|	g_assert(require < VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |  166|    651|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|    651|	g_assert(sbuf->chars_in_buffer >= 0);
  ------------------
  |  |  166|    651|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    651|	g_assert(sbuf->chars_in_buffer <= VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |  166|    651|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|    651|	g_assert(sbuf->read_point >= 0);
  ------------------
  |  |  166|    651|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|    651|	g_assert(sbuf->read_point <= sbuf->chars_in_buffer);
  ------------------
  |  |  166|    651|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|       |
  254|    651|	VIPS_DEBUG_MSG("vips_sbuf_require: %d\n", require);
  ------------------
  |  |   47|    651|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    651|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    651|	{ \
  |  |   49|    651|		; \
  |  |   50|    651|	} \
  |  |   51|    651|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    651|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|       |
  256|    651|	if (sbuf->read_point + require > sbuf->chars_in_buffer) {
  ------------------
  |  Branch (256:6): [True: 651, False: 0]
  ------------------
  257|       |		/* Areas can overlap, so we must memmove().
  258|       |		 */
  259|    651|		memmove(sbuf->input_buffer,
  260|    651|			sbuf->input_buffer + sbuf->read_point,
  261|    651|			sbuf->chars_in_buffer - sbuf->read_point);
  262|    651|		sbuf->chars_in_buffer -= sbuf->read_point;
  263|    651|		sbuf->read_point = 0;
  264|       |
  265|  1.12k|		while (require > sbuf->chars_in_buffer) {
  ------------------
  |  Branch (265:10): [True: 653, False: 469]
  ------------------
  266|    653|			unsigned char *to = sbuf->input_buffer +
  267|    653|				sbuf->chars_in_buffer;
  268|    653|			int space_available =
  269|    653|				VIPS_SBUF_BUFFER_SIZE -
  ------------------
  |  |   59|    653|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  270|    653|				sbuf->chars_in_buffer;
  271|    653|			gint64 bytes_read;
  272|       |
  273|    653|			if ((bytes_read = vips_source_read(sbuf->source,
  ------------------
  |  Branch (273:8): [True: 0, False: 653]
  ------------------
  274|    653|					 to, space_available)) < 0)
  275|      0|				return -1;
  276|    653|			if (bytes_read == 0) {
  ------------------
  |  Branch (276:8): [True: 182, False: 471]
  ------------------
  277|    182|				vips_error(
  278|    182|					vips_connection_nick(VIPS_CONNECTION(
  ------------------
  |  |   48|    182|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    182|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    182|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|    182|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  279|    182|						sbuf->source)),
  280|    182|					"%s", _("end of file"));
  ------------------
  |  |   30|    182|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    182|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  281|    182|				return -1;
  282|    182|			}
  283|       |
  284|    471|			to[bytes_read] = '\0';
  285|    471|			sbuf->chars_in_buffer += bytes_read;
  286|    471|		}
  287|    651|	}
  288|       |
  289|    469|	return 0;
  290|    651|}
vips_sbuf_get_line:
  344|  14.7k|{
  345|  14.7k|	int write_point;
  346|  14.7k|	int space_remaining;
  347|  14.7k|	int ch;
  348|       |
  349|  14.7k|	VIPS_DEBUG_MSG("vips_sbuf_get_line:\n");
  ------------------
  |  |   47|  14.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  14.7k|	{ \
  |  |   49|  14.7k|		; \
  |  |   50|  14.7k|	} \
  |  |   51|  14.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|       |
  351|  14.7k|	write_point = 0;
  352|  14.7k|	space_remaining = VIPS_SBUF_BUFFER_SIZE;
  ------------------
  |  |   59|  14.7k|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  353|       |
  354|  3.23M|	while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 &&
  ------------------
  |  |  109|  3.23M|#define VIPS_SBUF_GETC(S) ( \
  |  |  110|  3.23M|	(S)->read_point < (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (110:2): [True: 3.22M, False: 15.4k]
  |  |  ------------------
  |  |  111|  3.23M|		? (S)->input_buffer[(S)->read_point++] \
  |  |  112|  3.23M|		: vips_sbuf_getc(S))
  ------------------
  |  Branch (354:9): [True: 3.23M, False: 6.09k]
  ------------------
  355|  3.23M|		ch != '\n' &&
  ------------------
  |  Branch (355:3): [True: 3.22M, False: 8.23k]
  ------------------
  356|  3.23M|		space_remaining > 0) {
  ------------------
  |  Branch (356:3): [True: 3.22M, False: 374]
  ------------------
  357|  3.22M|		sbuf->line[write_point] = ch;
  358|  3.22M|		write_point += 1;
  359|  3.22M|		space_remaining -= 1;
  360|  3.22M|	}
  361|  14.7k|	sbuf->line[write_point] = '\0';
  362|       |
  363|       |	/* If we hit EOF immediately, return EOF.
  364|       |	 */
  365|  14.7k|	if (ch == -1 &&
  ------------------
  |  Branch (365:6): [True: 6.09k, False: 8.60k]
  ------------------
  366|  14.7k|		write_point == 0)
  ------------------
  |  Branch (366:3): [True: 306, False: 5.79k]
  ------------------
  367|    306|		return NULL;
  368|       |
  369|       |	/* If the final char in the buffer is \r, this is probably a DOS file
  370|       |	 * and we should remove that too.
  371|       |	 *
  372|       |	 * There's a chance this could incorrectly remove \r in very long
  373|       |	 * lines, but ignore this.
  374|       |	 */
  375|  14.3k|	if (write_point > 0 &&
  ------------------
  |  Branch (375:6): [True: 13.7k, False: 620]
  ------------------
  376|  14.3k|		sbuf->line[write_point - 1] == '\r')
  ------------------
  |  Branch (376:3): [True: 499, False: 13.2k]
  ------------------
  377|    499|		sbuf->line[write_point - 1] = '\0';
  378|       |	/* If we filled the output line without seeing \n, keep going to the
  379|       |	 * next \n.
  380|       |	 */
  381|  14.3k|	if (ch != '\n' &&
  ------------------
  |  Branch (381:6): [True: 6.16k, False: 8.23k]
  ------------------
  382|  14.3k|		space_remaining == 0) {
  ------------------
  |  Branch (382:3): [True: 377, False: 5.78k]
  ------------------
  383|  3.34M|		while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 &&
  ------------------
  |  |  109|  3.34M|#define VIPS_SBUF_GETC(S) ( \
  |  |  110|  3.34M|	(S)->read_point < (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (110:2): [True: 3.34M, False: 793]
  |  |  ------------------
  |  |  111|  3.34M|		? (S)->input_buffer[(S)->read_point++] \
  |  |  112|  3.34M|		: vips_sbuf_getc(S))
  ------------------
  |  Branch (383:10): [True: 3.34M, False: 33]
  ------------------
  384|  3.34M|			ch != '\n')
  ------------------
  |  Branch (384:4): [True: 3.34M, False: 344]
  ------------------
  385|  3.34M|			;
  386|    377|	}
  387|       |
  388|  14.3k|	VIPS_DEBUG_MSG("    %s\n", sbuf->line);
  ------------------
  |  |   47|  14.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  14.3k|	{ \
  |  |   49|  14.3k|		; \
  |  |   50|  14.3k|	} \
  |  |   51|  14.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  389|       |
  390|  14.3k|	return (const char *) sbuf->line;
  391|  14.7k|}
sbuf.c:vips_sbuf_class_init:
   77|      1|{
   78|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|       |
   81|      1|	gobject_class->set_property = vips_object_set_property;
   82|      1|	gobject_class->get_property = vips_object_get_property;
   83|       |
   84|      1|	object_class->nickname = "sbuf";
   85|      1|	object_class->description = _("buffered source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   86|       |
   87|      1|	VIPS_ARG_OBJECT(class, "input", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Source to load from"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsSbuf, source),
   92|      1|		VIPS_TYPE_SOURCE);
   93|      1|}
sbuf.c:vips_sbuf_init:
   97|  8.77k|{
   98|  8.77k|	sbuf->read_point = 0;
   99|  8.77k|	sbuf->chars_in_buffer = 0;
  100|  8.77k|	sbuf->input_buffer[0] = '\0';
  101|  8.77k|}
sbuf.c:vips_sbuf_refill:
  152|  16.2k|{
  153|  16.2k|	gint64 bytes_read;
  154|       |
  155|  16.2k|	VIPS_DEBUG_MSG("vips_sbuf_refill:\n");
  ------------------
  |  |   47|  16.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  16.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  16.2k|	{ \
  |  |   49|  16.2k|		; \
  |  |   50|  16.2k|	} \
  |  |   51|  16.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  16.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|       |
  157|       |	/* We should not discard any unread bytes.
  158|       |	 */
  159|  16.2k|	g_assert(sbuf->read_point == sbuf->chars_in_buffer);
  ------------------
  |  |  166|  16.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  16.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  16.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|       |
  161|  16.2k|	bytes_read = vips_source_read(sbuf->source,
  162|  16.2k|		sbuf->input_buffer, VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |   59|  16.2k|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  163|  16.2k|	if (bytes_read == -1)
  ------------------
  |  Branch (163:6): [True: 0, False: 16.2k]
  ------------------
  164|      0|		return -1;
  165|       |
  166|  16.2k|	sbuf->read_point = 0;
  167|  16.2k|	sbuf->chars_in_buffer = bytes_read;
  168|       |
  169|       |	/* Always add a null byte so we can use strchr() etc. on lines. This is
  170|       |	 * safe because input_buffer is VIPS_SBUF_BUFFER_SIZE + 1 bytes.
  171|       |	 */
  172|  16.2k|	sbuf->input_buffer[bytes_read] = '\0';
  173|       |
  174|  16.2k|	return bytes_read;
  175|  16.2k|}

vips_semaphore_init:
   60|   192k|{
   61|   192k|	s->v = v;
   62|   192k|	s->name = name;
   63|   192k|	s->mutex = vips_g_mutex_new();
   64|   192k|	s->cond = vips_g_cond_new();
   65|   192k|}
vips_semaphore_destroy:
   69|   192k|{
   70|   192k|	VIPS_FREEF(vips_g_mutex_free, s->mutex);
  ------------------
  |  |   41|   192k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   192k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   192k|	{ \
  |  |   43|   192k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 192k, False: 0]
  |  |  ------------------
  |  |   44|   192k|			(void) F((S)); \
  |  |   45|   192k|			(S) = 0; \
  |  |   46|   192k|		} \
  |  |   47|   192k|	} \
  |  |   48|   192k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   192k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|   192k|	VIPS_FREEF(vips_g_cond_free, s->cond);
  ------------------
  |  |   41|   192k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   192k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   192k|	{ \
  |  |   43|   192k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 192k, False: 0]
  |  |  ------------------
  |  |   44|   192k|			(void) F((S)); \
  |  |   45|   192k|			(S) = 0; \
  |  |   46|   192k|		} \
  |  |   47|   192k|	} \
  |  |   48|   192k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   192k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|   192k|}
vips_semaphore_upn:
   79|   294k|{
   80|   294k|	int value_after_op;
   81|       |
   82|   294k|	g_mutex_lock(s->mutex);
   83|   294k|	s->v += n;
   84|   294k|	value_after_op = s->v;
   85|       |
   86|       |	/* If we are only incrementing by one, we only need to wake a single
   87|       |	 * thread. If we are incrementing by a lot, we must wake all threads.
   88|       |	 */
   89|   294k|	if (n == 1)
  ------------------
  |  Branch (89:6): [True: 216k, False: 77.6k]
  ------------------
   90|   216k|		g_cond_signal(s->cond);
   91|  77.6k|	else
   92|  77.6k|		g_cond_broadcast(s->cond);
   93|   294k|	g_mutex_unlock(s->mutex);
   94|       |
   95|       |#ifdef DEBUG_IO
   96|       |	printf("vips_semaphore_upn(\"%s\",%d) = %d\n",
   97|       |		s->name, n, value_after_op);
   98|       |	if (value_after_op > 1)
   99|       |		vips_error("vips_semaphore_upn", "up over 1!");
  100|       |#endif /*DEBUG_IO*/
  101|       |
  102|   294k|	return value_after_op;
  103|   294k|}
vips_semaphore_up:
  109|   139k|{
  110|   139k|	return vips_semaphore_upn(s, 1);
  111|   139k|}
vips_semaphore_downn:
  158|  59.2k|{
  159|  59.2k|	g_assert(n >= 0);
  ------------------
  |  |  166|  59.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  59.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  59.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|       |
  161|  59.2k|	return vips__semaphore_downn_until(s, n, -1);
  162|  59.2k|}
vips_semaphore_down:
  168|   113k|{
  169|   113k|	return vips__semaphore_downn_until(s, 1, -1);
  170|   113k|}
vips_semaphore_down_timeout:
  178|      6|{
  179|      6|	gint64 end_time = g_get_monotonic_time() + timeout;
  180|       |
  181|      6|	return vips__semaphore_downn_until(s, 1, end_time);
  182|      6|}
semaphore.c:vips__semaphore_downn_until:
  118|   172k|{
  119|   172k|	int value_after_op;
  120|       |
  121|   172k|	VIPS_GATE_START("vips__semaphore_downn_until: wait");
  ------------------
  |  |   41|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   172k|	{ \
  |  |   43|   172k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 172k]
  |  |  ------------------
  |  |   44|   172k|			vips__thread_gate_start(NAME); \
  |  |   45|   172k|	} \
  |  |   46|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|       |
  123|   172k|	g_mutex_lock(s->mutex);
  124|       |
  125|   290k|	while (s->v < n) {
  ------------------
  |  Branch (125:9): [True: 117k, False: 172k]
  ------------------
  126|   117k|		if (end_time == -1)
  ------------------
  |  Branch (126:7): [True: 117k, False: 5]
  ------------------
  127|   117k|			vips__worker_cond_wait(s->cond, s->mutex);
  128|      5|		else if (!g_cond_wait_until(s->cond, s->mutex, end_time)) {
  ------------------
  |  Branch (128:12): [True: 0, False: 5]
  ------------------
  129|       |			/* timeout has passed.
  130|       |			 */
  131|      0|			g_mutex_unlock(s->mutex);
  132|       |
  133|      0|			VIPS_GATE_STOP("vips__semaphore_downn_until: wait");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      0|			return -1;
  135|      0|		}
  136|   117k|	}
  137|       |
  138|   172k|	s->v -= n;
  139|   172k|	value_after_op = s->v;
  140|       |
  141|   172k|	g_mutex_unlock(s->mutex);
  142|       |
  143|       |#ifdef DEBUG_IO
  144|       |	printf("vips__semaphore_downn_until(\"%s\",%d): %d\n",
  145|       |		s->name, n, value_after_op);
  146|       |#endif /*DEBUG_IO*/
  147|       |
  148|   172k|	VIPS_GATE_STOP("vips__semaphore_downn_until: wait");
  ------------------
  |  |   49|   172k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   172k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   172k|	{ \
  |  |   51|   172k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 172k]
  |  |  ------------------
  |  |   52|   172k|			vips__thread_gate_stop(NAME); \
  |  |   53|   172k|	} \
  |  |   54|   172k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   172k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|       |
  150|   172k|	return value_after_op;
  151|   172k|}

vips_sink_base_init:
  359|  25.9k|{
  360|       |	/* Always clear kill before we start looping. See the
  361|       |	 * call to vips_image_iskilled() below.
  362|       |	 */
  363|  25.9k|	vips_image_set_kill(image, FALSE);
  ------------------
  |  |  794|  25.9k|#define	FALSE	(0)
  ------------------
  364|       |
  365|  25.9k|	sink_base->im = image;
  366|  25.9k|	sink_base->x = 0;
  367|  25.9k|	sink_base->y = 0;
  368|       |
  369|  25.9k|	vips_get_tile_size(image,
  370|  25.9k|		&sink_base->tile_width, &sink_base->tile_height,
  371|  25.9k|		&sink_base->n_lines);
  372|       |
  373|  25.9k|	sink_base->processed = 0;
  374|  25.9k|}
vips_sink_base_progress:
  430|  13.9k|{
  431|  13.9k|	SinkBase *sink_base = (SinkBase *) a;
  432|       |
  433|  13.9k|	VIPS_DEBUG_MSG("vips_sink_base_progress:\n");
  ------------------
  |  |   47|  13.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  13.9k|	{ \
  |  |   49|  13.9k|		; \
  |  |   50|  13.9k|	} \
  |  |   51|  13.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|       |
  435|       |	/* Trigger any eval callbacks on our source image and
  436|       |	 * check for errors.
  437|       |	 */
  438|  13.9k|	vips_image_eval(sink_base->im, sink_base->processed);
  439|  13.9k|	if (vips_image_iskilled(sink_base->im))
  ------------------
  |  Branch (439:6): [True: 0, False: 13.9k]
  ------------------
  440|      0|		return -1;
  441|       |
  442|  13.9k|	return 0;
  443|  13.9k|}

vips_sink_disc:
  509|  14.8k|{
  510|  14.8k|	Write write;
  511|  14.8k|	int result;
  512|       |
  513|  14.8k|	vips_image_preeval(im);
  514|       |
  515|  14.8k|	write_init(&write, im, write_fn, a);
  516|       |
  517|  14.8k|	result = 0;
  518|  14.8k|	if (!write.buf ||
  ------------------
  |  Branch (518:6): [True: 0, False: 14.8k]
  ------------------
  519|  14.8k|		!write.buf_back ||
  ------------------
  |  Branch (519:3): [True: 0, False: 14.8k]
  ------------------
  520|  14.8k|		wbuffer_position(write.buf, 0, write.sink_base.n_lines) ||
  ------------------
  |  Branch (520:3): [True: 0, False: 14.8k]
  ------------------
  521|  14.8k|		vips_threadpool_run(im,
  ------------------
  |  Branch (521:3): [True: 7.54k, False: 7.30k]
  ------------------
  522|  14.8k|			write_thread_state_new,
  523|  14.8k|			wbuffer_allocate_fn,
  524|  14.8k|			wbuffer_work_fn,
  525|  14.8k|			vips_sink_base_progress,
  526|  14.8k|			&write))
  527|  7.54k|		result = -1;
  528|       |
  529|       |	/* Just before allocate signalled stop, it set write.buf writing. We
  530|       |	 * need to wait for this write to finish.
  531|       |	 *
  532|       |	 * We can't just free the buffers (which will wait for the bg threads
  533|       |	 * to finish), since the bg thread might see the kill before it gets a
  534|       |	 * chance to write.
  535|       |	 *
  536|       |	 * If the pool exited with an error, write.buf might not have been
  537|       |	 * started (if the allocate failed), and in any case, we don't care if
  538|       |	 * the final write went through or not.
  539|       |	 */
  540|  14.8k|	if (!result)
  ------------------
  |  Branch (540:6): [True: 7.30k, False: 7.54k]
  ------------------
  541|  7.30k|		vips_semaphore_down(&write.buf->done);
  542|       |
  543|  14.8k|	vips_image_posteval(im);
  544|       |
  545|       |	/* The final write might have failed, pick up any error code.
  546|       |	 */
  547|  14.8k|	result |= write_check_error(&write);
  548|       |
  549|  14.8k|	write_free(&write);
  550|       |
  551|  14.8k|	vips_image_minimise_all(im);
  552|       |
  553|  14.8k|	return result;
  554|  14.8k|}
sinkdisc.c:write_thread_state_class_init:
  133|      1|{
  134|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|       |
  136|      1|	object_class->nickname = "writethreadstate";
  137|      1|	object_class->description = _("per-thread state for sinkdisc");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|      1|}
sinkdisc.c:write_thread_state_init:
  142|  14.8k|{
  143|  14.8k|	state->buf = NULL;
  144|  14.8k|}
sinkdisc.c:write_init:
  456|  14.8k|{
  457|  14.8k|	vips_sink_base_init(&write->sink_base, image);
  458|       |
  459|  14.8k|	write->buf = wbuffer_new(write);
  460|  14.8k|	write->buf_back = wbuffer_new(write);
  461|  14.8k|	write->write_fn = write_fn;
  462|  14.8k|	write->a = a;
  463|  14.8k|}
sinkdisc.c:wbuffer_new:
  227|  29.7k|{
  228|  29.7k|	WriteBuffer *wbuffer;
  229|       |
  230|  29.7k|	if (!(wbuffer = VIPS_NEW(NULL, WriteBuffer)))
  ------------------
  |  |   70|  29.7k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  29.7k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  29.7k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  29.7k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  29.7k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (230:6): [True: 0, False: 29.7k]
  ------------------
  231|      0|		return NULL;
  232|  29.7k|	wbuffer->write = write;
  233|  29.7k|	wbuffer->region = NULL;
  234|  29.7k|	vips_semaphore_init(&wbuffer->go, 0, "go");
  235|  29.7k|	vips_semaphore_init(&wbuffer->nwrite, 0, "nwrite");
  236|  29.7k|	vips_semaphore_init(&wbuffer->done, 0, "done");
  237|  29.7k|	vips_semaphore_init(&wbuffer->finish, 0, "finish");
  238|  29.7k|	wbuffer->write_errno = 0;
  239|  29.7k|	wbuffer->running = FALSE;
  ------------------
  |  |  794|  29.7k|#define	FALSE	(0)
  ------------------
  240|  29.7k|	wbuffer->kill = FALSE;
  ------------------
  |  |  794|  29.7k|#define	FALSE	(0)
  ------------------
  241|       |
  242|  29.7k|	if (!(wbuffer->region = vips_region_new(write->sink_base.im))) {
  ------------------
  |  Branch (242:6): [True: 0, False: 29.7k]
  ------------------
  243|      0|		wbuffer_free(wbuffer);
  244|      0|		return NULL;
  245|      0|	}
  246|       |
  247|       |	/* The worker threads need to be able to move the buffers around.
  248|       |	 */
  249|  29.7k|	vips__region_no_ownership(wbuffer->region);
  250|       |
  251|       |	/* Make this last (picks up parts of wbuffer on startup).
  252|       |	 */
  253|  29.7k|	if (vips_thread_execute("wbuffer", wbuffer_write_thread, wbuffer)) {
  ------------------
  |  Branch (253:6): [True: 0, False: 29.7k]
  ------------------
  254|      0|		wbuffer_free(wbuffer);
  255|      0|		return NULL;
  256|      0|	}
  257|       |
  258|  29.7k|	wbuffer->running = TRUE;
  ------------------
  |  |  798|  29.7k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  29.7k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  259|       |
  260|  29.7k|	return wbuffer;
  261|  29.7k|}
sinkdisc.c:wbuffer_free:
  156|  29.7k|{
  157|       |	/* Is there a thread running this region? Kill it!
  158|       |	 */
  159|  29.7k|	if (wbuffer->running) {
  ------------------
  |  Branch (159:6): [True: 29.7k, False: 0]
  ------------------
  160|  29.7k|		wbuffer->kill = TRUE;
  ------------------
  |  |  798|  29.7k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  29.7k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  161|  29.7k|		vips_semaphore_up(&wbuffer->go);
  162|       |
  163|  29.7k|		vips_semaphore_down(&wbuffer->finish);
  164|       |
  165|  29.7k|		VIPS_DEBUG_MSG("wbuffer_free:\n");
  ------------------
  |  |   47|  29.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  29.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  29.7k|	{ \
  |  |   49|  29.7k|		; \
  |  |   50|  29.7k|	} \
  |  |   51|  29.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  29.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|       |
  167|  29.7k|		wbuffer->running = FALSE;
  ------------------
  |  |  794|  29.7k|#define	FALSE	(0)
  ------------------
  168|  29.7k|	}
  169|       |
  170|  29.7k|	VIPS_UNREF(wbuffer->region);
  ------------------
  |  |   57|  29.7k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  29.7k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  29.7k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  29.7k|	{ \
  |  |  |  |   43|  29.7k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 29.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  29.7k|			(void) F((S)); \
  |  |  |  |   45|  29.7k|			(S) = 0; \
  |  |  |  |   46|  29.7k|		} \
  |  |  |  |   47|  29.7k|	} \
  |  |  |  |   48|  29.7k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  29.7k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|  29.7k|	vips_semaphore_destroy(&wbuffer->go);
  172|  29.7k|	vips_semaphore_destroy(&wbuffer->nwrite);
  173|  29.7k|	vips_semaphore_destroy(&wbuffer->done);
  174|  29.7k|	vips_semaphore_destroy(&wbuffer->finish);
  175|  29.7k|	g_free(wbuffer);
  176|  29.7k|}
sinkdisc.c:wbuffer_write_thread:
  198|  29.7k|{
  199|  29.7k|	WriteBuffer *wbuffer = (WriteBuffer *) data;
  200|       |
  201|  37.0k|	for (;;) {
  202|       |		/* Wait to be told to write.
  203|       |		 */
  204|  37.0k|		vips_semaphore_down(&wbuffer->go);
  205|       |
  206|  37.0k|		if (wbuffer->kill)
  ------------------
  |  Branch (206:7): [True: 29.7k, False: 7.30k]
  ------------------
  207|  29.7k|			break;
  208|       |
  209|       |		/* Now block until the last worker finishes on this buffer.
  210|       |		 */
  211|  7.30k|		vips_semaphore_downn(&wbuffer->nwrite, 0);
  212|       |
  213|  7.30k|		wbuffer_write(wbuffer);
  214|       |
  215|       |		/* Signal write complete.
  216|       |		 */
  217|  7.30k|		vips_semaphore_up(&wbuffer->done);
  218|  7.30k|	}
  219|       |
  220|       |	/* We are exiting: tell the main thread.
  221|       |	 */
  222|  29.7k|	vips_semaphore_up(&wbuffer->finish);
  223|  29.7k|}
sinkdisc.c:wbuffer_write:
  180|  7.30k|{
  181|  7.30k|	Write *write = wbuffer->write;
  182|       |
  183|  7.30k|	VIPS_DEBUG_MSG("wbuffer_write: %d bytes from wbuffer %p\n",
  ------------------
  |  |   47|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  7.30k|	{ \
  |  |   49|  7.30k|		; \
  |  |   50|  7.30k|	} \
  |  |   51|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|  7.30k|		wbuffer->region->bpl * wbuffer->area.height, wbuffer);
  185|       |
  186|  7.30k|	VIPS_GATE_START("wbuffer_write: work");
  ------------------
  |  |   41|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  7.30k|	{ \
  |  |   43|  7.30k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 7.30k]
  |  |  ------------------
  |  |   44|  7.30k|			vips__thread_gate_start(NAME); \
  |  |   45|  7.30k|	} \
  |  |   46|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|       |
  188|  7.30k|	wbuffer->write_errno = write->write_fn(wbuffer->region,
  189|  7.30k|		&wbuffer->area, write->a);
  190|       |
  191|  7.30k|	VIPS_GATE_STOP("wbuffer_write: work");
  ------------------
  |  |   49|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  7.30k|	{ \
  |  |   51|  7.30k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 7.30k]
  |  |  ------------------
  |  |   52|  7.30k|			vips__thread_gate_stop(NAME); \
  |  |   53|  7.30k|	} \
  |  |   54|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  7.30k|}
sinkdisc.c:wbuffer_position:
  291|  14.8k|{
  292|  14.8k|	VipsRect image, area;
  293|  14.8k|	int result;
  294|       |
  295|  14.8k|	image.left = 0;
  296|  14.8k|	image.top = 0;
  297|  14.8k|	image.width = wbuffer->write->sink_base.im->Xsize;
  298|  14.8k|	image.height = wbuffer->write->sink_base.im->Ysize;
  299|       |
  300|  14.8k|	area.left = 0;
  301|  14.8k|	area.top = top;
  302|  14.8k|	area.width = wbuffer->write->sink_base.im->Xsize;
  303|  14.8k|	area.height = height;
  304|       |
  305|  14.8k|	vips_rect_intersectrect(&area, &image, &wbuffer->area);
  306|       |
  307|       |	/* The workers take turns to move the buffers.
  308|       |	 */
  309|  14.8k|	vips__region_take_ownership(wbuffer->region);
  310|       |
  311|  14.8k|	result = vips_region_buffer(wbuffer->region, &wbuffer->area);
  312|       |
  313|  14.8k|	vips__region_no_ownership(wbuffer->region);
  314|       |
  315|       |	/* This should be an exclusive buffer, hopefully.
  316|       |	 */
  317|  14.8k|	if (!result)
  ------------------
  |  Branch (317:6): [True: 14.8k, False: 0]
  ------------------
  318|  14.8k|		g_assert(!wbuffer->region->buffer->done);
  ------------------
  |  |  166|  14.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|       |
  320|  14.8k|	return result;
  321|  14.8k|}
sinkdisc.c:write_thread_state_new:
  148|  14.8k|{
  149|  14.8k|	return VIPS_THREAD_STATE(vips_object_new(
  ------------------
  |  |   60|  14.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  14.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  14.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  14.8k|		VIPS_TYPE_THREAD_STATE, VipsThreadState))
  ------------------
  150|  14.8k|		write_thread_state_get_type(),
  151|  14.8k|		vips_thread_state_set, im, a));
  152|  14.8k|}
sinkdisc.c:wbuffer_allocate_fn:
  330|  34.9k|{
  331|  34.9k|	WriteThreadState *wstate = (WriteThreadState *) state;
  332|  34.9k|	Write *write = (Write *) a;
  333|  34.9k|	SinkBase *sink_base = (SinkBase *) write;
  334|       |
  335|  34.9k|	VipsRect image;
  336|  34.9k|	VipsRect tile;
  337|       |
  338|  34.9k|	VIPS_DEBUG_MSG("wbuffer_allocate_fn:\n");
  ------------------
  |  |   47|  34.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  34.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  34.9k|	{ \
  |  |   49|  34.9k|		; \
  |  |   50|  34.9k|	} \
  |  |   51|  34.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  34.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|       |
  340|       |	/* Is the state x/y OK? New line or maybe new buffer or maybe even
  341|       |	 * all done.
  342|       |	 */
  343|  34.9k|	if (sink_base->x >= write->buf->area.width) {
  ------------------
  |  Branch (343:6): [True: 20.1k, False: 14.8k]
  ------------------
  344|  20.1k|		sink_base->x = 0;
  345|  20.1k|		sink_base->y += sink_base->tile_height;
  346|       |
  347|  20.1k|		if (sink_base->y >= VIPS_RECT_BOTTOM(&write->buf->area)) {
  ------------------
  |  |   49|  20.1k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (347:7): [True: 7.30k, False: 12.8k]
  ------------------
  348|  7.30k|			VIPS_DEBUG_MSG("wbuffer_allocate_fn: "
  ------------------
  |  |   47|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  7.30k|	{ \
  |  |   49|  7.30k|		; \
  |  |   50|  7.30k|	} \
  |  |   51|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|  7.30k|						   "finished top = %d, height = %d\n",
  350|  7.30k|				write->buf->area.top, write->buf->area.height);
  351|       |
  352|       |			/* Block until the write of the previous buffer
  353|       |			 * is done, then set write of this buffer going.
  354|       |			 */
  355|  7.30k|			if (wbuffer_flush(write)) {
  ------------------
  |  Branch (355:8): [True: 0, False: 7.30k]
  ------------------
  356|      0|				*stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  357|      0|				return -1;
  358|      0|			}
  359|       |
  360|       |			/* End of image?
  361|       |			 */
  362|  7.30k|			if (sink_base->y >= sink_base->im->Ysize) {
  ------------------
  |  Branch (362:8): [True: 7.30k, False: 0]
  ------------------
  363|  7.30k|				*stop = TRUE;
  ------------------
  |  |  798|  7.30k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.30k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  364|  7.30k|				return 0;
  365|  7.30k|			}
  366|       |
  367|  7.30k|			VIPS_DEBUG_MSG("wbuffer_allocate_fn: "
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      0|						   "starting top = %d, height = %d\n",
  369|      0|				sink_base->y, sink_base->n_lines);
  370|       |
  371|       |			/* Swap buffers.
  372|       |			 */
  373|      0|			VIPS_SWAP(WriteBuffer *, write->buf, write->buf_back);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|       |
  375|       |			/* Position buf at the new y.
  376|       |			 */
  377|      0|			if (wbuffer_position(write->buf,
  ------------------
  |  Branch (377:8): [True: 0, False: 0]
  ------------------
  378|      0|					sink_base->y, sink_base->n_lines)) {
  379|      0|				*stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  380|      0|				return -1;
  381|      0|			}
  382|       |
  383|       |			/* This will be the first tile of a new buffer ... mark this as a
  384|       |			 * good place to stall for a moment if we want to stress the
  385|       |			 * caching system. See threadpool.c.
  386|       |			 */
  387|      0|            state->stall = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  388|      0|		}
  389|  20.1k|	}
  390|       |
  391|       |	/* x, y and buf are good: save params for thread.
  392|       |	 */
  393|  27.6k|	image.left = 0;
  394|  27.6k|	image.top = 0;
  395|  27.6k|	image.width = sink_base->im->Xsize;
  396|  27.6k|	image.height = sink_base->im->Ysize;
  397|  27.6k|	tile.left = sink_base->x;
  398|  27.6k|	tile.top = sink_base->y;
  399|  27.6k|	tile.width = sink_base->tile_width;
  400|  27.6k|	tile.height = sink_base->tile_height;
  401|  27.6k|	vips_rect_intersectrect(&image, &tile, &state->pos);
  402|       |
  403|       |	/* The thread needs to know which buffer it's writing to.
  404|       |	 */
  405|  27.6k|	wstate->buf = write->buf;
  406|       |
  407|  27.6k|	VIPS_DEBUG_MSG("  thread %p allocated "
  ------------------
  |  |   47|  27.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  27.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  27.6k|	{ \
  |  |   49|  27.6k|		; \
  |  |   50|  27.6k|	} \
  |  |   51|  27.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  27.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  27.6k|				   "left = %d, top = %d, width = %d, height = %d\n",
  409|  27.6k|		g_thread_self(),
  410|  27.6k|		tile.left, tile.top, tile.width, tile.height);
  411|       |
  412|       |	/* Add to the number of writers on the buffer.
  413|       |	 */
  414|  27.6k|	vips_semaphore_upn(&write->buf->nwrite, -1);
  415|       |
  416|       |	/* Move state on.
  417|       |	 */
  418|  27.6k|	sink_base->x += sink_base->tile_width;
  419|       |
  420|       |	/* Add the number of pixels we've just allocated to progress.
  421|       |	 */
  422|  27.6k|	sink_base->processed += state->pos.width * state->pos.height;
  423|       |
  424|  27.6k|	return 0;
  425|  34.9k|}
sinkdisc.c:wbuffer_flush:
  267|  7.30k|{
  268|  7.30k|	VIPS_DEBUG_MSG("wbuffer_flush:\n");
  ------------------
  |  |   47|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  7.30k|	{ \
  |  |   49|  7.30k|		; \
  |  |   50|  7.30k|	} \
  |  |   51|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|       |
  270|       |	/* Block until the other buffer has been written. We have to do this
  271|       |	 * before we can set this buffer writing or we'll lose output ordering.
  272|       |	 */
  273|  7.30k|	if (write->buf->area.top > 0) {
  ------------------
  |  Branch (273:6): [True: 0, False: 7.30k]
  ------------------
  274|      0|		vips_semaphore_down(&write->buf_back->done);
  275|       |
  276|      0|		if (write_check_error(write))
  ------------------
  |  Branch (276:7): [True: 0, False: 0]
  ------------------
  277|      0|			return -1;
  278|      0|	}
  279|       |
  280|       |	/* Set the background writer going for this buffer.
  281|       |	 */
  282|  7.30k|	vips_semaphore_up(&write->buf->go);
  283|       |
  284|  7.30k|	return 0;
  285|  7.30k|}
sinkdisc.c:wbuffer_work_fn:
  431|  27.6k|{
  432|  27.6k|	WriteThreadState *wstate = (WriteThreadState *) state;
  433|       |
  434|  27.6k|	int result;
  435|       |
  436|  27.6k|	VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p, %d x %d\n",
  ------------------
  |  |   47|  27.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  27.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  27.6k|	{ \
  |  |   49|  27.6k|		; \
  |  |   50|  27.6k|	} \
  |  |   51|  27.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  27.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|  27.6k|		g_thread_self(),
  438|  27.6k|		state->pos.left, state->pos.top);
  439|       |
  440|  27.6k|	result = vips_region_prepare_to(state->reg, wstate->buf->region,
  441|  27.6k|		&state->pos, state->pos.left, state->pos.top);
  442|       |
  443|  27.6k|	VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p result = %d\n",
  ------------------
  |  |   47|  27.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  27.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  27.6k|	{ \
  |  |   49|  27.6k|		; \
  |  |   50|  27.6k|	} \
  |  |   51|  27.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  27.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  444|  27.6k|		g_thread_self(), result);
  445|       |
  446|       |	/* Tell the bg write thread we've left.
  447|       |	 */
  448|  27.6k|	vips_semaphore_upn(&wstate->buf->nwrite, 1);
  449|       |
  450|  27.6k|	return result;
  451|  27.6k|}
sinkdisc.c:write_check_error:
  103|  14.8k|{
  104|  14.8k|	if (write->buf->write_errno ||
  ------------------
  |  Branch (104:6): [True: 0, False: 14.8k]
  ------------------
  105|  14.8k|		write->buf_back->write_errno) {
  ------------------
  |  Branch (105:3): [True: 0, False: 14.8k]
  ------------------
  106|      0|		vips_error_system(write->buf->write_errno ?
  ------------------
  |  Branch (106:21): [True: 0, False: 0]
  ------------------
  107|      0|			write->buf->write_errno : write->buf_back->write_errno,
  108|      0|			"wbuffer_write", "%s", _("write failed"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  109|      0|		return -1;
  110|      0|	}
  111|       |
  112|  14.8k|	return 0;
  113|  14.8k|}
sinkdisc.c:write_free:
  467|  14.8k|{
  468|  14.8k|	VIPS_FREEF(wbuffer_free, write->buf);
  ------------------
  |  |   41|  14.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  14.8k|	{ \
  |  |   43|  14.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 14.8k, False: 0]
  |  |  ------------------
  |  |   44|  14.8k|			(void) F((S)); \
  |  |   45|  14.8k|			(S) = 0; \
  |  |   46|  14.8k|		} \
  |  |   47|  14.8k|	} \
  |  |   48|  14.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|  14.8k|	VIPS_FREEF(wbuffer_free, write->buf_back);
  ------------------
  |  |   41|  14.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  14.8k|	{ \
  |  |   43|  14.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 14.8k, False: 0]
  |  |  ------------------
  |  |   44|  14.8k|			(void) F((S)); \
  |  |   45|  14.8k|			(S) = 0; \
  |  |   46|  14.8k|		} \
  |  |   47|  14.8k|	} \
  |  |   48|  14.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|  14.8k|}

vips_sink_memory:
  325|  11.1k|{
  326|  11.1k|	SinkMemory memory;
  327|  11.1k|	int result;
  328|       |
  329|  11.1k|	if (sink_memory_init(&memory, image))
  ------------------
  |  Branch (329:6): [True: 0, False: 11.1k]
  ------------------
  330|      0|		return -1;
  331|       |
  332|  11.1k|	vips_image_preeval(image);
  333|       |
  334|  11.1k|	result = 0;
  335|  11.1k|	sink_memory_area_position(memory.area, 0, memory.sink_base.n_lines);
  336|  11.1k|	if (vips_threadpool_run(image,
  ------------------
  |  Branch (336:6): [True: 4.84k, False: 6.27k]
  ------------------
  337|  11.1k|			sink_memory_thread_state_new,
  338|  11.1k|			sink_memory_area_allocate_fn,
  339|  11.1k|			sink_memory_area_work_fn,
  340|  11.1k|			vips_sink_base_progress,
  341|  11.1k|			&memory))
  342|  4.84k|		result = -1;
  343|       |
  344|  11.1k|	vips_image_posteval(image);
  345|       |
  346|  11.1k|	sink_memory_free(&memory);
  347|       |
  348|  11.1k|	vips_image_minimise_all(image);
  349|       |
  350|  11.1k|	VIPS_DEBUG_MSG("vips_sink_memory: done\n");
  ------------------
  |  |   47|  11.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.1k|	{ \
  |  |   49|  11.1k|		; \
  |  |   50|  11.1k|	} \
  |  |   51|  11.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|       |
  352|  11.1k|	return result;
  353|  11.1k|}
sinkmemory.c:sink_memory_thread_state_class_init:
  105|      1|{
  106|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|       |
  108|      1|	object_class->nickname = "sinkmemorythreadstate";
  109|      1|	object_class->description = _("per-thread state for sinkmemory");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  110|      1|}
sinkmemory.c:sink_memory_thread_state_init:
  114|  11.1k|{
  115|  11.1k|}
sinkmemory.c:sink_memory_init:
  289|  11.1k|{
  290|  11.1k|	VipsRect all;
  291|       |
  292|  11.1k|	vips_sink_base_init(&memory->sink_base, image);
  293|  11.1k|	memory->area = NULL;
  294|  11.1k|	memory->old_area = NULL;
  295|       |
  296|  11.1k|	all.left = 0;
  297|  11.1k|	all.top = 0;
  298|  11.1k|	all.width = image->Xsize;
  299|  11.1k|	all.height = image->Ysize;
  300|       |
  301|  11.1k|	if (!(memory->region = vips_region_new(image)) ||
  ------------------
  |  Branch (301:6): [True: 0, False: 11.1k]
  ------------------
  302|  11.1k|		vips_region_image(memory->region, &all) ||
  ------------------
  |  Branch (302:3): [True: 0, False: 11.1k]
  ------------------
  303|  11.1k|		!(memory->area = sink_memory_area_new(memory)) ||
  ------------------
  |  Branch (303:3): [True: 0, False: 11.1k]
  ------------------
  304|  11.1k|		!(memory->old_area = sink_memory_area_new(memory))) {
  ------------------
  |  Branch (304:3): [True: 0, False: 11.1k]
  ------------------
  305|      0|		sink_memory_free(memory);
  306|      0|		return -1;
  307|      0|	}
  308|       |
  309|  11.1k|	return 0;
  310|  11.1k|}
sinkmemory.c:sink_memory_area_new:
  134|  22.2k|{
  135|  22.2k|	SinkMemoryArea *area;
  136|       |
  137|  22.2k|	if (!(area = VIPS_NEW(NULL, SinkMemoryArea)))
  ------------------
  |  |   70|  22.2k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  22.2k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  22.2k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  22.2k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  22.2k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (137:6): [True: 0, False: 22.2k]
  ------------------
  138|      0|		return NULL;
  139|  22.2k|	area->memory = memory;
  140|  22.2k|	vips_semaphore_init(&area->nwrite, 0, "nwrite");
  141|       |
  142|  22.2k|	return area;
  143|  22.2k|}
sinkmemory.c:sink_memory_area_position:
  149|  11.1k|{
  150|  11.1k|	SinkMemory *memory = area->memory;
  151|       |
  152|  11.1k|	VipsRect all, rect;
  153|       |
  154|  11.1k|	all.left = 0;
  155|  11.1k|	all.top = 0;
  156|  11.1k|	all.width = memory->sink_base.im->Xsize;
  157|  11.1k|	all.height = memory->sink_base.im->Ysize;
  158|       |
  159|  11.1k|	rect.left = 0;
  160|  11.1k|	rect.top = top;
  161|  11.1k|	rect.width = memory->sink_base.im->Xsize;
  162|  11.1k|	rect.height = height;
  163|       |
  164|  11.1k|	vips_rect_intersectrect(&all, &rect, &area->rect);
  165|  11.1k|}
sinkmemory.c:sink_memory_thread_state_new:
  119|  11.1k|{
  120|  11.1k|	return VIPS_THREAD_STATE(vips_object_new(
  ------------------
  |  |   60|  11.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  11.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  11.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  11.1k|		VIPS_TYPE_THREAD_STATE, VipsThreadState))
  ------------------
  121|  11.1k|		sink_memory_thread_state_get_type(),
  122|  11.1k|		vips_thread_state_set, image, a));
  123|  11.1k|}
sinkmemory.c:sink_memory_area_allocate_fn:
  175|  30.2k|{
  176|  30.2k|	SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state;
  177|  30.2k|	SinkMemory *memory = (SinkMemory *) a;
  178|  30.2k|	SinkBase *sink_base = (SinkBase *) memory;
  179|       |
  180|  30.2k|	VipsRect image;
  181|  30.2k|	VipsRect tile;
  182|       |
  183|  30.2k|	VIPS_DEBUG_MSG("sink_memory_area_allocate_fn: %p\n", g_thread_self());
  ------------------
  |  |   47|  30.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  30.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  30.2k|	{ \
  |  |   49|  30.2k|		; \
  |  |   50|  30.2k|	} \
  |  |   51|  30.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  30.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|       |
  185|       |	/* Is the state x/y OK? New line or maybe new buffer or maybe even
  186|       |	 * all done.
  187|       |	 */
  188|  30.2k|	if (sink_base->x >= memory->area->rect.width) {
  ------------------
  |  Branch (188:6): [True: 19.1k, False: 11.1k]
  ------------------
  189|  19.1k|		sink_base->x = 0;
  190|  19.1k|		sink_base->y += sink_base->tile_height;
  191|       |
  192|  19.1k|		if (sink_base->y >= VIPS_RECT_BOTTOM(&memory->area->rect)) {
  ------------------
  |  |   49|  19.1k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (192:7): [True: 6.27k, False: 12.8k]
  ------------------
  193|       |			/* Block until the previous area is done.
  194|       |			 */
  195|  6.27k|			if (memory->area->rect.top > 0)
  ------------------
  |  Branch (195:8): [True: 0, False: 6.27k]
  ------------------
  196|      0|				vips_semaphore_downn(
  197|      0|					&memory->old_area->nwrite, 0);
  198|       |
  199|       |			/* End of image?
  200|       |			 */
  201|  6.27k|			if (sink_base->y >= sink_base->im->Ysize) {
  ------------------
  |  Branch (201:8): [True: 6.27k, False: 0]
  ------------------
  202|  6.27k|				*stop = TRUE;
  ------------------
  |  |  798|  6.27k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  6.27k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  203|  6.27k|				return 0;
  204|  6.27k|			}
  205|       |
  206|       |			/* Swap buffers.
  207|       |			 */
  208|  6.27k|			VIPS_SWAP(SinkMemoryArea *,
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|  6.27k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.27k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      0|				memory->area, memory->old_area);
  210|       |
  211|       |			/* Position buf at the new y.
  212|       |			 */
  213|      0|			sink_memory_area_position(memory->area,
  214|      0|				sink_base->y, sink_base->n_lines);
  215|      0|		}
  216|  19.1k|	}
  217|       |
  218|       |	/* x, y and buf are good: save params for thread.
  219|       |	 */
  220|  23.9k|	image.left = 0;
  221|  23.9k|	image.top = 0;
  222|  23.9k|	image.width = sink_base->im->Xsize;
  223|  23.9k|	image.height = sink_base->im->Ysize;
  224|  23.9k|	tile.left = sink_base->x;
  225|  23.9k|	tile.top = sink_base->y;
  226|  23.9k|	tile.width = sink_base->tile_width;
  227|  23.9k|	tile.height = sink_base->tile_height;
  228|  23.9k|	vips_rect_intersectrect(&image, &tile, &state->pos);
  229|       |
  230|       |	/* The thread needs to know which area it's writing to.
  231|       |	 */
  232|  23.9k|	smstate->area = memory->area;
  233|       |
  234|  23.9k|	VIPS_DEBUG_MSG("  %p allocated %d x %d:\n",
  ------------------
  |  |   47|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  23.9k|	{ \
  |  |   49|  23.9k|		; \
  |  |   50|  23.9k|	} \
  |  |   51|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|  23.9k|		g_thread_self(), state->pos.left, state->pos.top);
  236|       |
  237|       |	/* Add to the number of writers on the area.
  238|       |	 */
  239|  23.9k|	vips_semaphore_upn(&memory->area->nwrite, -1);
  240|       |
  241|       |	/* Move state on.
  242|       |	 */
  243|  23.9k|	sink_base->x += sink_base->tile_width;
  244|       |
  245|       |	/* Add the number of pixels we've just allocated to progress.
  246|       |	 */
  247|  23.9k|	sink_base->processed += state->pos.width * state->pos.height;
  248|       |
  249|  23.9k|	return 0;
  250|  30.2k|}
sinkmemory.c:sink_memory_area_work_fn:
  256|  23.9k|{
  257|  23.9k|	SinkMemory *memory = (SinkMemory *) a;
  258|  23.9k|	SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state;
  259|  23.9k|	SinkMemoryArea *area = smstate->area;
  260|       |
  261|  23.9k|	int result;
  262|       |
  263|  23.9k|	VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p %d x %d\n",
  ------------------
  |  |   47|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  23.9k|	{ \
  |  |   49|  23.9k|		; \
  |  |   50|  23.9k|	} \
  |  |   51|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  23.9k|		g_thread_self(), state->pos.left, state->pos.top);
  265|       |
  266|  23.9k|	result = vips_region_prepare_to(state->reg, memory->region,
  267|  23.9k|		&state->pos, state->pos.left, state->pos.top);
  268|       |
  269|  23.9k|	VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p result = %d\n",
  ------------------
  |  |   47|  23.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  23.9k|	{ \
  |  |   49|  23.9k|		; \
  |  |   50|  23.9k|	} \
  |  |   51|  23.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|  23.9k|		g_thread_self(), result);
  271|       |
  272|       |	/* Tell the allocator we're done.
  273|       |	 */
  274|  23.9k|	vips_semaphore_upn(&area->nwrite, 1);
  275|       |
  276|  23.9k|	return result;
  277|  23.9k|}
sinkmemory.c:sink_memory_free:
  281|  11.1k|{
  282|  11.1k|	VIPS_FREEF(sink_memory_area_free, memory->area);
  ------------------
  |  |   41|  11.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  11.1k|	{ \
  |  |   43|  11.1k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 11.1k, False: 0]
  |  |  ------------------
  |  |   44|  11.1k|			(void) F((S)); \
  |  |   45|  11.1k|			(S) = 0; \
  |  |   46|  11.1k|		} \
  |  |   47|  11.1k|	} \
  |  |   48|  11.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|  11.1k|	VIPS_FREEF(sink_memory_area_free, memory->old_area);
  ------------------
  |  |   41|  11.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  11.1k|	{ \
  |  |   43|  11.1k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 11.1k, False: 0]
  |  |  ------------------
  |  |   44|  11.1k|			(void) F((S)); \
  |  |   45|  11.1k|			(S) = 0; \
  |  |   46|  11.1k|		} \
  |  |   47|  11.1k|	} \
  |  |   48|  11.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  11.1k|	VIPS_UNREF(memory->region);
  ------------------
  |  |   57|  11.1k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  11.1k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  11.1k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  11.1k|	{ \
  |  |  |  |   43|  11.1k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 11.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  11.1k|			(void) F((S)); \
  |  |  |  |   45|  11.1k|			(S) = 0; \
  |  |  |  |   46|  11.1k|		} \
  |  |  |  |   47|  11.1k|	} \
  |  |  |  |   48|  11.1k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  11.1k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|  11.1k|}
sinkmemory.c:sink_memory_area_free:
  127|  22.2k|{
  128|  22.2k|	vips_semaphore_destroy(&area->nwrite);
  129|  22.2k|	g_free(area);
  130|  22.2k|}

sinkscreen.c:render_thread_state_class_init:
  192|      1|{
  193|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |
  195|      1|	object_class->nickname = "renderthreadstate";
  196|      1|	object_class->description = _("per-thread state for render");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  197|      1|}

vips_source_new_from_blob:
  460|   174k|{
  461|   174k|	VipsSource *source;
  462|       |
  463|   174k|	VIPS_DEBUG_MSG("vips_source_new_from_blob: %p\n", blob);
  ------------------
  |  |   47|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   174k|	{ \
  |  |   49|   174k|		; \
  |  |   50|   174k|	} \
  |  |   51|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|       |
  465|   174k|	source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE,
  ------------------
  |  |  106|   174k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   174k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   174k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   174k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  466|   174k|		"blob", blob,
  467|   174k|		NULL));
  468|       |
  469|   174k|	if (vips_object_build(VIPS_OBJECT(source))) {
  ------------------
  |  |  433|   174k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   174k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   174k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (469:6): [True: 0, False: 174k]
  ------------------
  470|      0|		VIPS_UNREF(source);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|      0|		return NULL;
  472|      0|	}
  473|       |
  474|   174k|	SANITY(source);
  475|       |
  476|   174k|	return source;
  477|   174k|}
vips_source_new_from_memory:
  532|   174k|{
  533|   174k|	VipsSource *source;
  534|   174k|	VipsBlob *blob;
  535|       |
  536|   174k|	VIPS_DEBUG_MSG("vips_source_new_from_buffer: %p, length = %zd\n",
  ------------------
  |  |   47|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   174k|	{ \
  |  |   49|   174k|		; \
  |  |   50|   174k|	} \
  |  |   51|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   174k|		data, length);
  538|       |
  539|       |	/* We don't take a copy of the data or free it.
  540|       |	 */
  541|   174k|	blob = vips_blob_new(NULL, data, length);
  542|       |
  543|   174k|	source = vips_source_new_from_blob(blob);
  544|       |
  545|   174k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|   174k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  546|       |
  547|   174k|	SANITY(source);
  548|       |
  549|   174k|	return source;
  550|   174k|}
vips_source_minimise:
  593|  72.0k|{
  594|  72.0k|	VipsConnection *connection = VIPS_CONNECTION(source);
  ------------------
  |  |   48|  72.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  72.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  72.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  72.0k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  595|       |
  596|  72.0k|	SANITY(source);
  597|       |
  598|  72.0k|	(void) vips_source_test_features(source);
  599|       |
  600|  72.0k|	if (connection->filename &&
  ------------------
  |  Branch (600:6): [True: 0, False: 72.0k]
  ------------------
  601|  72.0k|		connection->descriptor != -1 &&
  ------------------
  |  Branch (601:3): [True: 0, False: 0]
  ------------------
  602|  72.0k|		connection->tracked_descriptor == connection->descriptor &&
  ------------------
  |  Branch (602:3): [True: 0, False: 0]
  ------------------
  603|  72.0k|		!source->is_pipe) {
  ------------------
  |  Branch (603:3): [True: 0, False: 0]
  ------------------
  604|       |#ifdef DEBUG_MINIMISE
  605|       |		printf("vips_source_minimise: %p %s\n",
  606|       |			source,
  607|       |			vips_connection_nick(VIPS_CONNECTION(source)));
  608|       |#endif /*DEBUG_MINIMISE*/
  609|       |
  610|      0|		vips_tracked_close(connection->tracked_descriptor);
  611|      0|		connection->tracked_descriptor = -1;
  612|      0|		connection->descriptor = -1;
  613|      0|	}
  614|       |
  615|  72.0k|	SANITY(source);
  616|  72.0k|}
vips_source_unminimise:
  631|  6.65M|{
  632|  6.65M|	VipsConnection *connection = VIPS_CONNECTION(source);
  ------------------
  |  |   48|  6.65M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  6.65M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  6.65M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  6.65M|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  633|       |
  634|  6.65M|	if (connection->descriptor == -1 &&
  ------------------
  |  Branch (634:6): [True: 6.65M, False: 0]
  ------------------
  635|  6.65M|		connection->tracked_descriptor == -1 &&
  ------------------
  |  Branch (635:3): [True: 6.65M, False: 0]
  ------------------
  636|  6.65M|		connection->filename) {
  ------------------
  |  Branch (636:3): [True: 0, False: 6.65M]
  ------------------
  637|      0|		int fd;
  638|       |
  639|       |#ifdef DEBUG_MINIMISE
  640|       |		printf("vips_source_unminimise: %p %s\n",
  641|       |			source,
  642|       |			vips_connection_nick(VIPS_CONNECTION(source)));
  643|       |#endif /*DEBUG_MINIMISE*/
  644|       |
  645|      0|		if ((fd = vips_tracked_open(connection->filename,
  ------------------
  |  Branch (645:7): [True: 0, False: 0]
  ------------------
  646|      0|				 MODE_READ, 0)) == -1) {
  ------------------
  |  |   77|      0|#define MODE_READ CLOEXEC(BINARYIZE(O_RDONLY))
  |  |  ------------------
  |  |  |  |   68|      0|#define CLOEXEC(M) ((M) | O_CLOEXEC)
  |  |  ------------------
  ------------------
  647|      0|			vips_error_system(errno,
  648|      0|				vips_connection_nick(connection),
  649|      0|				"%s", _("unable to open for read"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  650|      0|			return -1;
  651|      0|		}
  652|       |
  653|      0|		connection->tracked_descriptor = fd;
  654|      0|		connection->descriptor = fd;
  655|       |
  656|      0|		if (vips_source_test_seek(source))
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|			return -1;
  658|       |
  659|       |		/* It might be a named pipe.
  660|       |		 */
  661|      0|		if (!source->is_pipe) {
  ------------------
  |  Branch (661:7): [True: 0, False: 0]
  ------------------
  662|      0|			VIPS_DEBUG_MSG("vips_source_unminimise: restoring "
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|      0|						   "read position %" G_GINT64_FORMAT "\n",
  664|      0|				source->read_position);
  665|      0|			if (vips__seek(connection->descriptor,
  ------------------
  |  Branch (665:8): [True: 0, False: 0]
  ------------------
  666|      0|					source->read_position, SEEK_SET) == -1)
  667|      0|				return -1;
  668|      0|		}
  669|      0|	}
  670|       |
  671|  6.65M|	return 0;
  672|  6.65M|}
vips_source_decode:
  689|  5.69k|{
  690|  5.69k|	VIPS_DEBUG_MSG("vips_source_decode:\n");
  ------------------
  |  |   47|  5.69k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.69k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  5.69k|	{ \
  |  |   49|  5.69k|		; \
  |  |   50|  5.69k|	} \
  |  |   51|  5.69k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.69k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|       |
  692|  5.69k|	SANITY(source);
  693|       |
  694|  5.69k|	if (!source->decode) {
  ------------------
  |  Branch (694:6): [True: 5.69k, False: 0]
  ------------------
  695|  5.69k|		source->decode = TRUE;
  ------------------
  |  |  798|  5.69k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  5.69k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  696|       |
  697|  5.69k|		VIPS_FREEF(g_byte_array_unref, source->sniff);
  ------------------
  |  |   41|  5.69k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.69k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  5.69k|	{ \
  |  |   43|  5.69k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5.69k, False: 0]
  |  |  ------------------
  |  |   44|  5.69k|			(void) F((S)); \
  |  |   45|  5.69k|			(S) = 0; \
  |  |   46|  5.69k|		} \
  |  |   47|  5.69k|	} \
  |  |   48|  5.69k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.69k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  698|       |
  699|       |		/* Now decode is set, header_bytes will be freed once it's
  700|       |		 * exhausted, see vips_source_read().
  701|       |		 */
  702|  5.69k|	}
  703|       |
  704|  5.69k|	vips_source_minimise(source);
  705|       |
  706|  5.69k|	SANITY(source);
  707|       |
  708|  5.69k|	return 0;
  709|  5.69k|}
vips_source_read:
  746|  1.08M|{
  747|  1.08M|	VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|  1.08M|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  1.08M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.08M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  1.08M|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  748|       |
  749|  1.08M|	gint64 total_read;
  750|       |
  751|  1.08M|	VIPS_DEBUG_MSG("vips_source_read:\n");
  ------------------
  |  |   47|  1.08M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.08M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.08M|	{ \
  |  |   49|  1.08M|		; \
  |  |   50|  1.08M|	} \
  |  |   51|  1.08M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.08M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|       |
  753|  1.08M|	SANITY(source);
  754|       |
  755|  1.08M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (755:6): [True: 0, False: 1.08M]
  ------------------
  756|  1.08M|		vips_source_test_features(source))
  ------------------
  |  Branch (756:3): [True: 0, False: 1.08M]
  ------------------
  757|      0|		return -1;
  758|       |
  759|  1.08M|	total_read = 0;
  760|       |
  761|  1.08M|	if (source->data) {
  ------------------
  |  Branch (761:6): [True: 1.08M, False: 0]
  ------------------
  762|       |		/* The whole thing is in memory somehow.
  763|       |		 */
  764|  1.08M|		gint64 available = VIPS_MIN(length,
  ------------------
  |  |   55|  1.08M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 975k, False: 105k]
  |  |  ------------------
  ------------------
  765|  1.08M|			source->length - source->read_position);
  766|       |
  767|  1.08M|		VIPS_DEBUG_MSG("    %zd bytes from memory\n", available);
  ------------------
  |  |   47|  1.08M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.08M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.08M|	{ \
  |  |   49|  1.08M|		; \
  |  |   50|  1.08M|	} \
  |  |   51|  1.08M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.08M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  768|  1.08M|		memcpy(buffer,
  769|  1.08M|			(char *) source->data + source->read_position, available);
  770|  1.08M|		source->read_position += available;
  771|  1.08M|		total_read += available;
  772|  1.08M|	}
  773|      0|	else {
  774|       |		/* Some kind of filesystem or custom source.
  775|       |		 *
  776|       |		 * Get what we can from header_bytes. We may need to read
  777|       |		 * some more after this.
  778|       |		 */
  779|      0|		if (source->header_bytes &&
  ------------------
  |  Branch (779:7): [True: 0, False: 0]
  ------------------
  780|      0|			source->read_position < source->header_bytes->len) {
  ------------------
  |  Branch (780:4): [True: 0, False: 0]
  ------------------
  781|      0|			gint64 available = VIPS_MIN(length,
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  782|      0|				source->header_bytes->len - source->read_position);
  783|       |
  784|      0|			VIPS_DEBUG_MSG("    %zd bytes from cache\n", available);
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|      0|			memcpy(buffer,
  786|      0|				source->header_bytes->data + source->read_position, available);
  787|      0|			source->read_position += available;
  788|      0|			buffer = (char *) buffer + available;
  789|      0|			length -= available;
  790|      0|			total_read += available;
  791|      0|		}
  792|       |
  793|       |		/* We're in pixel decode mode and we've exhausted the header
  794|       |		 * cache. We can safely junk it.
  795|       |		 */
  796|      0|		if (source->decode &&
  ------------------
  |  Branch (796:7): [True: 0, False: 0]
  ------------------
  797|      0|			source->header_bytes &&
  ------------------
  |  Branch (797:4): [True: 0, False: 0]
  ------------------
  798|      0|			source->read_position >= source->header_bytes->len)
  ------------------
  |  Branch (798:4): [True: 0, False: 0]
  ------------------
  799|      0|			VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  800|       |
  801|       |		/* Any more bytes requested? Call the read() vfunc.
  802|       |		 */
  803|      0|		if (length > 0) {
  ------------------
  |  Branch (803:7): [True: 0, False: 0]
  ------------------
  804|      0|			gint64 bytes_read;
  805|       |
  806|      0|			VIPS_DEBUG_MSG("    calling class->read()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|      0|			bytes_read = class->read(source, buffer, length);
  808|      0|			VIPS_DEBUG_MSG("    %zd bytes from read()\n", bytes_read);
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|      0|			if (bytes_read == -1) {
  ------------------
  |  Branch (809:8): [True: 0, False: 0]
  ------------------
  810|      0|				vips_error_system(errno,
  811|      0|					vips_connection_nick(VIPS_CONNECTION(source)),
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  812|      0|					"%s", _("read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  813|      0|				return -1;
  814|      0|			}
  815|       |
  816|       |			/* We need to save bytes if we're in header mode and
  817|       |			 * we can't seek or map.
  818|       |			 */
  819|      0|			if (source->header_bytes &&
  ------------------
  |  Branch (819:8): [True: 0, False: 0]
  ------------------
  820|      0|				source->is_pipe &&
  ------------------
  |  Branch (820:5): [True: 0, False: 0]
  ------------------
  821|      0|				!source->decode &&
  ------------------
  |  Branch (821:5): [True: 0, False: 0]
  ------------------
  822|      0|				bytes_read > 0)
  ------------------
  |  Branch (822:5): [True: 0, False: 0]
  ------------------
  823|      0|				g_byte_array_append(source->header_bytes, buffer, bytes_read);
  824|       |
  825|      0|			source->read_position += bytes_read;
  826|      0|			total_read += bytes_read;
  827|      0|		}
  828|      0|	}
  829|       |
  830|  1.08M|	VIPS_DEBUG_MSG("    %zd bytes total\n", total_read);
  ------------------
  |  |   47|  1.08M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.08M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.08M|	{ \
  |  |   49|  1.08M|		; \
  |  |   50|  1.08M|	} \
  |  |   51|  1.08M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.08M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  831|       |
  832|  1.08M|	SANITY(source);
  833|       |
  834|  1.08M|	return total_read;
  835|  1.08M|}
vips_source_is_mappable:
  990|  11.6k|{
  991|  11.6k|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (991:6): [True: 0, False: 11.6k]
  ------------------
  992|  11.6k|		vips_source_test_features(source))
  ------------------
  |  Branch (992:3): [True: 0, False: 11.6k]
  ------------------
  993|      0|		return -1;
  994|       |
  995|       |	/* Already a memory object, or there's a filename we can map, or
  996|       |	 * there's a seekable descriptor.
  997|       |	 */
  998|  11.6k|	return source->data ||
  ------------------
  |  Branch (998:9): [True: 11.6k, False: 0]
  ------------------
  999|  11.6k|		VIPS_CONNECTION(source)->filename ||
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  |  Branch (999:3): [True: 0, False: 0]
  ------------------
 1000|  11.6k|		(!source->is_pipe &&
  ------------------
  |  Branch (1000:4): [True: 0, False: 0]
  ------------------
 1001|      0|			VIPS_CONNECTION(source)->descriptor != -1);
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  |  Branch (1001:4): [True: 0, False: 0]
  ------------------
 1002|  11.6k|}
vips_source_map:
 1047|  15.8k|{
 1048|  15.8k|	VIPS_DEBUG_MSG("vips_source_map:\n");
  ------------------
  |  |   47|  15.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.8k|	{ \
  |  |   49|  15.8k|		; \
  |  |   50|  15.8k|	} \
  |  |   51|  15.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1049|       |
 1050|  15.8k|	SANITY(source);
 1051|       |
 1052|  15.8k|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (1052:6): [True: 0, False: 15.8k]
  ------------------
 1053|  15.8k|		vips_source_test_features(source))
  ------------------
  |  Branch (1053:3): [True: 0, False: 15.8k]
  ------------------
 1054|      0|		return NULL;
 1055|       |
 1056|       |	/* Try to map the file into memory, if possible. Some filesystems have
 1057|       |	 * mmap disabled, so we don't give up if this fails.
 1058|       |	 */
 1059|  15.8k|	if (!source->data &&
  ------------------
  |  Branch (1059:6): [True: 0, False: 15.8k]
  ------------------
 1060|  15.8k|		vips_source_is_mappable(source))
  ------------------
  |  Branch (1060:3): [True: 0, False: 0]
  ------------------
 1061|      0|		(void) vips_source_descriptor_to_memory(source);
 1062|       |
 1063|       |	/* If it's not a pipe, we can rewind, get the length, and read the
 1064|       |	 * whole thing.
 1065|       |	 */
 1066|  15.8k|	if (!source->data &&
  ------------------
  |  Branch (1066:6): [True: 0, False: 15.8k]
  ------------------
 1067|  15.8k|		!source->is_pipe &&
  ------------------
  |  Branch (1067:3): [True: 0, False: 0]
  ------------------
 1068|  15.8k|		vips_source_read_to_memory(source))
  ------------------
  |  Branch (1068:3): [True: 0, False: 0]
  ------------------
 1069|      0|		return NULL;
 1070|       |
 1071|       |	/* We don't know the length and must read and assemble in chunks.
 1072|       |	 */
 1073|  15.8k|	if (source->is_pipe &&
  ------------------
  |  Branch (1073:6): [True: 0, False: 15.8k]
  ------------------
 1074|  15.8k|		vips_source_pipe_read_to_position(source, -1))
  ------------------
  |  Branch (1074:3): [True: 0, False: 0]
  ------------------
 1075|      0|		return NULL;
 1076|       |
 1077|  15.8k|	if (length_out)
  ------------------
  |  Branch (1077:6): [True: 15.8k, False: 0]
  ------------------
 1078|  15.8k|		*length_out = source->length;
 1079|       |
 1080|  15.8k|	SANITY(source);
 1081|       |
 1082|  15.8k|	return source->data;
 1083|  15.8k|}
vips_source_seek:
 1136|  1.85M|{
 1137|  1.85M|	const char *nick = vips_connection_nick(VIPS_CONNECTION(source));
  ------------------
  |  |   48|  1.85M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.85M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.85M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  1.85M|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
 1138|  1.85M|	VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|  1.85M|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  1.85M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.85M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  1.85M|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
 1139|       |
 1140|  1.85M|	gint64 new_pos;
 1141|       |
 1142|  1.85M|	VIPS_DEBUG_MSG(
  ------------------
  |  |   47|  1.85M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.85M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.85M|	{ \
  |  |   49|  1.85M|		; \
  |  |   50|  1.85M|	} \
  |  |   51|  1.85M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.85M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|  1.85M|		"vips_source_seek: offset = %" G_GINT64_FORMAT ", whence = %d\n",
 1144|  1.85M|		offset, whence);
 1145|       |
 1146|  1.85M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (1146:6): [True: 0, False: 1.85M]
  ------------------
 1147|  1.85M|		vips_source_test_features(source))
  ------------------
  |  Branch (1147:3): [True: 0, False: 1.85M]
  ------------------
 1148|      0|		return -1;
 1149|       |
 1150|  1.85M|	if (source->data) {
  ------------------
  |  Branch (1150:6): [True: 1.85M, False: 0]
  ------------------
 1151|  1.85M|		switch (whence) {
 1152|  1.12M|		case SEEK_SET:
  ------------------
  |  Branch (1152:3): [True: 1.12M, False: 724k]
  ------------------
 1153|  1.12M|			new_pos = offset;
 1154|  1.12M|			break;
 1155|       |
 1156|   505k|		case SEEK_CUR:
  ------------------
  |  Branch (1156:3): [True: 505k, False: 1.34M]
  ------------------
 1157|   505k|			new_pos = source->read_position + offset;
 1158|   505k|			break;
 1159|       |
 1160|   219k|		case SEEK_END:
  ------------------
  |  Branch (1160:3): [True: 219k, False: 1.63M]
  ------------------
 1161|   219k|			new_pos = source->length + offset;
 1162|   219k|			break;
 1163|       |
 1164|      0|		default:
  ------------------
  |  Branch (1164:3): [True: 0, False: 1.85M]
  ------------------
 1165|      0|			vips_error(nick, "%s", _("bad 'whence'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1166|      0|			return -1;
 1167|  1.85M|		}
 1168|  1.85M|	}
 1169|      0|	else if (source->is_pipe) {
  ------------------
  |  Branch (1169:11): [True: 0, False: 0]
  ------------------
 1170|      0|		switch (whence) {
 1171|      0|		case SEEK_SET:
  ------------------
  |  Branch (1171:3): [True: 0, False: 0]
  ------------------
 1172|      0|			new_pos = offset;
 1173|      0|			break;
 1174|       |
 1175|      0|		case SEEK_CUR:
  ------------------
  |  Branch (1175:3): [True: 0, False: 0]
  ------------------
 1176|      0|			new_pos = source->read_position + offset;
 1177|      0|			break;
 1178|       |
 1179|      0|		case SEEK_END:
  ------------------
  |  Branch (1179:3): [True: 0, False: 0]
  ------------------
 1180|       |			/* We have to read the whole source into memory to get
 1181|       |			 * the length.
 1182|       |			 */
 1183|      0|			if (vips_source_pipe_read_to_position(source, -1))
  ------------------
  |  Branch (1183:8): [True: 0, False: 0]
  ------------------
 1184|      0|				return -1;
 1185|       |
 1186|      0|			new_pos = source->length + offset;
 1187|      0|			break;
 1188|       |
 1189|      0|		default:
  ------------------
  |  Branch (1189:3): [True: 0, False: 0]
  ------------------
 1190|      0|			vips_error(nick, "%s", _("bad 'whence'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1191|      0|			return -1;
 1192|      0|		}
 1193|      0|	}
 1194|      0|	else {
 1195|      0|		if ((new_pos = class->seek(source, offset, whence)) == -1)
  ------------------
  |  Branch (1195:7): [True: 0, False: 0]
  ------------------
 1196|      0|			return -1;
 1197|      0|	}
 1198|       |
 1199|       |	/* For pipes, we have to fake seek by reading to that point. This
 1200|       |	 * might hit EOF and turn the pipe into a memory source.
 1201|       |	 */
 1202|  1.85M|	if (source->is_pipe &&
  ------------------
  |  Branch (1202:6): [True: 0, False: 1.85M]
  ------------------
 1203|  1.85M|		vips_source_pipe_read_to_position(source, new_pos))
  ------------------
  |  Branch (1203:3): [True: 0, False: 0]
  ------------------
 1204|      0|		return -1;
 1205|       |
 1206|       |	/* Don't allow out of range seeks.
 1207|       |	 */
 1208|  1.85M|	if (new_pos < 0 ||
  ------------------
  |  Branch (1208:6): [True: 12.1k, False: 1.84M]
  ------------------
 1209|  1.85M|		(source->length != -1 && new_pos > source->length)) {
  ------------------
  |  Branch (1209:4): [True: 1.84M, False: 0]
  |  Branch (1209:28): [True: 85.6k, False: 1.75M]
  ------------------
 1210|  97.8k|		vips_error(nick,
 1211|  97.8k|			_("bad seek to %" G_GINT64_FORMAT), new_pos);
  ------------------
  |  |   30|  97.8k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  97.8k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1212|  97.8k|		return -1;
 1213|  97.8k|	}
 1214|       |
 1215|  1.75M|	source->read_position = new_pos;
 1216|       |
 1217|  1.75M|	VIPS_DEBUG_MSG("    new_pos = %" G_GINT64_FORMAT "\n", new_pos);
  ------------------
  |  |   47|  1.75M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.75M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.75M|	{ \
  |  |   49|  1.75M|		; \
  |  |   50|  1.75M|	} \
  |  |   51|  1.75M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.75M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1218|       |
 1219|  1.75M|	return new_pos;
 1220|  1.85M|}
vips_source_rewind:
 1235|   189k|{
 1236|   189k|	VIPS_DEBUG_MSG("vips_source_rewind:\n");
  ------------------
  |  |   47|   189k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   189k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   189k|	{ \
  |  |   49|   189k|		; \
  |  |   50|   189k|	} \
  |  |   51|   189k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   189k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1237|       |
 1238|   189k|	SANITY(source);
 1239|       |
 1240|   189k|	if (vips_source_test_features(source) ||
  ------------------
  |  Branch (1240:6): [True: 0, False: 189k]
  ------------------
 1241|   189k|		vips_source_seek(source, 0, SEEK_SET) != 0)
  ------------------
  |  Branch (1241:3): [True: 0, False: 189k]
  ------------------
 1242|      0|		return -1;
 1243|       |
 1244|       |	/* Back into sniff + header decode state.
 1245|       |	 */
 1246|   189k|	source->decode = FALSE;
  ------------------
  |  |  794|   189k|#define	FALSE	(0)
  ------------------
 1247|   189k|	if (!source->sniff)
  ------------------
  |  Branch (1247:6): [True: 0, False: 189k]
  ------------------
 1248|      0|		source->sniff = g_byte_array_new();
 1249|       |
 1250|   189k|	SANITY(source);
 1251|       |
 1252|   189k|	return 0;
 1253|   189k|}
vips_source_length:
 1267|   219k|{
 1268|   219k|	gint64 length;
 1269|   219k|	gint64 read_position;
 1270|       |
 1271|   219k|	VIPS_DEBUG_MSG("vips_source_length:\n");
  ------------------
  |  |   47|   219k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   219k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   219k|	{ \
  |  |   49|   219k|		; \
  |  |   50|   219k|	} \
  |  |   51|   219k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   219k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1272|       |
 1273|   219k|	if (vips_source_test_features(source))
  ------------------
  |  Branch (1273:6): [True: 0, False: 219k]
  ------------------
 1274|      0|		return -1;
 1275|       |
 1276|   219k|	read_position = vips_source_seek(source, 0, SEEK_CUR);
 1277|   219k|	length = vips_source_seek(source, 0, SEEK_END);
 1278|   219k|	vips_source_seek(source, read_position, SEEK_SET);
 1279|       |
 1280|   219k|	return length;
 1281|   219k|}
vips_source_sniff_at_most:
 1299|   124k|{
 1300|   124k|	unsigned char *q;
 1301|   124k|	gint64 read_position;
 1302|       |
 1303|   124k|	VIPS_DEBUG_MSG("vips_source_sniff_at_most: %zd bytes\n", length);
  ------------------
  |  |   47|   124k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   124k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   124k|	{ \
  |  |   49|   124k|		; \
  |  |   50|   124k|	} \
  |  |   51|   124k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   124k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|       |
 1305|   124k|	SANITY(source);
 1306|       |
 1307|   124k|	if (vips_source_test_features(source) ||
  ------------------
  |  Branch (1307:6): [True: 0, False: 124k]
  ------------------
 1308|   124k|		vips_source_rewind(source))
  ------------------
  |  Branch (1308:3): [True: 0, False: 124k]
  ------------------
 1309|      0|		return -1;
 1310|       |
 1311|   124k|	g_byte_array_set_size(source->sniff, length);
 1312|       |
 1313|   124k|	read_position = 0;
 1314|   124k|	q = source->sniff->data;
 1315|   248k|	while (read_position < length) {
  ------------------
  |  Branch (1315:9): [True: 125k, False: 123k]
  ------------------
 1316|   125k|		gint64 bytes_read;
 1317|       |
 1318|   125k|		bytes_read = vips_source_read(source, q, length - read_position);
 1319|   125k|		if (bytes_read == -1)
  ------------------
  |  Branch (1319:7): [True: 0, False: 125k]
  ------------------
 1320|      0|			return -1;
 1321|   125k|		if (bytes_read == 0)
  ------------------
  |  Branch (1321:7): [True: 1.16k, False: 124k]
  ------------------
 1322|  1.16k|			break;
 1323|       |
 1324|   124k|		read_position += bytes_read;
 1325|   124k|		q += bytes_read;
 1326|   124k|	}
 1327|       |
 1328|   124k|	SANITY(source);
 1329|       |
 1330|   124k|	*data = source->sniff->data;
 1331|       |
 1332|   124k|	return read_position;
 1333|   124k|}
vips_source_sniff:
 1347|   124k|{
 1348|   124k|	unsigned char *data;
 1349|   124k|	gint64 bytes_read;
 1350|       |
 1351|   124k|	if (vips_source_test_features(source))
  ------------------
  |  Branch (1351:6): [True: 0, False: 124k]
  ------------------
 1352|      0|		return NULL;
 1353|       |
 1354|   124k|	bytes_read = vips_source_sniff_at_most(source, &data, length);
 1355|   124k|	if (bytes_read == -1)
  ------------------
  |  Branch (1355:6): [True: 0, False: 124k]
  ------------------
 1356|      0|		return NULL;
 1357|   124k|	if (bytes_read < length)
  ------------------
  |  Branch (1357:6): [True: 1.16k, False: 123k]
  ------------------
 1358|  1.16k|		return NULL;
 1359|       |
 1360|   123k|	return data;
 1361|   124k|}
source.c:vips_source_class_init:
  349|      1|{
  350|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|       |
  353|      1|	gobject_class->finalize = vips_source_finalize;
  354|      1|	gobject_class->set_property = vips_object_set_property;
  355|      1|	gobject_class->get_property = vips_object_get_property;
  356|       |
  357|      1|	object_class->nickname = "source";
  358|      1|	object_class->description = _("input source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  359|       |
  360|      1|	object_class->build = vips_source_build;
  361|       |
  362|      1|	class->read = vips_source_read_real;
  363|      1|	class->seek = vips_source_seek_real;
  364|       |
  365|      1|	VIPS_ARG_BOXED(class, "blob", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  366|      1|		_("Blob"),
  367|      1|		_("Blob to load from"),
  368|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  369|      1|		G_STRUCT_OFFSET(VipsSource, blob),
  370|      1|		VIPS_TYPE_BLOB);
  371|      1|}
source.c:vips_source_finalize:
  250|   174k|{
  251|   174k|	VipsSource *source = VIPS_SOURCE(gobject);
  ------------------
  |  |  106|   174k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   174k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   174k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   174k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  252|       |
  253|       |#ifdef DEBUG_MINIMISE
  254|       |	printf("vips_source_finalize: %p\n", source);
  255|       |#endif /*DEBUG_MINIMISE*/
  256|       |
  257|   174k|	VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   174k|	{ \
  |  |   43|   174k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 174k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   174k|	} \
  |  |   48|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|   174k|	VIPS_FREEF(g_byte_array_unref, source->sniff);
  ------------------
  |  |   41|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   174k|	{ \
  |  |   43|   174k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 168k, False: 5.69k]
  |  |  ------------------
  |  |   44|   168k|			(void) F((S)); \
  |  |   45|   168k|			(S) = 0; \
  |  |   46|   168k|		} \
  |  |   47|   174k|	} \
  |  |   48|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|   174k|	if (source->mmap_baseaddr) {
  ------------------
  |  Branch (259:6): [True: 0, False: 174k]
  ------------------
  260|      0|		vips__munmap(source->mmap_baseaddr, source->mmap_length);
  261|      0|		source->mmap_baseaddr = NULL;
  262|      0|	}
  263|       |
  264|   174k|	G_OBJECT_CLASS(vips_source_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   174k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   174k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   174k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|   174k|}
source.c:vips_source_build:
  269|   174k|{
  270|   174k|	VipsConnection *connection = VIPS_CONNECTION(object);
  ------------------
  |  |   48|   174k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   174k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   174k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|   174k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  271|   174k|	VipsSource *source = VIPS_SOURCE(object);
  ------------------
  |  |  106|   174k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   174k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   174k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   174k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  272|       |
  273|   174k|	VIPS_DEBUG_MSG("vips_source_build: %p\n", source);
  ------------------
  |  |   47|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   174k|	{ \
  |  |   49|   174k|		; \
  |  |   50|   174k|	} \
  |  |   51|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|       |
  275|   174k|	if (VIPS_OBJECT_CLASS(vips_source_parent_class)->build(object))
  ------------------
  |  |  435|   174k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   174k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   174k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (275:6): [True: 0, False: 174k]
  ------------------
  276|      0|		return -1;
  277|       |
  278|   174k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (278:6): [True: 0, False: 174k]
  ------------------
  279|   174k|		vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (279:3): [True: 0, False: 0]
  ------------------
  280|      0|		vips_error(vips_connection_nick(connection),
  281|      0|			"%s", _("don't set 'filename' and 'descriptor'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  282|      0|		return -1;
  283|      0|	}
  284|       |
  285|       |	/* unminimise will open the filename.
  286|       |	 */
  287|   174k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (287:6): [True: 0, False: 174k]
  ------------------
  288|   174k|		vips_source_unminimise(source))
  ------------------
  |  Branch (288:3): [True: 0, False: 0]
  ------------------
  289|      0|		return -1;
  290|       |
  291|   174k|	if (vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (291:6): [True: 0, False: 174k]
  ------------------
  292|      0|		connection->descriptor = dup(connection->descriptor);
  293|      0|		connection->close_descriptor = connection->descriptor;
  294|       |
  295|       |#ifdef G_OS_WIN32
  296|       |		/* Windows will create eg. stdin and stdout in text mode.
  297|       |		 * We always read in binary mode.
  298|       |		 */
  299|       |		_setmode(connection->descriptor, _O_BINARY);
  300|       |#endif /*G_OS_WIN32*/
  301|      0|	}
  302|       |
  303|   174k|	if (vips_object_argument_isset(object, "blob")) {
  ------------------
  |  Branch (303:6): [True: 174k, False: 0]
  ------------------
  304|   174k|		size_t length;
  305|       |
  306|   174k|		if (!(source->data = vips_blob_get(source->blob, &length)))
  ------------------
  |  Branch (306:7): [True: 0, False: 174k]
  ------------------
  307|      0|			return -1;
  308|       |
  309|   174k|		source->length = VIPS_MIN(length, G_MAXSSIZE);
  ------------------
  |  |   55|   174k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 174k, False: 0]
  |  |  ------------------
  ------------------
  310|   174k|	}
  311|       |
  312|   174k|	return 0;
  313|   174k|}
source.c:vips_source_init:
  375|   174k|{
  376|   174k|	source->length = -1;
  377|   174k|	source->sniff = g_byte_array_new();
  378|   174k|	source->header_bytes = g_byte_array_new();
  379|   174k|}
source.c:vips_source_test_features:
  163|  3.69M|{
  164|  3.69M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (164:6): [True: 0, False: 3.69M]
  ------------------
  165|  3.69M|		vips_source_test_seek(source))
  ------------------
  |  Branch (165:3): [True: 0, False: 3.69M]
  ------------------
  166|      0|		return -1;
  167|       |
  168|  3.69M|	return 0;
  169|  3.69M|}
source.c:vips_source_test_seek:
  115|  3.69M|{
  116|  3.69M|	if (!source->have_tested_seek) {
  ------------------
  |  Branch (116:6): [True: 174k, False: 3.51M]
  ------------------
  117|   174k|		VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|   174k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   174k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   174k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|   174k|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  118|       |
  119|   174k|		source->have_tested_seek = TRUE;
  ------------------
  |  |  798|   174k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   174k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  120|       |
  121|   174k|		VIPS_DEBUG_MSG("vips_source_can_seek: testing seek ..\n");
  ------------------
  |  |   47|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   174k|	{ \
  |  |   49|   174k|		; \
  |  |   50|   174k|	} \
  |  |   51|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|       |
  123|       |		/* Can we seek this input?
  124|       |		 *
  125|       |		 * We need to call the method directly rather than via
  126|       |		 * vips_source_seek() etc. or we might trigger seek emulation.
  127|       |		 */
  128|   174k|		if (source->data ||
  ------------------
  |  Branch (128:7): [True: 174k, False: 0]
  ------------------
  129|   174k|			class->seek(source, 0, SEEK_CUR) != -1) {
  ------------------
  |  Branch (129:4): [True: 0, False: 0]
  ------------------
  130|   174k|			gint64 length;
  131|       |
  132|   174k|			VIPS_DEBUG_MSG("    seekable source\n");
  ------------------
  |  |   47|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   174k|	{ \
  |  |   49|   174k|		; \
  |  |   50|   174k|	} \
  |  |   51|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|       |
  134|       |			/* We should be able to get the length of seekable
  135|       |			 * objects.
  136|       |			 */
  137|   174k|			if ((length = vips_source_length(source)) == -1)
  ------------------
  |  Branch (137:8): [True: 0, False: 174k]
  ------------------
  138|      0|				return -1;
  139|       |
  140|   174k|			source->length = length;
  141|       |
  142|       |			/* If we can seek, we won't need to save header bytes.
  143|       |			 */
  144|   174k|			VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|   174k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   174k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   174k|	{ \
  |  |   43|   174k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 174k, False: 0]
  |  |  ------------------
  |  |   44|   174k|			(void) F((S)); \
  |  |   45|   174k|			(S) = 0; \
  |  |   46|   174k|		} \
  |  |   47|   174k|	} \
  |  |   48|   174k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   174k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|   174k|		}
  146|      0|		else {
  147|       |			/* Not seekable. This must be some kind of pipe.
  148|       |			 */
  149|      0|			VIPS_DEBUG_MSG("    not seekable\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      0|			source->is_pipe = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  151|      0|		}
  152|   174k|	}
  153|       |
  154|  3.69M|	return 0;
  155|  3.69M|}

sourcecustom.c:vips_source_custom_class_init:
  165|      1|{
  166|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsSourceClass *source_class = VIPS_SOURCE_CLASS(class);
  ------------------
  |  |  109|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  110|      1|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  169|       |
  170|      1|	gobject_class->dispose = vips_source_custom_dispose;
  171|       |
  172|      1|	object_class->nickname = "source_custom";
  173|      1|	object_class->description = _("Custom source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  174|       |
  175|      1|	source_class->read = vips_source_custom_read_real;
  176|      1|	source_class->seek = vips_source_custom_seek_real;
  177|       |
  178|      1|	class->read = vips_source_custom_read_signal_real;
  179|      1|	class->seek = vips_source_custom_seek_signal_real;
  180|       |
  181|       |	/**
  182|       |	 * VipsSourceCustom::read:
  183|       |	 * @source_custom: the source being operated on
  184|       |	 * @buffer: %gpointer, buffer to fill
  185|       |	 * @size: %gint64, size of buffer
  186|       |	 *
  187|       |	 * This signal is emitted to read bytes from the source into @buffer.
  188|       |	 *
  189|       |	 * Returns: the number of bytes read. Return 0 for EOF.
  190|       |	 */
  191|      1|	vips_source_custom_signals[SIG_READ] = g_signal_new("read",
  192|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  193|      1|		G_SIGNAL_ACTION,
  194|      1|		G_STRUCT_OFFSET(VipsSourceCustomClass, read),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  195|      1|		NULL, NULL,
  196|      1|		vips_INT64__POINTER_INT64,
  197|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|       |
  200|       |	/**
  201|       |	 * VipsSourceCustom::seek:
  202|       |	 * @source_custom: the source being operated on
  203|       |	 * @offset: %gint64, seek offset
  204|       |	 * @whence: %gint, seek origin
  205|       |	 *
  206|       |	 * This signal is emitted to seek the source. The handler should
  207|       |	 * change the source position appropriately.
  208|       |	 *
  209|       |	 * The handler for an unseekable source should always return -1.
  210|       |	 *
  211|       |	 * Returns: the new seek position.
  212|       |	 */
  213|      1|	vips_source_custom_signals[SIG_SEEK] = g_signal_new("seek",
  214|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  215|      1|		G_SIGNAL_ACTION,
  216|      1|		G_STRUCT_OFFSET(VipsSourceCustomClass, seek),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  217|      1|		NULL, NULL,
  218|      1|		vips_INT64__INT64_INT,
  219|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|      1|		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      1|}

system.c:vips_system_class_init:
  259|      1|{
  260|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  263|       |
  264|      1|	gobject_class->dispose = vips_system_dispose;
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	vobject_class->nickname = "system";
  269|      1|	vobject_class->description = _("run an external command");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	vobject_class->build = vips_system_build;
  271|       |
  272|       |	/* Commands can have side-effects, so don't cache them.
  273|       |	 */
  274|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  275|       |
  276|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  277|      1|		_("Input"),
  278|      1|		_("Array of input images"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsSystem, in),
  281|      1|		VIPS_TYPE_ARRAY_IMAGE);
  282|       |
  283|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  284|      1|		_("Output"),
  285|      1|		_("Output image"),
  286|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  287|      1|		G_STRUCT_OFFSET(VipsSystem, out));
  288|       |
  289|      1|	VIPS_ARG_STRING(class, "cmd_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  290|      1|		_("Command"),
  291|      1|		_("Command to run"),
  292|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  293|      1|		G_STRUCT_OFFSET(VipsSystem, cmd_format),
  294|      1|		NULL);
  295|       |
  296|      1|	VIPS_ARG_STRING(class, "in_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  297|      1|		_("Input format"),
  298|      1|		_("Format for input filename"),
  299|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  300|      1|		G_STRUCT_OFFSET(VipsSystem, in_format),
  301|      1|		NULL);
  302|       |
  303|      1|	VIPS_ARG_STRING(class, "out_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  304|      1|		_("Output format"),
  305|      1|		_("Format for output filename"),
  306|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  307|      1|		G_STRUCT_OFFSET(VipsSystem, out_format),
  308|      1|		NULL);
  309|       |
  310|      1|	VIPS_ARG_STRING(class, "log", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  311|      1|		_("Log"),
  312|      1|		_("Command log"),
  313|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  314|      1|		G_STRUCT_OFFSET(VipsSystem, log),
  315|      1|		NULL);
  316|      1|}

vips_target_new_to_memory:
  389|  15.5k|{
  390|  15.5k|	VipsTarget *target;
  391|       |
  392|  15.5k|	VIPS_DEBUG_MSG("vips_target_new_to_memory:\n");
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  393|       |
  394|  15.5k|	target = VIPS_TARGET(g_object_new(VIPS_TYPE_TARGET,
  ------------------
  |  |  382|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  15.5k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
  395|  15.5k|		"memory", TRUE,
  396|  15.5k|		NULL));
  397|       |
  398|  15.5k|	if (vips_object_build(VIPS_OBJECT(target))) {
  ------------------
  |  |  433|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (398:6): [True: 0, False: 15.5k]
  ------------------
  399|      0|		VIPS_UNREF(target);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|      0|		return NULL;
  401|      0|	}
  402|       |
  403|  15.5k|	return target;
  404|  15.5k|}
vips_target_write:
  515|  29.1M|{
  516|  29.1M|	VIPS_DEBUG_MSG("vips_target_write: %zd bytes\n", length);
  ------------------
  |  |   47|  29.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  29.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  29.1M|	{ \
  |  |   49|  29.1M|		; \
  |  |   50|  29.1M|	} \
  |  |   51|  29.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  29.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|       |
  518|  29.1M|	if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point &&
  ------------------
  |  |  397|  29.1M|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  |  Branch (518:6): [True: 4.03k, False: 29.1M]
  ------------------
  519|  29.1M|		vips_target_flush(target))
  ------------------
  |  Branch (519:3): [True: 0, False: 4.03k]
  ------------------
  520|      0|		return -1;
  521|       |
  522|  29.1M|	if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point) {
  ------------------
  |  |  397|  29.1M|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  |  Branch (522:6): [True: 0, False: 29.1M]
  ------------------
  523|       |		/* Still too large? Do an unbuffered write.
  524|       |		 */
  525|      0|		if (vips_target_write_unbuffered(target, buffer, length))
  ------------------
  |  Branch (525:7): [True: 0, False: 0]
  ------------------
  526|      0|			return -1;
  527|      0|	}
  528|  29.1M|	else {
  529|  29.1M|		memcpy(target->output_buffer + target->write_point,
  530|  29.1M|			buffer, length);
  531|  29.1M|		target->write_point += length;
  532|  29.1M|	}
  533|       |
  534|  29.1M|	return 0;
  535|  29.1M|}
vips_target_end:
  617|  7.30k|{
  618|  7.30k|	VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target);
  ------------------
  |  |  392|  7.30k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  7.30k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  7.30k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  393|  7.30k|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  619|       |
  620|  7.30k|	VIPS_DEBUG_MSG("vips_target_end:\n");
  ------------------
  |  |   47|  7.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  7.30k|	{ \
  |  |   49|  7.30k|		; \
  |  |   50|  7.30k|	} \
  |  |   51|  7.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|       |
  622|  7.30k|	if (target->ended)
  ------------------
  |  Branch (622:6): [True: 0, False: 7.30k]
  ------------------
  623|      0|		return 0;
  624|       |
  625|  7.30k|	if (vips_target_flush(target))
  ------------------
  |  Branch (625:6): [True: 0, False: 7.30k]
  ------------------
  626|      0|		return -1;
  627|       |
  628|       |	/* Move the target buffer into the blob so it can be read out.
  629|       |	 */
  630|  7.30k|	if (target->memory_buffer) {
  ------------------
  |  Branch (630:6): [True: 7.30k, False: 0]
  ------------------
  631|  7.30k|		const char *data;
  632|  7.30k|		size_t length;
  633|       |
  634|  7.30k|		length = target->memory_buffer->len;
  635|  7.30k|		data = g_string_free(target->memory_buffer, FALSE);
  ------------------
  |  |  794|  7.30k|#define	FALSE	(0)
  ------------------
  636|  7.30k|		target->memory_buffer = NULL;
  637|  7.30k|		vips_blob_set(target->blob,
  638|  7.30k|			(VipsCallbackFn) vips_area_free_cb, data, length);
  639|  7.30k|	}
  640|      0|	else {
  641|      0|		if (class->end(target))
  ------------------
  |  Branch (641:7): [True: 0, False: 0]
  ------------------
  642|      0|			return -1;
  643|      0|	}
  644|       |
  645|  7.30k|	target->ended = TRUE;
  ------------------
  |  |  798|  7.30k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.30k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  646|       |
  647|  7.30k|	return 0;
  648|  7.30k|}
vips_target_writes:
  748|  29.1M|{
  749|  29.1M|	return vips_target_write(target,
  750|  29.1M|		(unsigned char *) str, strlen(str));
  751|  29.1M|}
vips_target_writef:
  765|  14.8k|{
  766|  14.8k|	va_list ap;
  767|  14.8k|	char *line;
  768|  14.8k|	int result;
  769|       |
  770|  14.8k|	va_start(ap, fmt);
  771|  14.8k|	line = g_strdup_vprintf(fmt, ap);
  772|  14.8k|	va_end(ap);
  773|       |
  774|  14.8k|	result = vips_target_writes(target, line);
  775|       |
  776|  14.8k|	g_free(line);
  777|       |
  778|  14.8k|	return result;
  779|  14.8k|}
target.c:vips_target_class_init:
  274|      1|{
  275|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|       |
  278|      1|	gobject_class->finalize = vips_target_finalize;
  279|      1|	gobject_class->set_property = vips_object_set_property;
  280|      1|	gobject_class->get_property = vips_object_get_property;
  281|       |
  282|      1|	object_class->nickname = "target";
  283|      1|	object_class->description = _("Target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  284|       |
  285|      1|	object_class->build = vips_target_build;
  286|       |
  287|      1|	class->write = vips_target_write_real;
  288|      1|	class->read = vips_target_read_real;
  289|      1|	class->seek = vips_target_seek_real;
  290|      1|	class->end = vips_target_end_real;
  291|      1|	class->finish = vips_target_finish_real;
  292|       |
  293|      1|	VIPS_ARG_BOOL(class, "memory", 3,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  294|      1|		_("Memory"),
  295|      1|		_("File descriptor should output to memory"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsTarget, memory),
  298|      1|		FALSE);
  299|       |
  300|       |	/* SET_ALWAYS means that blob is set by C and the obj system is not
  301|       |	 * involved in creation or destruction. It can be read at any time.
  302|       |	 */
  303|      1|	VIPS_ARG_BOXED(class, "blob", 4,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  304|      1|		_("Blob"),
  305|      1|		_("Blob to save to"),
  306|      1|		VIPS_ARGUMENT_SET_ALWAYS,
  307|      1|		G_STRUCT_OFFSET(VipsTarget, blob),
  308|      1|		VIPS_TYPE_BLOB);
  309|      1|}
target.c:vips_target_finalize:
   76|  15.5k|{
   77|  15.5k|	VipsTarget *target = VIPS_TARGET(gobject);
  ------------------
  |  |  382|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  15.5k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
   78|       |
   79|  15.5k|	VIPS_DEBUG_MSG("vips_target_finalize:\n");
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|       |
   81|  15.5k|	if (target->memory_buffer) {
  ------------------
  |  Branch (81:6): [True: 8.25k, False: 7.30k]
  ------------------
   82|  8.25k|		g_string_free(target->memory_buffer, TRUE);
  ------------------
  |  |  798|  8.25k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  8.25k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   83|  8.25k|		target->memory_buffer = NULL;
   84|  8.25k|	}
   85|       |
   86|  15.5k|	if (target->blob) {
  ------------------
  |  Branch (86:6): [True: 0, False: 15.5k]
  ------------------
   87|      0|		vips_area_unref(VIPS_AREA(target->blob));
  ------------------
  |  |  137|      0|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
   88|      0|		target->blob = NULL;
   89|      0|	}
   90|       |
   91|  15.5k|	if (target->delete_on_close &&
  ------------------
  |  Branch (91:6): [True: 0, False: 15.5k]
  ------------------
   92|  15.5k|		target->delete_on_close_filename)
  ------------------
  |  Branch (92:3): [True: 0, False: 0]
  ------------------
   93|      0|		g_unlink(target->delete_on_close_filename);
   94|       |
   95|  15.5k|	VIPS_FREE(target->delete_on_close_filename);
  ------------------
  |  |   50|  15.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  15.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.5k|	{ \
  |  |  |  |   43|  15.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 15.5k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  15.5k|	} \
  |  |  |  |   48|  15.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|       |
   97|  15.5k|	G_OBJECT_CLASS(vips_target_parent_class)->finalize(gobject);
  ------------------
  |  |   58|  15.5k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  15.5k|}
target.c:vips_target_build:
  102|  15.5k|{
  103|  15.5k|	VipsConnection *connection = VIPS_CONNECTION(object);
  ------------------
  |  |   48|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  15.5k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  104|  15.5k|	VipsTarget *target = VIPS_TARGET(object);
  ------------------
  |  |  382|  15.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  15.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  15.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  15.5k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
  105|       |
  106|  15.5k|	VIPS_DEBUG_MSG("vips_target_build: %p\n", connection);
  ------------------
  |  |   47|  15.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.5k|	{ \
  |  |   49|  15.5k|		; \
  |  |   50|  15.5k|	} \
  |  |   51|  15.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|       |
  108|  15.5k|	if (VIPS_OBJECT_CLASS(vips_target_parent_class)->build(object))
  ------------------
  |  |  435|  15.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  15.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  15.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:6): [True: 0, False: 15.5k]
  ------------------
  109|      0|		return -1;
  110|       |
  111|  15.5k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (111:6): [True: 0, False: 15.5k]
  ------------------
  112|  15.5k|		vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (112:3): [True: 0, False: 0]
  ------------------
  113|      0|		vips_error(vips_connection_nick(connection),
  114|      0|			"%s", _("don't set 'filename' and 'descriptor'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|      0|		return -1;
  116|      0|	}
  117|       |
  118|  15.5k|	if (connection->filename) {
  ------------------
  |  Branch (118:6): [True: 0, False: 15.5k]
  ------------------
  119|      0|		const char *filename = connection->filename;
  120|       |
  121|      0|		int fd;
  122|       |
  123|       |		/* 0644 is rw user, r group and other.
  124|       |		 */
  125|      0|		if ((fd = vips_tracked_open(filename,
  ------------------
  |  Branch (125:7): [True: 0, False: 0]
  ------------------
  126|      0|				 MODE_READWRITE, 0644)) == -1) {
  ------------------
  |  |   70|      0|#define MODE_READWRITE CLOEXEC(BINARYIZE(O_RDWR | O_CREAT | O_TRUNC))
  |  |  ------------------
  |  |  |  |   68|      0|#define CLOEXEC(M) ((M) | O_CLOEXEC)
  |  |  ------------------
  ------------------
  127|      0|			vips_error_system(errno,
  128|      0|				vips_connection_nick(connection),
  129|      0|				"%s", _("unable to open for write"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  130|      0|			return -1;
  131|      0|		}
  132|       |
  133|      0|		connection->tracked_descriptor = fd;
  134|      0|		connection->descriptor = fd;
  135|      0|	}
  136|  15.5k|	else if (vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (136:11): [True: 0, False: 15.5k]
  ------------------
  137|      0|		connection->descriptor = dup(connection->descriptor);
  138|      0|		connection->close_descriptor = connection->descriptor;
  139|       |
  140|       |#ifdef G_OS_WIN32
  141|       |		/* Windows will create eg. stdin and stdout in text mode.
  142|       |		 * We always write in binary mode.
  143|       |		 */
  144|       |		_setmode(connection->descriptor, _O_BINARY);
  145|       |#endif /*G_OS_WIN32*/
  146|      0|	}
  147|  15.5k|	else if (target->memory)
  ------------------
  |  Branch (147:11): [True: 15.5k, False: 0]
  ------------------
  148|  15.5k|		target->memory_buffer =
  149|  15.5k|			g_string_sized_new(VIPS_TARGET_BUFFER_SIZE);
  ------------------
  |  |  397|  15.5k|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  150|       |
  151|  15.5k|	return 0;
  152|  15.5k|}
target.c:vips_target_write_real:
  156|  11.3k|{
  157|  11.3k|	VipsConnection *connection = VIPS_CONNECTION(target);
  ------------------
  |  |   48|  11.3k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  11.3k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  11.3k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  11.3k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  158|       |
  159|  11.3k|	gint64 result;
  160|       |
  161|  11.3k|	VIPS_DEBUG_MSG("vips_target_write_real: %zd bytes\n", length);
  ------------------
  |  |   47|  11.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.3k|	{ \
  |  |   49|  11.3k|		; \
  |  |   50|  11.3k|	} \
  |  |   51|  11.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|       |
  163|  11.3k|	if (target->memory_buffer) {
  ------------------
  |  Branch (163:6): [True: 11.3k, False: 0]
  ------------------
  164|  11.3k|		VIPS_DEBUG_MSG("vips_target_write_real: to position %zd\n",
  ------------------
  |  |   47|  11.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.3k|	{ \
  |  |   49|  11.3k|		; \
  |  |   50|  11.3k|	} \
  |  |   51|  11.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|  11.3k|			target->position);
  166|       |
  167|  11.3k|		g_string_overwrite_len(target->memory_buffer, target->position,
  168|  11.3k|			data, length);
  169|  11.3k|		target->position += length;
  170|  11.3k|		result = length;
  171|  11.3k|	}
  172|      0|	else
  173|      0|		result = write(connection->descriptor, data, length);
  174|       |
  175|  11.3k|	return result;
  176|  11.3k|}
target.c:vips_target_init:
  313|  15.5k|{
  314|  15.5k|	target->blob = vips_blob_new(NULL, NULL, 0);
  315|  15.5k|	target->write_point = 0;
  316|  15.5k|}
target.c:vips_target_flush:
  487|  11.3k|{
  488|  11.3k|	g_assert(target->write_point >= 0);
  ------------------
  |  |  166|  11.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|  11.3k|	g_assert(target->write_point <= VIPS_TARGET_BUFFER_SIZE);
  ------------------
  |  |  166|  11.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|       |
  491|  11.3k|	VIPS_DEBUG_MSG("vips_target_flush:\n");
  ------------------
  |  |   47|  11.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.3k|	{ \
  |  |   49|  11.3k|		; \
  |  |   50|  11.3k|	} \
  |  |   51|  11.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|       |
  493|  11.3k|	if (target->write_point > 0) {
  ------------------
  |  Branch (493:6): [True: 11.3k, False: 0]
  ------------------
  494|  11.3k|		if (vips_target_write_unbuffered(target,
  ------------------
  |  Branch (494:7): [True: 0, False: 11.3k]
  ------------------
  495|  11.3k|				target->output_buffer, target->write_point))
  496|      0|			return -1;
  497|  11.3k|		target->write_point = 0;
  498|  11.3k|	}
  499|       |
  500|  11.3k|	return 0;
  501|  11.3k|}
target.c:vips_target_write_unbuffered:
  453|  11.3k|{
  454|  11.3k|	VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target);
  ------------------
  |  |  392|  11.3k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  11.3k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  11.3k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  393|  11.3k|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  455|       |
  456|  11.3k|	VIPS_DEBUG_MSG("vips_target_write_unbuffered:\n");
  ------------------
  |  |   47|  11.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  11.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  11.3k|	{ \
  |  |   49|  11.3k|		; \
  |  |   50|  11.3k|	} \
  |  |   51|  11.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  11.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|       |
  458|  11.3k|	if (target->ended)
  ------------------
  |  Branch (458:6): [True: 0, False: 11.3k]
  ------------------
  459|      0|		return 0;
  460|       |
  461|  22.6k|	while (length > 0) {
  ------------------
  |  Branch (461:9): [True: 11.3k, False: 11.3k]
  ------------------
  462|       |		// write() uses int not size_t on windows, so we need to chunk
  463|       |		// ... max 1gb, why not
  464|  11.3k|		int chunk_size = VIPS_MIN(1024 * 1024 * 1024, length);
  ------------------
  |  |   55|  11.3k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 11.3k]
  |  |  ------------------
  ------------------
  465|  11.3k|		gint64 bytes_written = class->write(target, data, chunk_size);
  466|       |
  467|       |		/* n == 0 isn't strictly an error, but we treat it as
  468|       |		 * one to make sure we don't get stuck in this loop.
  469|       |		 */
  470|  11.3k|		if (bytes_written <= 0) {
  ------------------
  |  Branch (470:7): [True: 0, False: 11.3k]
  ------------------
  471|      0|			vips_error_system(errno,
  472|      0|				vips_connection_nick(
  473|      0|					VIPS_CONNECTION(target)),
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  474|      0|				"%s", _("write error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  475|      0|			return -1;
  476|      0|		}
  477|       |
  478|  11.3k|		length -= bytes_written;
  479|  11.3k|		data = (char *) data + bytes_written;
  480|  11.3k|	}
  481|       |
  482|  11.3k|	return 0;
  483|  11.3k|}

targetcustom.c:vips_target_custom_class_init:
  230|      1|{
  231|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|      1|	VipsTargetClass *target_class = VIPS_TARGET_CLASS(class);
  ------------------
  |  |  385|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  386|      1|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  233|       |
  234|      1|	object_class->nickname = "target_custom";
  235|      1|	object_class->description = _("Custom target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  236|       |
  237|      1|	target_class->write = vips_target_custom_write_real;
  238|      1|	target_class->read = vips_target_custom_read_real;
  239|      1|	target_class->seek = vips_target_custom_seek_real;
  240|      1|	target_class->end = vips_target_custom_end_real;
  241|      1|	target_class->finish = vips_target_custom_finish_real;
  242|       |
  243|      1|	class->write = vips_target_custom_write_signal_real;
  244|      1|	class->read = vips_target_custom_read_signal_real;
  245|      1|	class->seek = vips_target_custom_seek_signal_real;
  246|      1|	class->end = vips_target_custom_end_signal_real;
  247|      1|	class->finish = vips_target_custom_finish_signal_real;
  248|       |
  249|       |	/**
  250|       |	 * VipsTargetCustom::write:
  251|       |	 * @target_custom: the target being operated on
  252|       |	 * @data: %pointer, bytes to write
  253|       |	 * @length: %gint64, number of bytes
  254|       |	 *
  255|       |	 * This signal is emitted to write bytes to the target.
  256|       |	 *
  257|       |	 * Returns: the number of bytes written.
  258|       |	 */
  259|      1|	vips_target_custom_signals[SIG_WRITE] = g_signal_new("write",
  260|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  261|      1|		G_SIGNAL_ACTION,
  262|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, write),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  263|      1|		NULL, NULL,
  264|      1|		vips_INT64__POINTER_INT64,
  265|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|       |	/**
  269|       |	 * VipsTargetCustom::read:
  270|       |	 * @target_custom: the target being operated on
  271|       |	 * @buffer: %gpointer, buffer to fill
  272|       |	 * @size: %gint64, size of buffer
  273|       |	 *
  274|       |	 * This signal is emitted to read bytes from the target into @buffer.
  275|       |	 *
  276|       |	 * The handler for an unreadable target should always return -1.
  277|       |	 *
  278|       |	 * Returns: the number of bytes read. Return 0 for EOF.
  279|       |	 */
  280|      1|	vips_target_custom_signals[SIG_READ] = g_signal_new("read",
  281|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  282|      1|		G_SIGNAL_ACTION,
  283|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, read),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  284|      1|		NULL, NULL,
  285|      1|		vips_INT64__POINTER_INT64,
  286|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|       |
  289|       |	/**
  290|       |	 * VipsTargetCustom::seek:
  291|       |	 * @target_custom: the target being operated on
  292|       |	 * @offset: %gint64, seek offset
  293|       |	 * @whence: %gint, seek origin
  294|       |	 *
  295|       |	 * This signal is emitted to seek the target. The handler should
  296|       |	 * change the target position appropriately.
  297|       |	 *
  298|       |	 * The handler for an unseekable target should always return -1.
  299|       |	 *
  300|       |	 * Returns: the new seek position.
  301|       |	 */
  302|      1|	vips_target_custom_signals[SIG_SEEK] = g_signal_new("seek",
  303|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  304|      1|		G_SIGNAL_ACTION,
  305|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, seek),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  306|      1|		NULL, NULL,
  307|      1|		vips_INT64__INT64_INT,
  308|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|       |
  311|       |	/**
  312|       |	 * VipsTargetCustom::end:
  313|       |	 * @target_custom: the target being operated on
  314|       |	 *
  315|       |	 * This signal is emitted at the end of write. The target should do
  316|       |	 * any finishing necessary.
  317|       |	 *
  318|       |	 * Returns: 0 on success, -1 on error.
  319|       |	 */
  320|      1|	vips_target_custom_signals[SIG_END] = g_signal_new("end",
  321|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  322|      1|		G_SIGNAL_ACTION,
  323|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, end),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  324|      1|		NULL, NULL,
  325|      1|		vips_INT__VOID,
  326|      1|		G_TYPE_INT, 0);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|       |
  328|       |	/**
  329|       |	 * VipsTargetCustom::finish:
  330|       |	 * @target_custom: the target being operated on
  331|       |	 *
  332|       |	 * Deprecated for VipsTargetCustom::end.
  333|       |	 */
  334|      1|	vips_target_custom_signals[SIG_FINISH] = g_signal_new("finish",
  335|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  336|      1|		G_SIGNAL_ACTION,
  337|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, finish),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  338|      1|		NULL, NULL,
  339|      1|		g_cclosure_marshal_VOID__VOID,
  340|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|      1|}

vips_thread_isvips:
   86|   936k|{
   87|   936k|	return g_private_get(&is_vips_thread_key) != NULL;
   88|   936k|}
vips_g_mutex_new:
   95|   962k|{
   96|   962k|	GMutex *mutex;
   97|       |
   98|   962k|	mutex = g_new(GMutex, 1);
  ------------------
  |  |  282|   962k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   962k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   962k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   962k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   962k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   962k|	  gpointer __p;						\
  |  |  |  |  231|   962k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 962k]
  |  |  |  |  ------------------
  |  |  |  |  232|   962k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   962k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 962k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   962k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 962k]
  |  |  |  |  |  Branch (234:26): [True: 962k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   962k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   962k|	  else							\
  |  |  |  |  237|   962k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   962k|	  __p;							\
  |  |  |  |  239|   962k|	}))
  |  |  ------------------
  ------------------
   99|   962k|	g_mutex_init(mutex);
  100|       |
  101|   962k|	return mutex;
  102|   962k|}
vips_g_mutex_free:
  106|   962k|{
  107|   962k|	g_mutex_clear(mutex);
  108|   962k|	g_free(mutex);
  109|   962k|}
vips_g_cond_new:
  113|   205k|{
  114|   205k|	GCond *cond;
  115|       |
  116|   205k|	cond = g_new(GCond, 1);
  ------------------
  |  |  282|   205k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   205k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   205k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   205k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   205k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   205k|	  gpointer __p;						\
  |  |  |  |  231|   205k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 205k]
  |  |  |  |  ------------------
  |  |  |  |  232|   205k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   205k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 205k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   205k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 205k]
  |  |  |  |  |  Branch (234:26): [True: 205k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   205k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   205k|	  else							\
  |  |  |  |  237|   205k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   205k|	  __p;							\
  |  |  |  |  239|   205k|	}))
  |  |  ------------------
  ------------------
  117|   205k|	g_cond_init(cond);
  118|       |
  119|   205k|	return cond;
  120|   205k|}
vips_g_cond_free:
  124|   205k|{
  125|   205k|	g_cond_clear(cond);
  126|   205k|	g_free(cond);
  127|   205k|}
vips_g_thread_new:
  159|      8|{
  160|      8|	GThread *thread;
  161|      8|	VipsThreadInfo *info;
  162|      8|	GError *error = NULL;
  163|       |
  164|      8|	info = g_new(VipsThreadInfo, 1);
  ------------------
  |  |  282|      8|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|      8|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      8|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      8|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      8|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      8|	  gpointer __p;						\
  |  |  |  |  231|      8|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  |  |  232|      8|	    __p = g_##func (__n);				\
  |  |  |  |  233|      8|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 8, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      8|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 8]
  |  |  |  |  |  Branch (234:26): [True: 8, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      8|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      8|	  else							\
  |  |  |  |  237|      8|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      8|	  __p;							\
  |  |  |  |  239|      8|	}))
  |  |  ------------------
  ------------------
  165|      8|	info->domain = domain;
  166|      8|	info->func = func;
  167|      8|	info->data = data;
  168|       |
  169|      8|	thread = g_thread_try_new(domain, vips_thread_run, info, &error);
  170|       |
  171|      8|	VIPS_DEBUG_MSG_RED("vips_g_thread_new: g_thread_create(%s) = %p\n",
  ------------------
  |  |   63|      8|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      8|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      8|	{ \
  |  |   65|      8|		; \
  |  |   66|      8|	} \
  |  |   67|      8|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      8|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|      8|		domain, thread);
  173|       |
  174|      8|	if (!thread) {
  ------------------
  |  Branch (174:6): [True: 0, False: 8]
  ------------------
  175|      0|		if (error)
  ------------------
  |  Branch (175:7): [True: 0, False: 0]
  ------------------
  176|      0|			vips_g_error(&error);
  177|      0|		else
  178|      0|			vips_error(domain,
  179|      0|				"%s", _("unable to create thread"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  180|      0|	}
  181|       |
  182|      8|	return thread;
  183|      8|}
vips_concurrency_set:
  235|      2|{
  236|       |	/* Tell the threads system how much concurrency we expect.
  237|       |	 */
  238|      2|	if (concurrency < 1)
  ------------------
  |  Branch (238:6): [True: 0, False: 2]
  ------------------
  239|      0|		concurrency = vips__concurrency_get_default();
  240|      2|	else if (concurrency > MAX_THREADS) {
  ------------------
  |  |   63|      2|#define MAX_THREADS (1024)
  ------------------
  |  Branch (240:11): [True: 0, False: 2]
  ------------------
  241|      0|		concurrency = MAX_THREADS;
  ------------------
  |  |   63|      0|#define MAX_THREADS (1024)
  ------------------
  242|       |
  243|      0|		g_warning(_("threads clipped to %d"), MAX_THREADS);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  244|      0|	}
  245|       |
  246|      2|	vips__concurrency = concurrency;
  247|      2|}
vips_concurrency_get:
  275|  89.0k|{
  276|  89.0k|	return vips__concurrency;
  277|  89.0k|}
vips_get_tile_size:
  297|  63.0k|{
  298|  63.0k|	const int nthr = vips_concurrency_get();
  299|  63.0k|	const int typical_image_width = 1000;
  300|       |
  301|       |	/* Compiler warnings.
  302|       |	 */
  303|  63.0k|	*tile_width = 1;
  304|  63.0k|	*tile_height = 1;
  305|       |
  306|       |	/* Pick a render geometry.
  307|       |	 */
  308|  63.0k|	switch (im->dhint) {
  309|  2.44k|	case VIPS_DEMAND_STYLE_SMALLTILE:
  ------------------
  |  Branch (309:2): [True: 2.44k, False: 60.5k]
  ------------------
  310|  2.44k|		*tile_width = vips__tile_width;
  311|  2.44k|		*tile_height = vips__tile_height;
  312|  2.44k|		break;
  313|       |
  314|      0|	case VIPS_DEMAND_STYLE_ANY:
  ------------------
  |  Branch (314:2): [True: 0, False: 63.0k]
  ------------------
  315|  20.0k|	case VIPS_DEMAND_STYLE_FATSTRIP:
  ------------------
  |  Branch (315:2): [True: 20.0k, False: 42.9k]
  ------------------
  316|  20.0k|		*tile_width = im->Xsize;
  317|  20.0k|		*tile_height = vips__fatstrip_height;
  318|  20.0k|		break;
  319|       |
  320|  40.5k|	case VIPS_DEMAND_STYLE_THINSTRIP:
  ------------------
  |  Branch (320:2): [True: 40.5k, False: 22.5k]
  ------------------
  321|  40.5k|		*tile_width = im->Xsize;
  322|       |		/* Only enable thinstrip height for very wide images -- the
  323|       |		 * overheads are too high to be worthwhile otherwise.
  324|       |		 */
  325|  40.5k|		*tile_height = im->Xsize > 10000
  ------------------
  |  Branch (325:18): [True: 0, False: 40.5k]
  ------------------
  326|  40.5k|			? vips__thinstrip_height
  327|  40.5k|			: vips__fatstrip_height;
  328|  40.5k|		break;
  329|       |
  330|      0|	default:
  ------------------
  |  Branch (330:2): [True: 0, False: 63.0k]
  ------------------
  331|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  63.0k|	}
  333|       |
  334|       |	/* We can't set n_lines for the current demand style: a later bit of
  335|       |	 * the pipeline might see a different hint and we need to synchronise
  336|       |	 * buffer sizes everywhere.
  337|       |	 *
  338|       |	 * We also can't depend on the current image size, since that might
  339|       |	 * change down the pipeline too. Pick a typical image width.
  340|       |	 *
  341|       |	 * Pick the maximum buffer size we might possibly need, then round up
  342|       |	 * to a multiple of tileheight.
  343|       |	 */
  344|  63.0k|	*n_lines = vips__tile_height *
  345|  63.0k|		VIPS_ROUND_UP(vips__tile_width * nthr,
  ------------------
  |  |  111|  63.0k|#define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P)))
  |  |  ------------------
  |  |  |  |  110|  63.0k|#define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P)))
  |  |  ------------------
  ------------------
  346|  63.0k|			typical_image_width) /
  347|  63.0k|		typical_image_width;
  348|  63.0k|	*n_lines = VIPS_MAX(*n_lines, vips__fatstrip_height * nthr);
  ------------------
  |  |   54|  63.0k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 63.0k, False: 0]
  |  |  ------------------
  ------------------
  349|  63.0k|	*n_lines = VIPS_MAX(*n_lines, vips__thinstrip_height * nthr);
  ------------------
  |  |   54|  63.0k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 63.0k, False: 0]
  |  |  ------------------
  ------------------
  350|  63.0k|	*n_lines = VIPS_ROUND_UP(*n_lines, *tile_height);
  ------------------
  |  |  111|  63.0k|#define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P)))
  |  |  ------------------
  |  |  |  |  110|  63.0k|#define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P)))
  |  |  ------------------
  ------------------
  351|       |
  352|       |	/* We make this assumption in several places.
  353|       |	 */
  354|  63.0k|	g_assert(*n_lines % *tile_height == 0);
  ------------------
  |  |  166|  63.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  63.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  63.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|       |
  356|  63.0k|	VIPS_DEBUG_MSG("vips_get_tile_size: %d by %d patches, "
  ------------------
  |  |   47|  63.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  63.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  63.0k|	{ \
  |  |   49|  63.0k|		; \
  |  |   50|  63.0k|	} \
  |  |   51|  63.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  63.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|  63.0k|				   "groups of %d scanlines\n",
  358|  63.0k|		*tile_width, *tile_height, *n_lines);
  359|  63.0k|}
vips__thread_init:
  363|      2|{
  364|      2|	if (vips__concurrency == 0)
  ------------------
  |  Branch (364:6): [True: 2, False: 0]
  ------------------
  365|      2|		vips__concurrency = vips__concurrency_get_default();
  366|      2|}
thread.c:vips_thread_run:
  137|      8|{
  138|      8|	VipsThreadInfo *info = (VipsThreadInfo *) data;
  139|       |
  140|      8|	void *result;
  141|       |
  142|       |	/* Set this to something (anything) to tag this thread as a vips
  143|       |	 * worker. No need to call g_private_replace as there is no
  144|       |	 * GDestroyNotify handler associated with a worker.
  145|       |	 */
  146|      8|	g_private_set(&is_vips_thread_key, info);
  147|       |
  148|      8|	result = info->func(info->data);
  149|       |
  150|      8|	g_free(info);
  151|       |
  152|      8|	vips_thread_shutdown();
  153|       |
  154|      8|	return result;
  155|      8|}
thread.c:vips__concurrency_get_default:
  190|      2|{
  191|      2|	const char *str;
  192|      2|	int nthr;
  193|      2|	int x;
  194|       |
  195|       |	/* Tell the threads system how much concurrency we expect.
  196|       |	 */
  197|      2|	if (vips__concurrency > 0)
  ------------------
  |  Branch (197:6): [True: 0, False: 2]
  ------------------
  198|      0|		nthr = vips__concurrency;
  199|      2|	else if (
  200|      2|		((str = g_getenv("VIPS_CONCURRENCY"))
  ------------------
  |  Branch (200:3): [True: 0, False: 2]
  ------------------
  201|       |#if ENABLE_DEPRECATED
  202|       |			|| (str = g_getenv("IM_CONCURRENCY"))
  203|       |#endif
  204|      2|				) &&
  205|      2|		(x = atoi(str)) > 0)
  ------------------
  |  Branch (205:3): [True: 0, False: 0]
  ------------------
  206|      0|		nthr = x;
  207|      2|	else
  208|      2|		nthr = g_get_num_processors();
  209|       |
  210|      2|	if (nthr < 1 ||
  ------------------
  |  Branch (210:6): [True: 0, False: 2]
  ------------------
  211|      2|		nthr > MAX_THREADS) {
  ------------------
  |  |   63|      2|#define MAX_THREADS (1024)
  ------------------
  |  Branch (211:3): [True: 0, False: 2]
  ------------------
  212|      0|		nthr = VIPS_CLIP(1, nthr, MAX_THREADS);
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|       |
  214|      0|		g_warning(_("threads clipped to %d"), nthr);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  215|      0|	}
  216|       |
  217|      2|	return nthr;
  218|      2|}

vips__threadpool_init:
  116|      2|{
  117|       |	/* 3 is the useful minimum, and huge values can crash the machine.
  118|       |	 */
  119|      2|	const char *max_threads_env = g_getenv("VIPS_MAX_THREADS");
  120|      2|	int max_threads = max_threads_env
  ------------------
  |  Branch (120:20): [True: 0, False: 2]
  ------------------
  121|      2|		? VIPS_CLIP(3, atoi(max_threads_env), MAX_THREADS)
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|      2|		: 0;
  123|       |
  124|      2|	if (g_getenv("VIPS_STALL"))
  ------------------
  |  Branch (124:6): [True: 0, False: 2]
  ------------------
  125|      0|		vips__stall = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  126|       |
  127|       |	/* max_threads > 0 will create a set of threads on startup. This is
  128|       |	 * necessary for wasm, but may break on systems that try to fork()
  129|       |	 * after init.
  130|       |	 */
  131|      2|	vips__threadset = vips_threadset_new(max_threads);
  132|      2|}
vips_thread_execute:
  153|  55.6k|{
  154|  55.6k|	return vips_threadset_run(vips__threadset, domain, func, data);
  155|  55.6k|}
vips_thread_state_set:
  208|  25.9k|{
  209|  25.9k|	VipsThreadState *state = (VipsThreadState *) object;
  210|  25.9k|	VipsImage *im = (VipsImage *) a;
  211|       |
  212|  25.9k|	VIPS_DEBUG_MSG("vips_thread_state_set: image %p\n", im);
  ------------------
  |  |   47|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  25.9k|	{ \
  |  |   49|  25.9k|		; \
  |  |   50|  25.9k|	} \
  |  |   51|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|       |
  214|  25.9k|	state->im = im;
  215|  25.9k|	state->a = b;
  216|       |
  217|  25.9k|	return NULL;
  218|  25.9k|}
vips__worker_lock:
  455|   138k|{
  456|   138k|	VipsWorker *worker = (VipsWorker *) g_private_get(&worker_key);
  457|       |
  458|   138k|	if (worker)
  ------------------
  |  Branch (458:6): [True: 138k, False: 0]
  ------------------
  459|   138k|		g_atomic_int_inc(&worker->pool->n_waiting);
  ------------------
  |  |  143|   138k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   138k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|   138k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   138k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|   138k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|   138k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|   138k|  }))
  ------------------
  460|   138k|	g_mutex_lock(mutex);
  461|   138k|	if (worker)
  ------------------
  |  Branch (461:6): [True: 138k, False: 0]
  ------------------
  462|   138k|		g_atomic_int_dec_and_test(&worker->pool->n_waiting);
  ------------------
  |  |  149|   138k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   138k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  150|   138k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   138k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  151|   138k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (151:13): [Folded - Ignored]
  |  |  ------------------
  |  |  152|   138k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  153|   138k|  }))
  ------------------
  463|   138k|}
vips__worker_cond_wait:
  467|   117k|{
  468|   117k|	VipsWorker *worker = (VipsWorker *) g_private_get(&worker_key);
  469|       |
  470|   117k|	if (worker)
  ------------------
  |  Branch (470:6): [True: 19.4k, False: 97.7k]
  ------------------
  471|  19.4k|		g_atomic_int_inc(&worker->pool->n_waiting);
  ------------------
  |  |  143|  19.4k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  19.4k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|  19.4k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  19.4k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|  19.4k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|  19.4k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|  19.4k|  }))
  ------------------
  472|   117k|	g_cond_wait(cond, mutex);
  473|   117k|	if (worker)
  ------------------
  |  Branch (473:6): [True: 19.4k, False: 97.7k]
  ------------------
  474|  19.4k|		g_atomic_int_dec_and_test(&worker->pool->n_waiting);
  ------------------
  |  |  149|  19.4k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  19.4k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  150|  19.4k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  19.4k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  151|  19.4k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (151:13): [Folded - Ignored]
  |  |  ------------------
  |  |  152|  19.4k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  153|  19.4k|  }))
  ------------------
  475|   117k|}
vips_threadpool_run:
  655|  25.9k|{
  656|  25.9k|	VipsThreadpool *pool;
  657|  25.9k|	int result;
  658|  25.9k|	int n_waiting;
  659|  25.9k|	int n_working;
  660|       |
  661|  25.9k|	if (!(pool = vips_threadpool_new(im)))
  ------------------
  |  Branch (661:6): [True: 0, False: 25.9k]
  ------------------
  662|      0|		return -1;
  663|       |
  664|  25.9k|	pool->start = start;
  665|  25.9k|	pool->allocate = allocate;
  666|  25.9k|	pool->work = work;
  667|  25.9k|	pool->a = a;
  668|       |
  669|       |	/* Start with half of the max number of threads, then let it drift up
  670|       |	 * and down with load.
  671|       |	 */
  672|  51.9k|	for (n_working = 0; n_working < 1 + pool->max_workers / 2; n_working++)
  ------------------
  |  Branch (672:22): [True: 25.9k, False: 25.9k]
  ------------------
  673|  25.9k|		if (vips_worker_new(pool)) {
  ------------------
  |  Branch (673:7): [True: 0, False: 25.9k]
  ------------------
  674|      0|			vips_threadpool_free(pool);
  675|      0|			return -1;
  676|      0|		}
  677|       |
  678|  39.7k|	for (;;) {
  679|       |		/* Wait for a tick from a worker.
  680|       |		 */
  681|  39.7k|		vips_semaphore_down(&pool->tick);
  682|       |
  683|  39.7k|		VIPS_DEBUG_MSG("vips_threadpool_run: tick\n");
  ------------------
  |  |   47|  39.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.7k|	{ \
  |  |   49|  39.7k|		; \
  |  |   50|  39.7k|	} \
  |  |   51|  39.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  684|       |
  685|  39.7k|		if (pool->stop ||
  ------------------
  |  Branch (685:7): [True: 13.3k, False: 26.3k]
  ------------------
  686|  39.7k|			pool->error)
  ------------------
  |  Branch (686:4): [True: 12.3k, False: 13.9k]
  ------------------
  687|  25.7k|			break;
  688|       |
  689|  13.9k|		if (progress &&
  ------------------
  |  Branch (689:7): [True: 13.9k, False: 0]
  ------------------
  690|  13.9k|			progress(pool->a))
  ------------------
  |  Branch (690:4): [True: 0, False: 13.9k]
  ------------------
  691|      0|			pool->error = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  692|       |
  693|  13.9k|		if (pool->stop ||
  ------------------
  |  Branch (693:7): [True: 226, False: 13.7k]
  ------------------
  694|  13.9k|			pool->error)
  ------------------
  |  Branch (694:4): [True: 0, False: 13.7k]
  ------------------
  695|    226|			break;
  696|       |
  697|  13.7k|		n_waiting = g_atomic_int_get(&pool->n_waiting);
  ------------------
  |  |   91|  13.7k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  13.7k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   92|  13.7k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  13.7k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |   93|  13.7k|    gint gaig_temp;                                                          \
  |  |   94|  13.7k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (94:13): [Folded - Ignored]
  |  |  ------------------
  |  |   95|  13.7k|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |   96|  13.7k|    (gint) gaig_temp;                                                        \
  |  |   97|  13.7k|  }))
  ------------------
  698|  13.7k|		VIPS_DEBUG_MSG("n_waiting = %d\n", n_waiting);
  ------------------
  |  |   47|  13.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  13.7k|	{ \
  |  |   49|  13.7k|		; \
  |  |   50|  13.7k|	} \
  |  |   51|  13.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  699|  13.7k|		VIPS_DEBUG_MSG("n_working = %d\n", n_working);
  ------------------
  |  |   47|  13.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  13.7k|	{ \
  |  |   49|  13.7k|		; \
  |  |   50|  13.7k|	} \
  |  |   51|  13.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|  13.7k|		VIPS_DEBUG_MSG("exit = %d\n", pool->exit);
  ------------------
  |  |   47|  13.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  13.7k|	{ \
  |  |   49|  13.7k|		; \
  |  |   50|  13.7k|	} \
  |  |   51|  13.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|       |
  702|  13.7k|		if (n_waiting > 3 &&
  ------------------
  |  Branch (702:7): [True: 0, False: 13.7k]
  ------------------
  703|  13.7k|			n_working > 1) {
  ------------------
  |  Branch (703:4): [True: 0, False: 0]
  ------------------
  704|      0|			VIPS_DEBUG_MSG("shrinking thread pool\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|      0|			g_atomic_int_inc(&pool->exit);
  ------------------
  |  |  143|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|      0|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|      0|  }))
  ------------------
  706|      0|			n_working -= 1;
  707|      0|		}
  708|  13.7k|		else if (n_waiting < 2 &&
  ------------------
  |  Branch (708:12): [True: 13.7k, False: 0]
  ------------------
  709|  13.7k|			n_working < pool->max_workers) {
  ------------------
  |  Branch (709:4): [True: 0, False: 13.7k]
  ------------------
  710|      0|			VIPS_DEBUG_MSG("expanding thread pool\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|      0|			if (vips_worker_new(pool)) {
  ------------------
  |  Branch (711:8): [True: 0, False: 0]
  ------------------
  712|      0|				vips_threadpool_free(pool);
  713|      0|				return -1;
  714|      0|			}
  715|      0|			n_working += 1;
  716|      0|		}
  717|  13.7k|	}
  718|       |
  719|       |	/* This will block until the last worker completes.
  720|       |	 */
  721|  25.9k|	vips_threadpool_wait(pool);
  722|       |
  723|       |	/* Return 0 for success.
  724|       |	 */
  725|  25.9k|	result = pool->error ? -1 : 0;
  ------------------
  |  Branch (725:11): [True: 12.3k, False: 13.5k]
  ------------------
  726|       |
  727|  25.9k|	vips_threadpool_free(pool);
  728|       |
  729|  25.9k|	if (!vips_image_get_concurrency(im, 0))
  ------------------
  |  Branch (729:6): [True: 25.9k, False: 0]
  ------------------
  730|  25.9k|		g_info("threadpool completed with %d workers", n_working);
  ------------------
  |  |  341|  25.9k|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  25.9k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|  25.9k|                               G_LOG_LEVEL_INFO,     \
  |  |  343|  25.9k|                               __VA_ARGS__)
  ------------------
  731|       |
  732|       |	/* "minimise" is only emitted for top-level threadpools.
  733|       |	 */
  734|  25.9k|	if (!vips_image_get_typeof(im, "vips-no-minimise"))
  ------------------
  |  Branch (734:6): [True: 25.9k, False: 0]
  ------------------
  735|  25.9k|		vips_image_minimise_all(im);
  736|       |
  737|  25.9k|	return result;
  738|  25.9k|}
threadpool.c:vips_thread_state_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |
  189|      1|	gobject_class->dispose = vips_thread_state_dispose;
  190|       |
  191|      1|	object_class->build = vips_thread_state_build;
  192|      1|	object_class->nickname = "threadstate";
  193|      1|	object_class->description = _("per-thread state for vipsthreadpool");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  194|      1|}
threadpool.c:vips_thread_state_dispose:
  161|  25.9k|{
  162|  25.9k|	VipsThreadState *state = (VipsThreadState *) gobject;
  163|       |
  164|  25.9k|	VIPS_DEBUG_MSG("vips_thread_state_dispose:\n");
  ------------------
  |  |   47|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  25.9k|	{ \
  |  |   49|  25.9k|		; \
  |  |   50|  25.9k|	} \
  |  |   51|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|       |
  166|  25.9k|	VIPS_UNREF(state->reg);
  ------------------
  |  |   57|  25.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  25.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  25.9k|	{ \
  |  |  |  |   43|  25.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  25.9k|			(void) F((S)); \
  |  |  |  |   45|  25.9k|			(S) = 0; \
  |  |  |  |   46|  25.9k|		} \
  |  |  |  |   47|  25.9k|	} \
  |  |  |  |   48|  25.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|       |
  168|  25.9k|	G_OBJECT_CLASS(vips_thread_state_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  25.9k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  25.9k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  25.9k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|  25.9k|}
threadpool.c:vips_thread_state_build:
  173|  25.9k|{
  174|  25.9k|	VipsThreadState *state = (VipsThreadState *) object;
  175|       |
  176|  25.9k|	if (!(state->reg = vips_region_new(state->im)))
  ------------------
  |  Branch (176:6): [True: 0, False: 25.9k]
  ------------------
  177|      0|		return -1;
  178|       |
  179|  25.9k|	return VIPS_OBJECT_CLASS(vips_thread_state_parent_class)
  ------------------
  |  |  435|  25.9k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  25.9k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  25.9k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|  25.9k|		->build(object);
  181|  25.9k|}
threadpool.c:vips_thread_state_init:
  198|  25.9k|{
  199|  25.9k|	VIPS_DEBUG_MSG("vips_thread_state_init:\n");
  ------------------
  |  |   47|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  25.9k|	{ \
  |  |   49|  25.9k|		; \
  |  |   50|  25.9k|	} \
  |  |   51|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|       |
  201|  25.9k|	state->reg = NULL;
  202|  25.9k|	state->stop = FALSE;
  ------------------
  |  |  794|  25.9k|#define	FALSE	(0)
  ------------------
  203|  25.9k|	state->stall = FALSE;
  ------------------
  |  |  794|  25.9k|#define	FALSE	(0)
  ------------------
  204|  25.9k|}
threadpool.c:vips_threadpool_new:
  502|  25.9k|{
  503|  25.9k|	VipsThreadpool *pool;
  504|  25.9k|	int tile_width;
  505|  25.9k|	int tile_height;
  506|  25.9k|	gint64 n_tiles;
  507|  25.9k|	int n_lines;
  508|       |
  509|       |	/* Allocate and init new thread block.
  510|       |	 */
  511|  25.9k|	if (!(pool = VIPS_NEW(NULL, VipsThreadpool)))
  ------------------
  |  |   70|  25.9k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  25.9k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  25.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  25.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  25.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (511:6): [True: 0, False: 25.9k]
  ------------------
  512|      0|		return NULL;
  513|  25.9k|	pool->im = im;
  514|  25.9k|	pool->allocate = NULL;
  515|  25.9k|	pool->work = NULL;
  516|  25.9k|	pool->allocate_lock = vips_g_mutex_new();
  517|  25.9k|	pool->max_workers = vips_concurrency_get();
  518|  25.9k|	vips_semaphore_init(&pool->n_workers, 0, "n_workers");
  519|  25.9k|	vips_semaphore_init(&pool->tick, 0, "tick");
  520|  25.9k|	pool->error = FALSE;
  ------------------
  |  |  794|  25.9k|#define	FALSE	(0)
  ------------------
  521|  25.9k|	pool->stop = FALSE;
  ------------------
  |  |  794|  25.9k|#define	FALSE	(0)
  ------------------
  522|  25.9k|	pool->exit = 0;
  523|       |
  524|       |	/* If this is a tiny image, we won't need all max_workers threads.
  525|       |	 * Guess how
  526|       |	 * many tiles we might need to cover the image and use that to limit
  527|       |	 * the number of threads we create.
  528|       |	 */
  529|  25.9k|	vips_get_tile_size(im, &tile_width, &tile_height, &n_lines);
  530|  25.9k|	n_tiles = (1 + (gint64) im->Xsize / tile_width) *
  531|  25.9k|		(1 + (gint64) im->Ysize / tile_height);
  532|  25.9k|	n_tiles = VIPS_CLIP(1, n_tiles, 1024);
  ------------------
  |  |   57|  25.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  51.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 25.9k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 25.9k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 25.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  533|  25.9k|	pool->max_workers = VIPS_MIN(pool->max_workers, n_tiles);
  ------------------
  |  |   55|  25.9k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 24.7k, False: 1.22k]
  |  |  ------------------
  ------------------
  534|       |
  535|       |	/* VIPS_META_CONCURRENCY on the image can optionally override
  536|       |	 * concurrency.
  537|       |	 */
  538|  25.9k|	pool->max_workers = vips_image_get_concurrency(im, pool->max_workers);
  539|       |
  540|  25.9k|	VIPS_DEBUG_MSG("vips_threadpool_new: \"%s\" (%p), with %d threads\n",
  ------------------
  |  |   47|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  25.9k|	{ \
  |  |   49|  25.9k|		; \
  |  |   50|  25.9k|	} \
  |  |   51|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  541|  25.9k|		im->filename, pool, pool->max_workers);
  542|       |
  543|  25.9k|	return pool;
  544|  25.9k|}
threadpool.c:vips_worker_new:
  428|  25.9k|{
  429|  25.9k|	VipsWorker *worker;
  430|       |
  431|  25.9k|	if (!(worker = VIPS_NEW(NULL, VipsWorker)))
  ------------------
  |  |   70|  25.9k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  25.9k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  25.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  25.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  25.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (431:6): [True: 0, False: 25.9k]
  ------------------
  432|      0|		return -1;
  433|  25.9k|	worker->pool = pool;
  434|  25.9k|	worker->state = NULL;
  435|       |
  436|       |	/* We can't build the state here, it has to be done by the worker
  437|       |	 * itself the first time that allocate runs so that any regions are
  438|       |	 * owned by the correct thread.
  439|       |	 */
  440|       |
  441|  25.9k|	if (vips_thread_execute("worker", vips_thread_main_loop, worker)) {
  ------------------
  |  Branch (441:6): [True: 0, False: 25.9k]
  ------------------
  442|      0|		g_free(worker);
  443|      0|		return -1;
  444|      0|	}
  445|       |
  446|       |	/* One more worker in the pool.
  447|       |	 */
  448|  25.9k|	vips_semaphore_upn(&pool->n_workers, -1);
  449|       |
  450|  25.9k|	return 0;
  451|  25.9k|}
threadpool.c:vips_thread_main_loop:
  383|  25.9k|{
  384|  25.9k|	VipsWorker *worker = (VipsWorker *) a;
  385|  25.9k|	VipsThreadpool *pool = worker->pool;
  386|       |
  387|  25.9k|	g_assert(pool == worker->pool);
  ------------------
  |  |  166|  25.9k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |
  389|  25.9k|	VIPS_GATE_START("vips_thread_main_loop: thread");
  ------------------
  |  |   41|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  25.9k|	{ \
  |  |   43|  25.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 25.9k]
  |  |  ------------------
  |  |   44|  25.9k|			vips__thread_gate_start(NAME); \
  |  |   45|  25.9k|	} \
  |  |   46|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  390|       |
  391|  25.9k|	g_private_set(&worker_key, worker);
  392|       |
  393|       |	/* Process work units! Always tick, even if we are stopping, so the
  394|       |	 * main thread will wake up for exit.
  395|       |	 */
  396|  91.2k|	while (!pool->stop &&
  ------------------
  |  Branch (396:9): [True: 77.6k, False: 13.5k]
  ------------------
  397|  91.2k|		!worker->stop &&
  ------------------
  |  Branch (397:3): [True: 65.2k, False: 12.3k]
  ------------------
  398|  91.2k|		!pool->error) {
  ------------------
  |  Branch (398:3): [True: 65.2k, False: 0]
  ------------------
  399|  65.2k|		VIPS_GATE_START("vips_worker_work_unit: u");
  ------------------
  |  |   41|  65.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  65.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  65.2k|	{ \
  |  |   43|  65.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 65.2k]
  |  |  ------------------
  |  |   44|  65.2k|			vips__thread_gate_start(NAME); \
  |  |   45|  65.2k|	} \
  |  |   46|  65.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  65.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|  65.2k|		vips_worker_work_unit(worker);
  401|  65.2k|		VIPS_GATE_STOP("vips_worker_work_unit: u");
  ------------------
  |  |   49|  65.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  65.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  65.2k|	{ \
  |  |   51|  65.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 65.2k]
  |  |  ------------------
  |  |   52|  65.2k|			vips__thread_gate_stop(NAME); \
  |  |   53|  65.2k|	} \
  |  |   54|  65.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  65.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|  65.2k|		vips_semaphore_up(&pool->tick);
  403|  65.2k|	}
  404|       |
  405|  25.9k|	VIPS_GATE_STOP("vips_thread_main_loop: thread");
  ------------------
  |  |   49|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  25.9k|	{ \
  |  |   51|  25.9k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 25.9k]
  |  |  ------------------
  |  |   52|  25.9k|			vips__thread_gate_stop(NAME); \
  |  |   53|  25.9k|	} \
  |  |   54|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|       |	/* unreffing the worker state will trigger stop in the threadstate, so
  408|       |	 * we need to single-thread.
  409|       |	 */
  410|  25.9k|	g_mutex_lock(pool->allocate_lock);
  411|       |
  412|  25.9k|	VIPS_FREEF(g_object_unref, worker->state);
  ------------------
  |  |   41|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  25.9k|	{ \
  |  |   43|  25.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  ------------------
  |  |   44|  25.9k|			(void) F((S)); \
  |  |   45|  25.9k|			(S) = 0; \
  |  |   46|  25.9k|		} \
  |  |   47|  25.9k|	} \
  |  |   48|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|       |
  414|  25.9k|	g_mutex_unlock(pool->allocate_lock);
  415|       |
  416|  25.9k|	VIPS_FREE(worker);
  ------------------
  |  |   50|  25.9k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  25.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  25.9k|	{ \
  |  |  |  |   43|  25.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  25.9k|			(void) F((S)); \
  |  |  |  |   45|  25.9k|			(S) = 0; \
  |  |  |  |   46|  25.9k|		} \
  |  |  |  |   47|  25.9k|	} \
  |  |  |  |   48|  25.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|  25.9k|	g_private_set(&worker_key, NULL);
  418|       |
  419|       |	/* We are done: tell the main thread.
  420|       |	 */
  421|  25.9k|	vips_semaphore_upn(&pool->n_workers, 1);
  422|  25.9k|}
threadpool.c:vips_worker_work_unit:
  309|  65.2k|{
  310|  65.2k|	VipsThreadpool *pool = worker->pool;
  311|       |
  312|  65.2k|	VIPS_GATE_START("vips_worker_work_unit: wait");
  ------------------
  |  |   41|  65.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  65.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  65.2k|	{ \
  |  |   43|  65.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 65.2k]
  |  |  ------------------
  |  |   44|  65.2k|			vips__thread_gate_start(NAME); \
  |  |   45|  65.2k|	} \
  |  |   46|  65.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  65.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|       |
  314|  65.2k|	vips__worker_lock(pool->allocate_lock);
  315|       |
  316|  65.2k|	VIPS_GATE_STOP("vips_worker_work_unit: wait");
  ------------------
  |  |   49|  65.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  65.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  65.2k|	{ \
  |  |   51|  65.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 65.2k]
  |  |  ------------------
  |  |   52|  65.2k|			vips__thread_gate_stop(NAME); \
  |  |   53|  65.2k|	} \
  |  |   54|  65.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  65.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|       |	/* Has another worker signaled stop while we've been waiting?
  319|       |	 */
  320|  65.2k|	if (pool->stop) {
  ------------------
  |  Branch (320:6): [True: 0, False: 65.2k]
  ------------------
  321|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  322|      0|		g_mutex_unlock(pool->allocate_lock);
  323|      0|		return;
  324|      0|	}
  325|       |
  326|       |	/* Has a thread been asked to exit? Volunteer if yes.
  327|       |	 */
  328|  65.2k|	if (g_atomic_int_add(&pool->exit, -1) > 0) {
  ------------------
  |  |  162|  65.2k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  65.2k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|  65.2k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  65.2k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  164|  65.2k|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded - Ignored]
  |  |  ------------------
  |  |  165|  65.2k|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  166|  65.2k|  }))
  ------------------
  |  Branch (328:6): [True: 0, False: 65.2k]
  ------------------
  329|       |		/* A thread had been asked to exit, and we've grabbed the
  330|       |		 * flag.
  331|       |		 */
  332|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  333|      0|		g_mutex_unlock(pool->allocate_lock);
  334|      0|		return;
  335|      0|	}
  336|  65.2k|	else {
  337|       |		/* No one had been asked to exit and we've mistakenly taken
  338|       |		 * the exit count below zero. Put it back up again.
  339|       |		 */
  340|  65.2k|		g_atomic_int_inc(&pool->exit);
  ------------------
  |  |  143|  65.2k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  65.2k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|  65.2k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  65.2k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|  65.2k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|  65.2k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|  65.2k|  }))
  ------------------
  341|  65.2k|	}
  342|       |
  343|  65.2k|	if (vips_worker_allocate(worker)) {
  ------------------
  |  Branch (343:6): [True: 0, False: 65.2k]
  ------------------
  344|      0|		pool->error = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  345|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  346|      0|		g_mutex_unlock(pool->allocate_lock);
  347|      0|		return;
  348|      0|	}
  349|       |
  350|       |	/* Have we just signalled stop?
  351|       |	 */
  352|  65.2k|	if (pool->stop) {
  ------------------
  |  Branch (352:6): [True: 13.5k, False: 51.6k]
  ------------------
  353|  13.5k|		worker->stop = TRUE;
  ------------------
  |  |  798|  13.5k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  13.5k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  354|  13.5k|		g_mutex_unlock(pool->allocate_lock);
  355|  13.5k|		return;
  356|  13.5k|	}
  357|       |
  358|  51.6k|	g_mutex_unlock(pool->allocate_lock);
  359|       |
  360|  51.6k|	if (worker->state->stall &&
  ------------------
  |  Branch (360:6): [True: 0, False: 51.6k]
  ------------------
  361|  51.6k|		vips__stall) {
  ------------------
  |  Branch (361:3): [True: 0, False: 0]
  ------------------
  362|       |		/* Sleep for 0.5s. Handy for stressing the seq system. Stall
  363|       |		 * is set by allocate funcs in various places.
  364|       |		 */
  365|      0|		g_usleep(500000);
  366|      0|		worker->state->stall = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  367|      0|		printf("vips_worker_work_unit: stall done, releasing y = %d ...\n",
  368|      0|			worker->state->y);
  369|      0|	}
  370|       |
  371|       |	/* Process a work unit.
  372|       |	 */
  373|  51.6k|	if (pool->work(worker->state, pool->a)) {
  ------------------
  |  Branch (373:6): [True: 12.3k, False: 39.2k]
  ------------------
  374|  12.3k|		worker->stop = TRUE;
  ------------------
  |  |  798|  12.3k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  12.3k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  375|  12.3k|		pool->error = TRUE;
  ------------------
  |  |  798|  12.3k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  12.3k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  376|  12.3k|	}
  377|  51.6k|}
threadpool.c:vips_worker_allocate:
  289|  65.2k|{
  290|  65.2k|	VipsThreadpool *pool = worker->pool;
  291|       |
  292|  65.2k|	g_assert(!pool->stop);
  ------------------
  |  |  166|  65.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  65.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  65.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|       |
  294|  65.2k|	if (!worker->state &&
  ------------------
  |  Branch (294:6): [True: 25.9k, False: 39.2k]
  ------------------
  295|  65.2k|		!(worker->state = pool->start(pool->im, pool->a)))
  ------------------
  |  Branch (295:3): [True: 0, False: 25.9k]
  ------------------
  296|      0|		return -1;
  297|       |
  298|  65.2k|	if (pool->allocate(worker->state, pool->a, &pool->stop))
  ------------------
  |  Branch (298:6): [True: 0, False: 65.2k]
  ------------------
  299|      0|		return -1;
  300|       |
  301|  65.2k|	return 0;
  302|  65.2k|}
threadpool.c:vips_threadpool_free:
  488|  25.9k|{
  489|  25.9k|	VIPS_DEBUG_MSG("vips_threadpool_free: \"%s\" (%p)\n",
  ------------------
  |  |   47|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  25.9k|	{ \
  |  |   49|  25.9k|		; \
  |  |   50|  25.9k|	} \
  |  |   51|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|  25.9k|		pool->im->filename, pool);
  491|       |
  492|  25.9k|	vips_threadpool_wait(pool);
  493|       |
  494|  25.9k|	VIPS_FREEF(vips_g_mutex_free, pool->allocate_lock);
  ------------------
  |  |   41|  25.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  25.9k|	{ \
  |  |   43|  25.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  ------------------
  |  |   44|  25.9k|			(void) F((S)); \
  |  |   45|  25.9k|			(S) = 0; \
  |  |   46|  25.9k|		} \
  |  |   47|  25.9k|	} \
  |  |   48|  25.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  25.9k|	vips_semaphore_destroy(&pool->n_workers);
  496|  25.9k|	vips_semaphore_destroy(&pool->tick);
  497|  25.9k|	VIPS_FREE(pool);
  ------------------
  |  |   50|  25.9k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  25.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  25.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  25.9k|	{ \
  |  |  |  |   43|  25.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 25.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  25.9k|			(void) F((S)); \
  |  |  |  |   45|  25.9k|			(S) = 0; \
  |  |  |  |   46|  25.9k|		} \
  |  |  |  |   47|  25.9k|	} \
  |  |  |  |   48|  25.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  25.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  498|  25.9k|}
threadpool.c:vips_threadpool_wait:
  479|  51.9k|{
  480|       |	/* Wait for them all to exit.
  481|       |	 */
  482|  51.9k|	pool->stop = TRUE;
  ------------------
  |  |  798|  51.9k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  51.9k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  483|  51.9k|	vips_semaphore_downn(&pool->n_workers, 0);
  484|  51.9k|}

vips_threadset_new:
  266|      2|{
  267|      2|	VipsThreadset *set;
  268|       |
  269|      2|	set = g_new0(VipsThreadset, 1);
  ------------------
  |  |  299|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      2|	  gpointer __p;						\
  |  |  |  |  231|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  232|      2|	    __p = g_##func (__n);				\
  |  |  |  |  233|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (234:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      2|	  else							\
  |  |  |  |  237|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      2|	  __p;							\
  |  |  |  |  239|      2|	}))
  |  |  ------------------
  ------------------
  270|      2|	set->queue = g_async_queue_new();
  271|      2|	vips_semaphore_init(&set->idle, 0, "idle");
  272|      2|	set->max_threads = max_threads;
  273|       |
  274|      2|	if (set->max_threads > 0)
  ------------------
  |  Branch (274:6): [True: 0, False: 2]
  ------------------
  275|      0|		for (int i = 0; i < set->max_threads; i++) {
  ------------------
  |  Branch (275:19): [True: 0, False: 0]
  ------------------
  276|      0|			if (!vips_threadset_add_thread(set)) {
  ------------------
  |  Branch (276:8): [True: 0, False: 0]
  ------------------
  277|      0|				vips_threadset_free(set);
  278|      0|				return NULL;
  279|      0|			}
  280|      0|		}
  281|       |
  282|      2|	return set;
  283|      2|}
vips_threadset_run:
  303|  55.6k|{
  304|  55.6k|	VipsThreadExec *task;
  305|       |
  306|  55.6k|	g_async_queue_lock(set->queue);
  307|       |
  308|       |	/* Create a new thread if there are no waiting threads in the queue.
  309|       |	 */
  310|  55.6k|	if (g_async_queue_length_unlocked(set->queue) >= 0)
  ------------------
  |  Branch (310:6): [True: 14, False: 55.6k]
  ------------------
  311|     14|		if (!vips_threadset_add_thread(set)) {
  ------------------
  |  Branch (311:7): [True: 0, False: 14]
  ------------------
  312|      0|			g_async_queue_unlock(set->queue);
  313|       |
  314|       |			/* Thread create has failed.
  315|       |			 */
  316|      0|			return -1;
  317|      0|		}
  318|       |
  319|       |	/* Allocate the task and push it into the queue.
  320|       |	 */
  321|  55.6k|	task = g_new0(VipsThreadExec, 1);
  ------------------
  |  |  299|  55.6k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|  55.6k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  55.6k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  55.6k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  55.6k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  55.6k|	  gpointer __p;						\
  |  |  |  |  231|  55.6k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 55.6k]
  |  |  |  |  ------------------
  |  |  |  |  232|  55.6k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  55.6k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 55.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  55.6k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 55.6k]
  |  |  |  |  |  Branch (234:26): [True: 55.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  55.6k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  55.6k|	  else							\
  |  |  |  |  237|  55.6k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  55.6k|	  __p;							\
  |  |  |  |  239|  55.6k|	}))
  |  |  ------------------
  ------------------
  322|  55.6k|	task->domain = domain;
  323|  55.6k|	task->func = func;
  324|  55.6k|	task->data = data;
  325|       |
  326|  55.6k|	g_async_queue_push_unlocked(set->queue, task);
  327|  55.6k|	g_async_queue_unlock(set->queue);
  328|       |
  329|  55.6k|	return 0;
  330|  55.6k|}
threadset.c:vips_threadset_add_thread:
  212|     14|{
  213|     14|	gboolean reused = FALSE;
  ------------------
  |  |  794|     14|#define	FALSE	(0)
  ------------------
  214|       |
  215|       |	/* There are already sufficient threads running.
  216|       |	 */
  217|     14|	if (set->max_threads > 0 &&
  ------------------
  |  Branch (217:6): [True: 0, False: 14]
  ------------------
  218|     14|		set->n_threads >= set->max_threads)
  ------------------
  |  Branch (218:3): [True: 0, False: 0]
  ------------------
  219|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  220|       |
  221|     14|	if (set->n_idle_threads > 0) {
  ------------------
  |  Branch (221:6): [True: 6, False: 8]
  ------------------
  222|      6|		vips_semaphore_up(&set->idle);
  223|       |
  224|      6|		set->n_idle_threads--;
  225|      6|		reused = TRUE;
  ------------------
  |  |  798|      6|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      6|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  226|      6|	}
  227|       |
  228|     14|	if (!reused) {
  ------------------
  |  Branch (228:6): [True: 8, False: 6]
  ------------------
  229|       |		/* No idle thread was found, we have to start a new one.
  230|       |		 */
  231|      8|		GThread *thread;
  232|       |
  233|      8|		if (!(thread = vips_g_thread_new("libvips worker",
  ------------------
  |  Branch (233:7): [True: 0, False: 8]
  ------------------
  234|      8|				  vips_threadset_work, set)))
  235|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  236|       |
  237|       |		/* Ensure threads are freed on exit.
  238|       |		 */
  239|      8|		g_thread_unref(thread);
  240|       |
  241|      8|		set->n_threads++;
  242|      8|		set->n_threads_highwater =
  243|      8|			VIPS_MAX(set->n_threads_highwater, set->n_threads);
  ------------------
  |  |   54|      8|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 2, False: 6]
  |  |  ------------------
  ------------------
  244|      8|	}
  245|       |
  246|     14|	return TRUE;
  ------------------
  |  |  798|     14|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     14|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  247|     14|}
threadset.c:vips_threadset_work:
  133|      8|{
  134|      8|	VipsThreadset *set = (VipsThreadset *) pointer;
  135|      8|	gboolean cleanup = FALSE;
  ------------------
  |  |  794|      8|#define	FALSE	(0)
  ------------------
  136|       |
  137|      8|	VIPS_DEBUG_MSG("vips_threadset_work: starting %p\n", g_thread_self());
  ------------------
  |  |   47|      8|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      8|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      8|	{ \
  |  |   49|      8|		; \
  |  |   50|      8|	} \
  |  |   51|      8|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      8|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  138|       |
  139|      8|	g_async_queue_lock(set->queue);
  140|       |
  141|  55.6k|	for (;;) {
  142|       |		/* Pop a task from the queue. If the number of threads is limited,
  143|       |		 * this will block until a task becomes available. Otherwise, it
  144|       |		 * waits for at least 1/2 second before being marked as idle.
  145|       |		 */
  146|  55.6k|		VipsThreadExec *task = set->max_threads > 0
  ------------------
  |  Branch (146:26): [True: 0, False: 55.6k]
  ------------------
  147|  55.6k|			? g_async_queue_pop_unlocked(set->queue)
  148|  55.6k|			: g_async_queue_timeout_pop_unlocked(set->queue,
  149|  55.6k|				  G_USEC_PER_SEC / 2);
  ------------------
  |  |   42|  55.6k|#define G_USEC_PER_SEC 1000000
  ------------------
  150|       |
  151|       |		/* Request to exit? Leave this thread.
  152|       |		 */
  153|  55.6k|		if (set->exit) {
  ------------------
  |  Branch (153:7): [True: 0, False: 55.6k]
  ------------------
  154|       |			/* The last thread should cleanup the set.
  155|       |			 */
  156|      0|			cleanup = set->n_threads == 1;
  157|      0|			break;
  158|      0|		}
  159|       |
  160|       |		/* No task available? Wait for being reused.
  161|       |		 */
  162|  55.6k|		if (task == NULL) {
  ------------------
  |  Branch (162:7): [True: 10, False: 55.6k]
  ------------------
  163|     10|			if (!vips_threadset_reuse_wait(set)) {
  ------------------
  |  Branch (163:8): [True: 4, False: 6]
  ------------------
  164|      4|				set->n_idle_threads--;
  165|      4|				break;
  166|      4|			}
  167|       |
  168|      6|			continue;
  169|     10|		}
  170|       |
  171|       |		/* A task was received and there was no request to exit.
  172|       |		 */
  173|  55.6k|		g_async_queue_unlock(set->queue);
  174|       |
  175|       |		/* If we're profiling, attach a prof struct to this thread.
  176|       |		 */
  177|  55.6k|		if (vips__thread_profile)
  ------------------
  |  Branch (177:7): [True: 0, False: 55.6k]
  ------------------
  178|      0|			vips__thread_profile_attach(task->domain);
  179|       |
  180|       |		/* Execute the task.
  181|       |		 */
  182|  55.6k|		task->func(task->data, NULL);
  183|       |
  184|       |		/* Free any thread-private resources -- they will not be
  185|       |		 * useful for the next task to use this thread.
  186|       |		 */
  187|  55.6k|		vips_thread_shutdown();
  188|  55.6k|		VIPS_FREE(task);
  ------------------
  |  |   50|  55.6k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  55.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  55.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  55.6k|	{ \
  |  |  |  |   43|  55.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 55.6k, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   44|  55.6k|			(void) F((S)); \
  |  |  |  |   45|  55.6k|			(S) = 0; \
  |  |  |  |   46|  55.6k|		} \
  |  |  |  |   47|  55.6k|	} \
  |  |  |  |   48|  55.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  55.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|  55.6k|		g_async_queue_lock(set->queue);
  191|  55.6k|	}
  192|       |
  193|       |	/* Timed-out or exit has been requested, decrement number of threads.
  194|       |	 */
  195|      8|	set->n_threads--;
  196|      8|	VIPS_DEBUG_MSG(
  ------------------
  |  |   47|      8|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      8|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      8|	{ \
  |  |   49|      8|		; \
  |  |   50|      8|	} \
  |  |   51|      8|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      8|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      8|		"vips_threadset_work: stopping %p (%d remaining, %d idle)\n",
  198|      8|		g_thread_self(), set->n_threads, set->n_idle_threads);
  199|       |
  200|      8|	g_async_queue_unlock(set->queue);
  201|       |
  202|      8|	if (cleanup)
  ------------------
  |  Branch (202:6): [True: 0, False: 8]
  ------------------
  203|      0|		vips_threadset_free_internal(set);
  204|       |
  205|      8|	return NULL;
  206|      8|}
threadset.c:vips_threadset_reuse_wait:
  102|     10|{
  103|     10|	int result;
  104|       |
  105|       |	/* A superfluous thread? Leave this thread.
  106|       |	 */
  107|     10|	if (++set->n_idle_threads > max_idle_threads)
  ------------------
  |  Branch (107:6): [True: 4, False: 6]
  ------------------
  108|      4|		return FALSE;
  ------------------
  |  |  794|      4|#define	FALSE	(0)
  ------------------
  109|       |
  110|      6|	g_async_queue_unlock(set->queue);
  111|       |
  112|       |	/* Wait for at least 15 seconds before leaving this thread.
  113|       |	 */
  114|      6|	result = vips_semaphore_down_timeout(&set->idle, max_idle_time);
  115|       |
  116|      6|	g_async_queue_lock(set->queue);
  117|       |
  118|      6|	return result != -1;
  119|     10|}

vips_area_copy:
  139|  1.71M|{
  140|  1.71M|	g_mutex_lock(area->lock);
  141|       |
  142|  1.71M|	g_assert(area->count > 0);
  ------------------
  |  |  166|  1.71M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.71M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.71M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|       |
  144|  1.71M|	area->count += 1;
  145|       |
  146|       |#ifdef DEBUG
  147|       |	printf("vips_area_copy: %p count = %d\n", area, area->count);
  148|       |#endif /*DEBUG*/
  149|       |
  150|  1.71M|	g_mutex_unlock(area->lock);
  151|       |
  152|  1.71M|	return area;
  153|  1.71M|}
vips_area_free_cb:
  157|   331k|{
  158|   331k|	g_free(mem);
  159|       |
  160|   331k|	return 0;
  161|   331k|}
vips_area_unref:
  177|  2.25M|{
  178|  2.25M|	g_mutex_lock(area->lock);
  179|       |
  180|  2.25M|	g_assert(area->count > 0);
  ------------------
  |  |  166|  2.25M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.25M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.25M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|       |
  182|  2.25M|	area->count -= 1;
  183|       |
  184|       |#ifdef DEBUG
  185|       |	printf("vips_area_unref: %p count = %d\n", area, area->count);
  186|       |#endif /*DEBUG*/
  187|       |
  188|  2.25M|	if (vips__leak) {
  ------------------
  |  Branch (188:6): [True: 0, False: 2.25M]
  ------------------
  189|      0|		g_mutex_lock(&vips__global_lock);
  190|      0|		g_assert(g_slist_find(vips_area_all, area));
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      0|		g_mutex_unlock(&vips__global_lock);
  192|      0|	}
  193|       |
  194|  2.25M|	if (area->count == 0) {
  ------------------
  |  Branch (194:6): [True: 547k, False: 1.71M]
  ------------------
  195|   547k|		vips_area_free(area);
  196|       |
  197|   547k|		g_mutex_unlock(area->lock);
  198|       |
  199|   547k|		VIPS_FREEF(vips_g_mutex_free, area->lock);
  ------------------
  |  |   41|   547k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   547k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   547k|	{ \
  |  |   43|   547k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 547k, False: 0]
  |  |  ------------------
  |  |   44|   547k|			(void) F((S)); \
  |  |   45|   547k|			(S) = 0; \
  |  |   46|   547k|		} \
  |  |   47|   547k|	} \
  |  |   48|   547k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   547k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|       |
  201|   547k|		g_free(area);
  202|       |
  203|   547k|		if (vips__leak) {
  ------------------
  |  Branch (203:7): [True: 0, False: 547k]
  ------------------
  204|      0|			g_mutex_lock(&vips__global_lock);
  205|      0|			vips_area_all = g_slist_remove(vips_area_all, area);
  206|      0|			g_mutex_unlock(&vips__global_lock);
  207|      0|		}
  208|       |
  209|       |#ifdef DEBUG
  210|       |		g_mutex_lock(&vips__global_lock);
  211|       |		printf("vips_area_unref: free .. total = %d\n",
  212|       |			g_slist_length(vips_area_all));
  213|       |		g_mutex_unlock(&vips__global_lock);
  214|       |#endif /*DEBUG*/
  215|   547k|	}
  216|  1.71M|	else
  217|  1.71M|		g_mutex_unlock(area->lock);
  218|  2.25M|}
vips_area_new:
  254|   547k|{
  255|   547k|	VipsArea *area;
  256|       |
  257|   547k|	area = g_new(VipsArea, 1);
  ------------------
  |  |  282|   547k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   547k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   547k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   547k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   547k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   547k|	  gpointer __p;						\
  |  |  |  |  231|   547k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 547k]
  |  |  |  |  ------------------
  |  |  |  |  232|   547k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   547k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 547k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   547k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 547k]
  |  |  |  |  |  Branch (234:26): [True: 547k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   547k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   547k|	  else							\
  |  |  |  |  237|   547k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   547k|	  __p;							\
  |  |  |  |  239|   547k|	}))
  |  |  ------------------
  ------------------
  258|   547k|	area->count = 1;
  259|   547k|	area->lock = vips_g_mutex_new();
  260|   547k|	area->length = 0;
  261|   547k|	area->data = data;
  262|   547k|	area->free_fn = free_fn;
  263|   547k|	area->type = 0;
  264|   547k|	area->sizeof_type = 0;
  265|       |
  266|   547k|	if (vips__leak) {
  ------------------
  |  Branch (266:6): [True: 0, False: 547k]
  ------------------
  267|      0|		g_mutex_lock(&vips__global_lock);
  268|      0|		vips_area_all = g_slist_prepend(vips_area_all, area);
  269|      0|		g_mutex_unlock(&vips__global_lock);
  270|      0|	}
  271|       |
  272|       |#ifdef DEBUG
  273|       |	g_mutex_lock(&vips__global_lock);
  274|       |	printf("vips_area_new: %p count = %d (%d in total)\n",
  275|       |		area, area->count,
  276|       |		g_slist_length(vips_area_all));
  277|       |	g_mutex_unlock(&vips__global_lock);
  278|       |#endif /*DEBUG*/
  279|       |
  280|   547k|	return area;
  281|   547k|}
vips_area_new_array:
  323|  22.3k|{
  324|  22.3k|	VipsArea *area;
  325|  22.3k|	void *array;
  326|       |
  327|  22.3k|	array = g_malloc(n * sizeof_type);
  328|  22.3k|	area = vips_area_new((VipsCallbackFn) vips_area_free_cb, array);
  329|  22.3k|	area->n = n;
  330|  22.3k|	area->length = n * sizeof_type;
  331|  22.3k|	area->type = type;
  332|  22.3k|	area->sizeof_type = sizeof_type;
  333|       |
  334|  22.3k|	return area;
  335|  22.3k|}
vips_area_get_data:
  399|   210k|{
  400|   210k|	if (!area)
  ------------------
  |  Branch (400:6): [True: 0, False: 210k]
  ------------------
  401|      0|		return NULL;
  402|       |
  403|   210k|	if (length)
  ------------------
  |  Branch (403:6): [True: 193k, False: 16.8k]
  ------------------
  404|   193k|		*length = area->length;
  405|   210k|	if (n)
  ------------------
  |  Branch (405:6): [True: 0, False: 210k]
  ------------------
  406|      0|		*n = area->n;
  407|   210k|	if (type)
  ------------------
  |  Branch (407:6): [True: 0, False: 210k]
  ------------------
  408|      0|		*type = area->type;
  409|   210k|	if (sizeof_type)
  ------------------
  |  Branch (409:6): [True: 0, False: 210k]
  ------------------
  410|      0|		*sizeof_type = area->sizeof_type;
  411|       |
  412|   210k|	return area->data;
  413|   210k|}
vips_ref_string_new:
  577|   290k|{
  578|   290k|	VipsArea *area;
  579|       |
  580|   290k|	char *utf8_str = g_utf8_make_valid(str, -1);
  581|       |
  582|   290k|	area = vips_area_new((VipsCallbackFn) vips_area_free_cb, utf8_str);
  583|       |
  584|       |	/* Handy place to cache this.
  585|       |	 */
  586|   290k|	area->length = strlen(utf8_str);
  587|       |
  588|   290k|	return (VipsRefString *) area;
  589|   290k|}
vips_blob_new:
  653|   234k|{
  654|   234k|	VipsArea *area;
  655|       |
  656|   234k|	area = vips_area_new(free_fn, (void *) data);
  657|   234k|	area->length = length;
  658|       |
  659|   234k|	return (VipsBlob *) area;
  660|   234k|}
vips_blob_get:
  702|   174k|{
  703|   174k|	return vips_area_get_data(VIPS_AREA(blob),
  ------------------
  |  |  137|   174k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  704|   174k|		length, NULL, NULL, NULL);
  705|   174k|}
vips_blob_set:
  724|  7.30k|{
  725|  7.30k|	VipsArea *area = VIPS_AREA(blob);
  ------------------
  |  |  137|  7.30k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  726|       |
  727|  7.30k|	g_mutex_lock(area->lock);
  728|       |
  729|  7.30k|	vips_area_free(area);
  730|       |
  731|  7.30k|	area->free_fn = free_fn;
  732|  7.30k|	area->length = length;
  733|  7.30k|	area->data = (void *) data;
  734|       |
  735|  7.30k|	g_mutex_unlock(area->lock);
  736|  7.30k|}
vips_array_double_new:
 1069|     54|{
 1070|     54|	VipsArea *area;
 1071|     54|	double *array_copy;
 1072|       |
 1073|     54|	area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n);
  ------------------
  |  |  148|     54|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|     54|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     54|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|     54|	array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL);
 1075|     54|	memcpy(array_copy, array, n * sizeof(double));
 1076|       |
 1077|     54|	return (VipsArrayDouble *) area;
 1078|     54|}
vips_array_double_newv:
 1094|  16.7k|{
 1095|  16.7k|	va_list ap;
 1096|  16.7k|	VipsArea *area;
 1097|  16.7k|	double *array;
 1098|  16.7k|	int i;
 1099|       |
 1100|  16.7k|	area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n);
  ------------------
  |  |  148|  16.7k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|  16.7k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  16.7k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|  16.7k|	array = vips_area_get_data(area, NULL, NULL, NULL, NULL);
 1102|       |
 1103|  16.7k|	va_start(ap, n);
 1104|  33.5k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (1104:14): [True: 16.7k, False: 16.7k]
  ------------------
 1105|  16.7k|		array[i] = va_arg(ap, double);
 1106|  16.7k|	va_end(ap);
 1107|       |
 1108|  16.7k|	return (VipsArrayDouble *) area;
 1109|  16.7k|}
vips_array_double_get:
 1122|  1.08k|{
 1123|  1.08k|	VipsArea *area = VIPS_AREA(array);
  ------------------
  |  |  137|  1.08k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1124|       |
 1125|  1.08k|	g_assert(area->type == G_TYPE_DOUBLE);
  ------------------
  |  |  166|  1.08k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.08k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.08k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1126|       |
 1127|  1.08k|	if (n)
  ------------------
  |  Branch (1127:6): [True: 0, False: 1.08k]
  ------------------
 1128|      0|		*n = area->n;
 1129|       |
 1130|  1.08k|	return VIPS_ARRAY_ADDR(array, 0);
  ------------------
  |  |  127|  1.08k|	((void *) ((VipsPel *) VIPS_AREA(X)->data + \
  |  |  ------------------
  |  |  |  |  137|  1.08k|#define VIPS_AREA(X) ((VipsArea *) (X))
  |  |  ------------------
  |  |  128|  1.08k|		VIPS_AREA(X)->sizeof_type * (I)))
  |  |  ------------------
  |  |  |  |  137|  1.08k|#define VIPS_AREA(X) ((VipsArea *) (X))
  |  |  ------------------
  ------------------
 1131|  1.08k|}
vips_value_get_area:
 1536|  19.3k|{
 1537|  19.3k|	VipsArea *area;
 1538|       |
 1539|  19.3k|	area = g_value_get_boxed(value);
 1540|       |
 1541|  19.3k|	return vips_area_get_data(area, length, NULL, NULL, NULL);
 1542|  19.3k|}
vips_value_set_ref_string:
 1631|   290k|{
 1632|   290k|	VipsRefString *ref_str;
 1633|       |
 1634|   290k|	g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING);
  ------------------
  |  |  166|   290k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   290k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   290k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1635|       |
 1636|   290k|	ref_str = vips_ref_string_new(str);
 1637|   290k|	g_value_set_boxed(value, ref_str);
 1638|   290k|	vips_area_unref(VIPS_AREA(ref_str));
  ------------------
  |  |  137|   290k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1639|   290k|}
vips_value_set_blob:
 1662|  19.0k|{
 1663|  19.0k|	VipsBlob *blob;
 1664|       |
 1665|  19.0k|	g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_BLOB);
  ------------------
  |  |  166|  19.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  19.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|       |
 1667|  19.0k|	blob = vips_blob_new(free_fn, data, length);
 1668|  19.0k|	g_value_set_boxed(value, blob);
 1669|  19.0k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  19.0k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1670|  19.0k|}
vips_value_get_blob:
 1717|  19.3k|{
 1718|  19.3k|	return vips_value_get_area(value, length);
 1719|  19.3k|}
vips_value_set_array:
 1735|  2.15k|{
 1736|  2.15k|	VipsArea *area;
 1737|       |
 1738|  2.15k|	area = vips_area_new_array(type, sizeof_type, n);
 1739|  2.15k|	g_value_set_boxed(value, area);
 1740|  2.15k|	vips_area_unref(area);
 1741|  2.15k|}
vips_value_get_array:
 1761|  2.15k|{
 1762|  2.15k|	VipsArea *area;
 1763|       |
 1764|       |	/* Can't check value type, because we may get called from
 1765|       |	 * vips_*_get_type().
 1766|       |	 */
 1767|       |
 1768|  2.15k|	if (!(area = g_value_get_boxed(value)))
  ------------------
  |  Branch (1768:6): [True: 0, False: 2.15k]
  ------------------
 1769|      0|		return NULL;
 1770|  2.15k|	if (n)
  ------------------
  |  Branch (1770:6): [True: 0, False: 2.15k]
  ------------------
 1771|      0|		*n = area->n;
 1772|  2.15k|	if (type)
  ------------------
  |  Branch (1772:6): [True: 0, False: 2.15k]
  ------------------
 1773|      0|		*type = area->type;
 1774|  2.15k|	if (sizeof_type)
  ------------------
  |  Branch (1774:6): [True: 0, False: 2.15k]
  ------------------
 1775|      0|		*sizeof_type = area->sizeof_type;
 1776|       |
 1777|  2.15k|	return area->data;
 1778|  2.15k|}
vips_value_get_array_int:
 1794|  1.39k|{
 1795|  1.39k|	return vips_value_get_array(value, n, NULL, NULL);
 1796|  1.39k|}
vips_value_set_array_int:
 1810|  1.39k|{
 1811|  1.39k|	vips_value_set_array(value, n, G_TYPE_INT, sizeof(int));
  ------------------
  |  |   94|  1.39k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|  1.39k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.39k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1812|       |
 1813|  1.39k|	if (array) {
  ------------------
  |  Branch (1813:6): [True: 1.39k, False: 0]
  ------------------
 1814|  1.39k|		int *array_copy;
 1815|       |
 1816|  1.39k|		array_copy = vips_value_get_array_int(value, NULL);
 1817|  1.39k|		memcpy(array_copy, array, n * sizeof(int));
 1818|  1.39k|	}
 1819|  1.39k|}
vips_value_get_array_double:
 1835|    757|{
 1836|    757|	return vips_value_get_array(value, n, NULL, NULL);
 1837|    757|}
vips_value_set_array_double:
 1851|    757|{
 1852|    757|	vips_value_set_array(value, n, G_TYPE_DOUBLE, sizeof(double));
  ------------------
  |  |  148|    757|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|    757|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    757|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1853|       |
 1854|    757|	if (array) {
  ------------------
  |  Branch (1854:6): [True: 757, False: 0]
  ------------------
 1855|    757|		double *array_copy;
 1856|       |
 1857|    757|		array_copy = vips_value_get_array_double(value, NULL);
 1858|    757|		memcpy(array_copy, array, n * sizeof(double));
 1859|    757|	}
 1860|    757|}
vips__meta_init_types:
 1941|      2|{
 1942|      2|	(void) vips_thing_get_type();
 1943|      2|	(void) vips_save_string_get_type();
 1944|      2|	(void) vips_area_get_type();
 1945|      2|	(void) vips_ref_string_get_type();
 1946|      2|	(void) vips_blob_get_type();
 1947|      2|	(void) vips_array_int_get_type();
 1948|      2|	(void) vips_array_double_get_type();
 1949|      2|	(void) vips_array_image_get_type();
 1950|       |
 1951|       |	/* Register transform functions to convert between an array of
 1952|       |	 * integers and doubles. This is set here to prevent a recursive
 1953|       |	 * call chain.
 1954|       |	 */
 1955|      2|	g_value_register_transform_func(VIPS_TYPE_ARRAY_INT,
  ------------------
  |  |  221|      2|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 1956|      2|		VIPS_TYPE_ARRAY_DOUBLE, transform_array_int_array_double);
  ------------------
  |  |  201|      2|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 1957|      2|	g_value_register_transform_func(VIPS_TYPE_ARRAY_DOUBLE,
  ------------------
  |  |  201|      2|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 1958|      2|		VIPS_TYPE_ARRAY_INT, transform_array_double_array_int);
  ------------------
  |  |  221|      2|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 1959|      2|}
type.c:vips_area_free:
  165|   554k|{
  166|   554k|	if (area->free_fn &&
  ------------------
  |  Branch (166:6): [True: 331k, False: 223k]
  ------------------
  167|   554k|		area->data) {
  ------------------
  |  Branch (167:3): [True: 331k, False: 0]
  ------------------
  168|   331k|		area->free_fn(area->data, area);
  169|   331k|		area->free_fn = NULL;
  170|   331k|	}
  171|       |
  172|   554k|	area->data = NULL;
  173|   554k|}

vips_slist_map2:
   94|  1.12M|{
   95|  1.12M|	GSList *copy;
   96|  1.12M|	GSList *i;
   97|  1.12M|	void *result;
   98|       |
   99|  1.12M|	copy = g_slist_copy(list);
  100|  1.12M|	result = NULL;
  101|  3.51M|	for (i = copy; i && !(result = fn(i->data, a, b)); i = i->next)
  ------------------
  |  Branch (101:17): [True: 2.43M, False: 1.07M]
  |  Branch (101:22): [True: 2.38M, False: 41.5k]
  ------------------
  102|  2.38M|		;
  103|  1.12M|	g_slist_free(copy);
  104|       |
  105|  1.12M|	return result;
  106|  1.12M|}
vips_iscasepostfix:
  253|  31.1k|{
  254|  31.1k|	int m = strlen(a);
  255|  31.1k|	int n = strlen(b);
  256|       |
  257|  31.1k|	if (n > m)
  ------------------
  |  Branch (257:6): [True: 0, False: 31.1k]
  ------------------
  258|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  259|       |
  260|  31.1k|	return g_ascii_strcasecmp(a + m - n, b) == 0;
  261|  31.1k|}
vips_isprefix:
  269|  41.4M|{
  270|  41.4M|	int i;
  271|       |
  272|  42.4M|	for (i = 0; a[i] && b[i]; i++)
  ------------------
  |  Branch (272:14): [True: 42.3M, False: 84.6k]
  |  Branch (272:22): [True: 25.5M, False: 16.7M]
  ------------------
  273|  25.5M|		if (a[i] != b[i])
  ------------------
  |  Branch (273:7): [True: 24.6M, False: 992k]
  ------------------
  274|  24.6M|			return FALSE;
  ------------------
  |  |  794|  24.6M|#define	FALSE	(0)
  ------------------
  275|       |
  276|       |	/* If there's stuff left in a but b has finished, we must have a
  277|       |	 * mismatch.
  278|       |	 */
  279|  16.8M|	if (a[i] && !b[i])
  ------------------
  |  Branch (279:6): [True: 16.7M, False: 84.6k]
  |  Branch (279:14): [True: 16.7M, False: 0]
  ------------------
  280|  16.7M|		return FALSE;
  ------------------
  |  |  794|  16.7M|#define	FALSE	(0)
  ------------------
  281|       |
  282|  84.6k|	return TRUE;
  ------------------
  |  |  798|  84.6k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  84.6k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  283|  16.8M|}
vips_break_token:
  360|     11|{
  361|     11|	char *p;
  362|     11|	char *q;
  363|       |
  364|       |	/* Is the string empty? If yes, return NULL immediately.
  365|       |	 */
  366|     11|	if (!str ||
  ------------------
  |  Branch (366:6): [True: 0, False: 11]
  ------------------
  367|     11|		!*str)
  ------------------
  |  Branch (367:3): [True: 1, False: 10]
  ------------------
  368|      1|		return NULL;
  369|       |
  370|       |	/* Skip initial break characters.
  371|       |	 */
  372|     10|	p = str + strspn(str, brk);
  373|       |
  374|       |	/* No item?
  375|       |	 */
  376|     10|	if (!*p)
  ------------------
  |  Branch (376:6): [True: 0, False: 10]
  ------------------
  377|      0|		return NULL;
  378|       |
  379|       |	/* We have a token ... search for the first break character after the
  380|       |	 * token. strcspne() allows '\' to escape breaks, see above.
  381|       |	 */
  382|     10|	p += strcspne(p, brk);
  383|       |
  384|       |	/* Is there string left?
  385|       |	 */
  386|     10|	if (*p) {
  ------------------
  |  Branch (386:6): [True: 9, False: 1]
  ------------------
  387|       |		/* Write in an end-of-string mark and return the start of the
  388|       |		 * next token.
  389|       |		 */
  390|      9|		*p++ = '\0';
  391|      9|		p += strspn(p, brk);
  392|      9|	}
  393|       |
  394|       |	/* There may be escaped break characters in str. Loop, squashing them
  395|       |	 * out.
  396|       |	 */
  397|     10|	for (q = strchr(str, '\\'); q && *q; q = strchr(q, '\\')) {
  ------------------
  |  Branch (397:30): [True: 0, False: 10]
  |  Branch (397:35): [True: 0, False: 0]
  ------------------
  398|      0|		memmove(q, q + 1, strlen(q));
  399|       |
  400|       |		/* If there's \\, we don't want to squash out the second \.
  401|       |		 */
  402|      0|		q += 1;
  403|      0|	}
  404|       |
  405|     10|	return p;
  406|     10|}
vips_filename_suffix_match:
  413|  31.1k|{
  414|  31.1k|	char *basename;
  415|  31.1k|	char *q;
  416|  31.1k|	int result;
  417|  31.1k|	const char **p;
  418|       |
  419|       |	/* Drop any directory components.
  420|       |	 */
  421|  31.1k|	basename = g_path_get_basename(path);
  422|       |
  423|       |	/* Zap any trailing [] options.
  424|       |	 */
  425|  31.1k|	if ((q = (char *) vips__find_rightmost_brackets(basename)))
  ------------------
  |  Branch (425:6): [True: 0, False: 31.1k]
  ------------------
  426|      0|		*q = '\0';
  427|       |
  428|  31.1k|	result = 0;
  429|  46.6k|	for (p = suffixes; *p; p++)
  ------------------
  |  Branch (429:21): [True: 31.1k, False: 15.5k]
  ------------------
  430|  31.1k|		if (vips_iscasepostfix(basename, *p)) {
  ------------------
  |  Branch (430:7): [True: 15.5k, False: 15.5k]
  ------------------
  431|  15.5k|			result = 1;
  432|  15.5k|			break;
  433|  15.5k|		}
  434|       |
  435|  31.1k|	g_free(basename);
  436|       |
  437|  31.1k|	return result;
  438|  31.1k|}
vips__gslist_gvalue_merge:
  887|   134k|{
  888|   134k|	const GSList *i, *j;
  889|   134k|	GSList *tail;
  890|       |
  891|   134k|	tail = NULL;
  892|       |
  893|   134k|	for (i = b; i; i = i->next) {
  ------------------
  |  Branch (893:14): [True: 0, False: 134k]
  ------------------
  894|      0|		GValue *value = (GValue *) i->data;
  895|       |
  896|      0|		g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|       |
  898|      0|		for (j = a; j; j = j->next) {
  ------------------
  |  Branch (898:15): [True: 0, False: 0]
  ------------------
  899|      0|			GValue *value2 = (GValue *) j->data;
  900|       |
  901|      0|			g_assert(G_VALUE_TYPE(value2) ==
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  902|      0|				VIPS_TYPE_REF_STRING);
  903|       |
  904|       |			/* Just do a pointer compare ... good enough 99.9% of
  905|       |			 * the time.
  906|       |			 */
  907|      0|			if (vips_value_get_ref_string(value, NULL) ==
  ------------------
  |  Branch (907:8): [True: 0, False: 0]
  ------------------
  908|      0|				vips_value_get_ref_string(value2, NULL))
  909|      0|				break;
  910|      0|		}
  911|       |
  912|      0|		if (!j)
  ------------------
  |  Branch (912:7): [True: 0, False: 0]
  ------------------
  913|      0|			tail = g_slist_prepend(tail,
  914|      0|				vips__gvalue_copy(value));
  915|      0|	}
  916|       |
  917|   134k|	a = g_slist_concat(a, g_slist_reverse(tail));
  918|       |
  919|   134k|	return a;
  920|   134k|}
vips_existsf:
 1047|     11|{
 1048|     11|	va_list ap;
 1049|     11|	char *path;
 1050|     11|	gboolean result;
 1051|       |
 1052|     11|	va_start(ap, name);
 1053|     11|	path = g_strdup_vprintf(name, ap);
 1054|     11|	va_end(ap);
 1055|       |
 1056|     11|	result = g_file_test(path, G_FILE_TEST_EXISTS);
 1057|       |
 1058|     11|	g_free(path);
 1059|       |
 1060|     11|	return result;
 1061|     11|}
vips__token_get:
 1156|   290k|{
 1157|   290k|	const char *q;
 1158|   290k|	int ch;
 1159|   290k|	int n;
 1160|       |
 1161|       |	/* string return defaults to "".
 1162|       |	 */
 1163|   290k|	if (size > 0)
  ------------------
  |  Branch (1163:6): [True: 290k, False: 0]
  ------------------
 1164|   290k|		string[0] = '\0';
 1165|       |
 1166|       |	/* Parse this token with p.
 1167|       |	 */
 1168|   290k|	if (!p)
  ------------------
  |  Branch (1168:6): [True: 0, False: 290k]
  ------------------
 1169|      0|		return NULL;
 1170|       |
 1171|       |	/* Skip initial whitespace.
 1172|       |	 */
 1173|   290k|	p += strspn(p, " \t\n\r");
 1174|   290k|	if (!p[0])
  ------------------
  |  Branch (1174:6): [True: 145k, False: 145k]
  ------------------
 1175|   145k|		return NULL;
 1176|       |
 1177|   145k|	switch ((ch = p[0])) {
 1178|  41.5k|	case '[':
  ------------------
  |  Branch (1178:2): [True: 41.5k, False: 103k]
  ------------------
 1179|  41.5k|		*token = VIPS_TOKEN_LEFT;
 1180|  41.5k|		p += 1;
 1181|  41.5k|		break;
 1182|       |
 1183|  41.5k|	case ']':
  ------------------
  |  Branch (1183:2): [True: 41.5k, False: 103k]
  ------------------
 1184|  41.5k|		*token = VIPS_TOKEN_RIGHT;
 1185|  41.5k|		p += 1;
 1186|  41.5k|		break;
 1187|       |
 1188|      0|	case '=':
  ------------------
  |  Branch (1188:2): [True: 0, False: 145k]
  ------------------
 1189|      0|		*token = VIPS_TOKEN_EQUALS;
 1190|      0|		p += 1;
 1191|      0|		break;
 1192|       |
 1193|      0|	case ',':
  ------------------
  |  Branch (1193:2): [True: 0, False: 145k]
  ------------------
 1194|      0|		*token = VIPS_TOKEN_COMMA;
 1195|      0|		p += 1;
 1196|      0|		break;
 1197|       |
 1198|      0|	case '"':
  ------------------
  |  Branch (1198:2): [True: 0, False: 145k]
  ------------------
 1199|      0|	case '\'':
  ------------------
  |  Branch (1199:2): [True: 0, False: 145k]
  ------------------
 1200|       |		/* Parse a quoted string. Copy up to " or end of string, interpret
 1201|       |		 * any \",
 1202|       |		 */
 1203|      0|		*token = VIPS_TOKEN_STRING;
 1204|       |
 1205|      0|		do {
 1206|       |			/* Move q to the next matching quote, or the end of the string.
 1207|       |			 */
 1208|      0|			if (!(q = strchr(p + 1, ch)))
  ------------------
  |  Branch (1208:8): [True: 0, False: 0]
  ------------------
 1209|      0|				q = p + strlen(p);
 1210|       |
 1211|       |			// number of characters we copy to the output
 1212|      0|			n = VIPS_MIN(q - p - 1, size - 1);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1213|      0|			g_strlcpy(string, p + 1, n + 1);
 1214|       |
 1215|       |			/* We might have stopped at an escaped quote. If the
 1216|       |			 * char before the end is a backslash, swap it for a quote.
 1217|       |			 */
 1218|      0|			if (q[-1] == '\\')
  ------------------
  |  Branch (1218:8): [True: 0, False: 0]
  ------------------
 1219|      0|				string[n - 1] = ch;
 1220|       |
 1221|      0|			string += n;
 1222|      0|			size -= n;
 1223|      0|			p = q;
 1224|      0|		} while (p[0] && p[-1] == '\\');
  ------------------
  |  Branch (1224:12): [True: 0, False: 0]
  |  Branch (1224:20): [True: 0, False: 0]
  ------------------
 1225|       |
 1226|       |		// step over the terminating quote, if we hit one
 1227|      0|		if (p[0] == ch)
  ------------------
  |  Branch (1227:7): [True: 0, False: 0]
  ------------------
 1228|      0|			p += 1;
 1229|       |
 1230|      0|		break;
 1231|       |
 1232|  62.2k|	default:
  ------------------
  |  Branch (1232:2): [True: 62.2k, False: 83.0k]
  ------------------
 1233|       |		/* It's an unquoted string: read up to the next non-string character.
 1234|       |		 * We don't allow two strings next to each other, so the next break
 1235|       |		 * must be brackets, equals, comma.
 1236|       |		 */
 1237|  62.2k|		*token = VIPS_TOKEN_STRING;
 1238|  62.2k|		q = p + strcspn(p, "[]=,");
 1239|       |
 1240|  62.2k|		n = VIPS_MIN(q - p, size);
  ------------------
  |  |   55|  62.2k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 62.2k, False: 0]
  |  |  ------------------
  ------------------
 1241|  62.2k|		g_strlcpy(string, p, n + 1);
 1242|  62.2k|		p = q;
 1243|       |
 1244|       |		/* We remove leading whitespace, so we trim trailing whitespace from
 1245|       |		 * unquoted strings too. Only if the string hasn't been truncated.
 1246|       |		 */
 1247|  62.2k|		if (n != size)
  ------------------
  |  Branch (1247:7): [True: 62.2k, False: 0]
  ------------------
 1248|  62.2k|			while (n > 0 && g_ascii_isspace(string[n - 1])) {
  ------------------
  |  |   81|  62.2k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 62.2k]
  |  |  ------------------
  ------------------
  |  Branch (1248:11): [True: 62.2k, False: 0]
  ------------------
 1249|      0|				string[n - 1] = '\0';
 1250|      0|				n--;
 1251|      0|			}
 1252|       |
 1253|  62.2k|		break;
 1254|   145k|	}
 1255|       |
 1256|   145k|	return p;
 1257|   145k|}
vips__token_must:
 1264|  83.0k|{
 1265|  83.0k|	if (!(p = vips__token_get(p, token, string, size))) {
  ------------------
  |  Branch (1265:6): [True: 0, False: 83.0k]
  ------------------
 1266|      0|		vips_error("get_token",
 1267|      0|			"%s", _("unexpected end of string"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1268|      0|		return NULL;
 1269|      0|	}
 1270|       |
 1271|  83.0k|	return p;
 1272|  83.0k|}
vips__token_need:
 1279|  41.5k|{
 1280|  41.5k|	VipsToken token;
 1281|       |
 1282|  41.5k|	if (!(p = vips__token_must(p, &token, string, size)))
  ------------------
  |  Branch (1282:6): [True: 0, False: 41.5k]
  ------------------
 1283|      0|		return NULL;
 1284|  41.5k|	if (token != need_token) {
  ------------------
  |  Branch (1284:6): [True: 0, False: 41.5k]
  ------------------
 1285|      0|		vips_error("get_token", _("expected %s, saw %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1286|      0|			vips_enum_nick(VIPS_TYPE_TOKEN, need_token),
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 1287|      0|			vips_enum_nick(VIPS_TYPE_TOKEN, token));
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 1288|      0|		return NULL;
 1289|      0|	}
 1290|       |
 1291|  41.5k|	return p;
 1292|  41.5k|}
vips__token_segment:
 1302|  41.5k|{
 1303|  41.5k|	const char *q;
 1304|       |
 1305|  41.5k|	if (!(q = vips__token_must(p, token, string, size)))
  ------------------
  |  Branch (1305:6): [True: 0, False: 41.5k]
  ------------------
 1306|      0|		return NULL;
 1307|       |
 1308|       |	/* If we stopped on [, read up to the matching ].
 1309|       |	 */
 1310|  41.5k|	if (*token == VIPS_TOKEN_STRING &&
  ------------------
  |  Branch (1310:6): [True: 0, False: 41.5k]
  ------------------
 1311|  41.5k|		q[0] == '[') {
  ------------------
  |  Branch (1311:3): [True: 0, False: 0]
  ------------------
 1312|      0|		VipsToken sub_token;
 1313|      0|		char sub_string[VIPS_PATH_MAX];
 1314|      0|		int depth;
 1315|      0|		int i;
 1316|       |
 1317|      0|		depth = 0;
 1318|      0|		do {
 1319|      0|			if (!(q = vips__token_must(q, &sub_token,
  ------------------
  |  Branch (1319:8): [True: 0, False: 0]
  ------------------
 1320|      0|					  sub_string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1321|      0|				return NULL;
 1322|       |
 1323|      0|			switch (sub_token) {
 1324|      0|			case VIPS_TOKEN_LEFT:
  ------------------
  |  Branch (1324:4): [True: 0, False: 0]
  ------------------
 1325|      0|				depth += 1;
 1326|      0|				break;
 1327|       |
 1328|      0|			case VIPS_TOKEN_RIGHT:
  ------------------
  |  Branch (1328:4): [True: 0, False: 0]
  ------------------
 1329|      0|				depth -= 1;
 1330|      0|				break;
 1331|       |
 1332|      0|			default:
  ------------------
  |  Branch (1332:4): [True: 0, False: 0]
  ------------------
 1333|      0|				break;
 1334|      0|			}
 1335|      0|		} while (!(sub_token == VIPS_TOKEN_RIGHT && depth == 0));
  ------------------
  |  Branch (1335:14): [True: 0, False: 0]
  |  Branch (1335:47): [True: 0, False: 0]
  ------------------
 1336|       |
 1337|      0|		i = VIPS_MIN(q - p, size);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1338|      0|		g_strlcpy(string, p, i + 1);
 1339|      0|	}
 1340|       |
 1341|  41.5k|	return q;
 1342|  41.5k|}
vips__find_rightmost_brackets:
 1386|  62.2k|{
 1387|  62.2k|	const char *start[MAX_TOKENS + 1];
 1388|  62.2k|	VipsToken tokens[MAX_TOKENS];
 1389|  62.2k|	char str[VIPS_PATH_MAX];
 1390|  62.2k|	int n, i;
 1391|  62.2k|	int nest;
 1392|       |
 1393|  62.2k|	start[0] = p;
 1394|  62.2k|	for (n = 0;
 1395|   124k|		 n < MAX_TOKENS &&
  ------------------
  |  | 1367|   249k|#define MAX_TOKENS (1000)
  ------------------
  |  Branch (1395:4): [True: 124k, False: 0]
  ------------------
 1396|   124k|		 (p = vips__token_get(start[n], &tokens[n],
  ------------------
  |  Branch (1396:4): [True: 62.2k, False: 62.2k]
  ------------------
 1397|   124k|			  str, VIPS_PATH_MAX));
  ------------------
  |  |  245|   124k|#define VIPS_PATH_MAX (4096)
  ------------------
 1398|  62.2k|		 n++, start[n] = p)
 1399|  62.2k|		;
 1400|       |
 1401|       |	/* Too many tokens?
 1402|       |	 */
 1403|  62.2k|	if (n >= MAX_TOKENS)
  ------------------
  |  | 1367|  62.2k|#define MAX_TOKENS (1000)
  ------------------
  |  Branch (1403:6): [True: 0, False: 62.2k]
  ------------------
 1404|      0|		return NULL;
 1405|       |
 1406|       |	/* No rightmost close bracket?
 1407|       |	 */
 1408|  62.2k|	if (n == 0 ||
  ------------------
  |  Branch (1408:6): [True: 0, False: 62.2k]
  ------------------
 1409|  62.2k|		tokens[n - 1] != VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (1409:3): [True: 62.2k, False: 0]
  ------------------
 1410|  62.2k|		return NULL;
 1411|       |
 1412|      0|	nest = 0;
 1413|      0|	for (i = n - 1; i >= 0; i--) {
  ------------------
  |  Branch (1413:18): [True: 0, False: 0]
  ------------------
 1414|      0|		if (tokens[i] == VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (1414:7): [True: 0, False: 0]
  ------------------
 1415|      0|			nest += 1;
 1416|      0|		else if (tokens[i] == VIPS_TOKEN_LEFT)
  ------------------
  |  Branch (1416:12): [True: 0, False: 0]
  ------------------
 1417|      0|			nest -= 1;
 1418|       |
 1419|      0|		if (nest == 0)
  ------------------
  |  Branch (1419:7): [True: 0, False: 0]
  ------------------
 1420|      0|			break;
 1421|      0|	}
 1422|       |
 1423|       |	/* No matching left bracket?
 1424|       |	 */
 1425|      0|	if (nest != 0)
  ------------------
  |  Branch (1425:6): [True: 0, False: 0]
  ------------------
 1426|      0|		return NULL;
 1427|       |
 1428|       |	/* This should be the matching left.
 1429|       |	 */
 1430|      0|	return start[i];
 1431|      0|}
vips__filename_split8:
 1439|  31.1k|{
 1440|  31.1k|	char *p;
 1441|       |
 1442|  31.1k|	g_strlcpy(filename, name, VIPS_PATH_MAX);
  ------------------
  |  |  245|  31.1k|#define VIPS_PATH_MAX (4096)
  ------------------
 1443|  31.1k|	if ((p = (char *) vips__find_rightmost_brackets(filename))) {
  ------------------
  |  Branch (1443:6): [True: 0, False: 31.1k]
  ------------------
 1444|      0|		g_strlcpy(option_string, p, VIPS_PATH_MAX);
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1445|      0|		*p = '\0';
 1446|      0|	}
 1447|  31.1k|	else
 1448|  31.1k|		g_strlcpy(option_string, "", VIPS_PATH_MAX);
  ------------------
  |  |  245|  31.1k|#define VIPS_PATH_MAX (4096)
  ------------------
 1449|  31.1k|}
vips_amiMSBfirst:
 1482|   172k|{
 1483|       |#if G_BYTE_ORDER == G_BIG_ENDIAN
 1484|       |	return 1;
 1485|       |#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
 1486|       |	return 0;
 1487|       |#else
 1488|       |#error "Byte order not recognised"
 1489|       |#endif
 1490|   172k|}
vips_enum_nick:
 1644|  4.78k|{
 1645|  4.78k|	GEnumValue *value;
 1646|       |
 1647|  4.78k|	if (!(value = g_enum_get_value(g_type_class_ref(enm), v)))
  ------------------
  |  Branch (1647:6): [True: 0, False: 4.78k]
  ------------------
 1648|      0|		return "(null)";
 1649|       |
 1650|  4.78k|	return value->value_nick;
 1651|  4.78k|}
util.c:strcspne:
  292|     10|{
  293|     10|	size_t skip;
  294|       |
  295|       |	/* If \ is one of the reject chars, no need for any looping.
  296|       |	 */
  297|     10|	if (strchr(reject, '\\'))
  ------------------
  |  Branch (297:6): [True: 0, False: 10]
  ------------------
  298|      0|		return strcspn(s, reject);
  299|       |
  300|     10|	skip = 0;
  301|     10|	for (;;) {
  302|     10|		skip += strcspn(s + skip, reject);
  303|       |
  304|       |		/* s[skip] is at the start of the string, or the end, or on a
  305|       |		 * break character.
  306|       |		 */
  307|     10|		if (skip == 0 ||
  ------------------
  |  Branch (307:7): [True: 0, False: 10]
  ------------------
  308|     10|			!s[skip] ||
  ------------------
  |  Branch (308:4): [True: 1, False: 9]
  ------------------
  309|     10|			s[skip - 1] != '\\')
  ------------------
  |  Branch (309:4): [True: 9, False: 0]
  ------------------
  310|     10|			break;
  311|       |
  312|       |		/* So skip points at break char and we have a '\' in the char
  313|       |		 * before. Step over the break.
  314|       |		 */
  315|      0|		skip += 1;
  316|      0|	}
  317|       |
  318|     10|	return skip;
  319|     10|}

vips__vector_init:
   75|      2|{
   76|       |#ifdef HAVE_ORC
   77|       |	orc_init();
   78|       |#endif /*HAVE_ORC*/
   79|       |
   80|       |	/* Check whether any features are being disabled by the environment.
   81|       |	 */
   82|      2|	const char *env;
   83|      2|	if ((env = g_getenv("VIPS_VECTOR")))
  ------------------
  |  Branch (83:6): [True: 0, False: 2]
  ------------------
   84|      0|		return vips_vector_disable_targets(
   85|      0|			g_ascii_strtoll(env, NULL, 0));
   86|       |
   87|       |	/* Look for the deprecated IM_NOVECTOR environment variable as well.
   88|       |	 */
   89|      2|	if (g_getenv("VIPS_NOVECTOR")
  ------------------
  |  Branch (89:6): [True: 0, False: 2]
  ------------------
   90|       |#if ENABLE_DEPRECATED
   91|       |		|| g_getenv("IM_NOVECTOR")
   92|       |#endif
   93|      2|	)
   94|      0|		vips__vector_enabled = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
   95|      2|}

countlines.c:vips_countlines_class_init:
  125|      1|{
  126|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	VIPS_DEBUG_MSG("vips_countlines_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|       |
  131|      1|	gobject_class->set_property = vips_object_set_property;
  132|      1|	gobject_class->get_property = vips_object_get_property;
  133|       |
  134|      1|	vobject_class->nickname = "countlines";
  135|      1|	vobject_class->description = _("count lines in an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  136|      1|	vobject_class->build = vips_countlines_build;
  137|       |
  138|      1|	VIPS_ARG_DOUBLE(class, "nolines", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  139|      1|		_("Nolines"),
  140|      1|		_("Number of lines"),
  141|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  142|      1|		G_STRUCT_OFFSET(VipsCountlines, nolines),
  143|      1|		0, 10000000, 0.0);
  144|       |
  145|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  146|      1|		_("Direction"),
  147|      1|		_("Countlines left-right or up-down"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  149|      1|		G_STRUCT_OFFSET(VipsCountlines, direction),
  150|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  151|      1|}

labelregions.c:vips_labelregions_class_init:
  112|      1|{
  113|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	vobject_class->nickname = "labelregions";
  120|      1|	vobject_class->description = _("label regions in an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|      1|	vobject_class->build = vips_labelregions_build;
  122|       |
  123|      1|	VIPS_ARG_IMAGE(class, "mask", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  124|      1|		_("Mask"),
  125|      1|		_("Mask of region labels"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsLabelregions, mask));
  128|       |
  129|      1|	VIPS_ARG_INT(class, "segments", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  130|      1|		_("Segments"),
  131|      1|		_("Number of discrete contiguous regions"),
  132|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  133|      1|		G_STRUCT_OFFSET(VipsLabelregions, segments),
  134|      1|		0, 1000000000, 0);
  135|      1|}

morph.c:vips_morph_class_init:
  932|      1|{
  933|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  935|       |
  936|      1|	gobject_class->set_property = vips_object_set_property;
  937|      1|	gobject_class->get_property = vips_object_get_property;
  938|       |
  939|       |#ifdef HAVE_ORC
  940|       |	gobject_class->finalize = vips_morph_finalize;
  941|       |#endif /*HAVE_ORC*/
  942|       |
  943|      1|	object_class->nickname = "morph";
  944|      1|	object_class->description = _("morphology operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  945|      1|	object_class->build = vips_morph_build;
  946|       |
  947|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  948|      1|		_("Output"),
  949|      1|		_("Output image"),
  950|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  951|      1|		G_STRUCT_OFFSET(VipsMorph, out));
  952|       |
  953|      1|	VIPS_ARG_IMAGE(class, "mask", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  954|      1|		_("Mask"),
  955|      1|		_("Input matrix image"),
  956|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  957|      1|		G_STRUCT_OFFSET(VipsMorph, mask));
  958|       |
  959|      1|	VIPS_ARG_ENUM(class, "morph", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  960|      1|		_("Morphology"),
  961|      1|		_("Morphological operation to perform"),
  962|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  963|      1|		G_STRUCT_OFFSET(VipsMorph, morph),
  964|      1|		VIPS_TYPE_OPERATION_MORPHOLOGY,
  965|      1|		VIPS_OPERATION_MORPHOLOGY_ERODE);
  966|      1|}

vips_morphology_operation_init:
  137|      2|{
  138|      2|	extern GType vips_morph_get_type(void);
  139|      2|	extern GType vips_rank_get_type(void);
  140|      2|	extern GType vips_countlines_get_type(void);
  141|      2|	extern GType vips_labelregions_get_type(void);
  142|      2|	extern GType vips_fill_nearest_get_type(void);
  143|       |
  144|      2|	vips_morph_get_type();
  145|      2|	vips_rank_get_type();
  146|      2|	vips_countlines_get_type();
  147|      2|	vips_labelregions_get_type();
  148|      2|	vips_fill_nearest_get_type();
  149|      2|}
morphology.c:vips_morphology_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|      1|	gobject_class->set_property = vips_object_set_property;
  112|      1|	gobject_class->get_property = vips_object_get_property;
  113|       |
  114|      1|	vobject_class->nickname = "morphology";
  115|      1|	vobject_class->description = _("morphological operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  116|       |
  117|       |	/* Inputs set by subclassess.
  118|       |	 */
  119|       |
  120|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  121|      1|		_("Input"),
  122|      1|		_("Input image argument"),
  123|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsMorphology, in));
  125|      1|}

nearest.c:vips_fill_nearest_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|       |
  299|      1|	gobject_class->finalize = vips_fill_nearest_finalize;
  300|      1|	gobject_class->set_property = vips_object_set_property;
  301|      1|	gobject_class->get_property = vips_object_get_property;
  302|       |
  303|      1|	vobject_class->nickname = "fill_nearest";
  304|      1|	vobject_class->description =
  305|      1|		_("fill image zeros with nearest non-zero pixel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  306|      1|	vobject_class->build = vips_fill_nearest_build;
  307|       |
  308|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  309|      1|		_("Out"),
  310|      1|		_("Value of nearest non-zero pixel"),
  311|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  312|      1|		G_STRUCT_OFFSET(VipsFillNearest, out));
  313|       |
  314|      1|	VIPS_ARG_IMAGE(class, "distance", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  315|      1|		_("Distance"),
  316|      1|		_("Distance to nearest non-zero pixel"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  318|      1|		G_STRUCT_OFFSET(VipsFillNearest, distance));
  319|      1|}

rank.c:vips_rank_class_init:
  552|      1|{
  553|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  555|       |
  556|      1|	gobject_class->set_property = vips_object_set_property;
  557|      1|	gobject_class->get_property = vips_object_get_property;
  558|       |
  559|      1|	object_class->nickname = "rank";
  560|      1|	object_class->description = _("rank filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  561|      1|	object_class->build = vips_rank_build;
  562|       |
  563|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  564|      1|		_("Output"),
  565|      1|		_("Output image"),
  566|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  567|      1|		G_STRUCT_OFFSET(VipsRank, out));
  568|       |
  569|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  570|      1|		_("Width"),
  571|      1|		_("Window width in pixels"),
  572|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  573|      1|		G_STRUCT_OFFSET(VipsRank, width),
  574|      1|		1, 100000, 11);
  575|       |
  576|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  577|      1|		_("Height"),
  578|      1|		_("Window height in pixels"),
  579|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  580|      1|		G_STRUCT_OFFSET(VipsRank, height),
  581|      1|		1, 100000, 11);
  582|       |
  583|      1|	VIPS_ARG_INT(class, "index", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  584|      1|		_("Index"),
  585|      1|		_("Select pixel at index"),
  586|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  587|      1|		G_STRUCT_OFFSET(VipsRank, index),
  588|      1|		0, 100000000, 50);
  589|      1|}

global_balance.c:vips_globalbalance_class_init:
 1912|      1|{
 1913|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1914|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1915|       |
 1916|      1|	gobject_class->set_property = vips_object_set_property;
 1917|      1|	gobject_class->get_property = vips_object_get_property;
 1918|       |
 1919|      1|	object_class->nickname = "globalbalance";
 1920|      1|	object_class->description = _("global balance an image mosaic");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1921|      1|	object_class->build = vips_globalbalance_build;
 1922|       |
 1923|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1924|      1|		_("Input"),
 1925|      1|		_("Input image"),
 1926|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1927|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, in));
 1928|       |
 1929|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1930|      1|		_("Output"),
 1931|      1|		_("Output image"),
 1932|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1933|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, out));
 1934|       |
 1935|      1|	VIPS_ARG_DOUBLE(class, "gamma", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1936|      1|		_("Gamma"),
 1937|      1|		_("Image gamma"),
 1938|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1939|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, gamma),
 1940|      1|		0.00001, 10, 1.6);
 1941|       |
 1942|      1|	VIPS_ARG_BOOL(class, "int_output", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1943|      1|		_("Int output"),
 1944|      1|		_("Integer output"),
 1945|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1946|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, int_output),
 1947|      1|		FALSE);
 1948|      1|}

match.c:vips_match_class_init:
  184|      1|{
  185|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  187|       |
  188|      1|	gobject_class->set_property = vips_object_set_property;
  189|      1|	gobject_class->get_property = vips_object_get_property;
  190|       |
  191|      1|	object_class->nickname = "match";
  192|      1|	object_class->description = _("first-order match of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	object_class->build = vips_match_build;
  194|       |
  195|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  196|      1|		_("Reference"),
  197|      1|		_("Reference image"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsMatch, ref));
  200|       |
  201|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  202|      1|		_("Secondary"),
  203|      1|		_("Secondary image"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsMatch, sec));
  206|       |
  207|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  208|      1|		_("Output"),
  209|      1|		_("Output image"),
  210|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  211|      1|		G_STRUCT_OFFSET(VipsMatch, out));
  212|       |
  213|      1|	VIPS_ARG_INT(class, "xr1", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  214|      1|		_("xr1"),
  215|      1|		_("Position of first reference tie-point"),
  216|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      1|		G_STRUCT_OFFSET(VipsMatch, xr1),
  218|      1|		-1000000000, 1000000000, 1);
  219|       |
  220|      1|	VIPS_ARG_INT(class, "yr1", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  221|      1|		_("yr1"),
  222|      1|		_("Position of first reference tie-point"),
  223|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  224|      1|		G_STRUCT_OFFSET(VipsMatch, yr1),
  225|      1|		-1000000000, 1000000000, 1);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "xs1", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("xs1"),
  229|      1|		_("Position of first secondary tie-point"),
  230|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsMatch, xs1),
  232|      1|		-1000000000, 1000000000, 1);
  233|       |
  234|      1|	VIPS_ARG_INT(class, "ys1", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  235|      1|		_("ys1"),
  236|      1|		_("Position of first secondary tie-point"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  238|      1|		G_STRUCT_OFFSET(VipsMatch, ys1),
  239|      1|		-1000000000, 1000000000, 1);
  240|       |
  241|      1|	VIPS_ARG_INT(class, "xr2", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  242|      1|		_("xr2"),
  243|      1|		_("Position of second reference tie-point"),
  244|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  245|      1|		G_STRUCT_OFFSET(VipsMatch, xr2),
  246|      1|		-1000000000, 1000000000, 1);
  247|       |
  248|      1|	VIPS_ARG_INT(class, "yr2", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("yr2"),
  250|      1|		_("Position of second reference tie-point"),
  251|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsMatch, yr2),
  253|      1|		-1000000000, 1000000000, 1);
  254|       |
  255|      1|	VIPS_ARG_INT(class, "xs2", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  256|      1|		_("xs2"),
  257|      1|		_("Position of second secondary tie-point"),
  258|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  259|      1|		G_STRUCT_OFFSET(VipsMatch, xs2),
  260|      1|		-1000000000, 1000000000, 1);
  261|       |
  262|      1|	VIPS_ARG_INT(class, "ys2", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  263|      1|		_("ys2"),
  264|      1|		_("Position of second secondary tie-point"),
  265|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsMatch, ys2),
  267|      1|		-1000000000, 1000000000, 1);
  268|       |
  269|      1|	VIPS_ARG_INT(class, "hwindow", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  270|      1|		_("hwindow"),
  271|      1|		_("Half window size"),
  272|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsMatch, hwindow),
  274|      1|		0, 1000000000, 5);
  275|       |
  276|      1|	VIPS_ARG_INT(class, "harea", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  277|      1|		_("harea"),
  278|      1|		_("Half area size"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsMatch, harea),
  281|      1|		0, 1000000000, 15);
  282|       |
  283|      1|	VIPS_ARG_BOOL(class, "search", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  284|      1|		_("Search"),
  285|      1|		_("Search to improve tie-points"),
  286|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  287|      1|		G_STRUCT_OFFSET(VipsMatch, search),
  288|      1|		FALSE);
  289|       |
  290|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 16,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  291|      1|		_("Interpolate"),
  292|      1|		_("Interpolate pixels with this"),
  293|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  294|      1|		G_STRUCT_OFFSET(VipsMatch, interpolate));
  295|      1|}

matrixinvert.c:vips_matrixinvert_class_init:
  430|      1|{
  431|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|      1|	gobject_class->dispose = vips_matrixinvert_dispose;
  435|      1|	gobject_class->set_property = vips_object_set_property;
  436|      1|	gobject_class->get_property = vips_object_get_property;
  437|       |
  438|      1|	vobject_class->nickname = "matrixinvert";
  439|      1|	vobject_class->description = _("invert an matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  440|      1|	vobject_class->build = vips_matrixinvert_build;
  441|       |
  442|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  443|      1|		_("Input"),
  444|      1|		_("An square matrix"),
  445|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  446|      1|		G_STRUCT_OFFSET(VipsMatrixinvert, in));
  447|       |
  448|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  449|      1|		_("Output"),
  450|      1|		_("Output matrix"),
  451|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  452|      1|		G_STRUCT_OFFSET(VipsMatrixinvert, out));
  453|      1|}

merge.c:vips_merge_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  110|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  111|       |
  112|      1|	gobject_class->set_property = vips_object_set_property;
  113|      1|	gobject_class->get_property = vips_object_get_property;
  114|       |
  115|      1|	object_class->nickname = "merge";
  116|      1|	object_class->description = _("merge two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  117|      1|	object_class->build = vips_merge_build;
  118|       |
  119|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  120|       |
  121|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  122|      1|		_("Reference"),
  123|      1|		_("Reference image"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMerge, ref));
  126|       |
  127|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  128|      1|		_("Secondary"),
  129|      1|		_("Secondary image"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsMerge, sec));
  132|       |
  133|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  134|      1|		_("Output"),
  135|      1|		_("Output image"),
  136|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  137|      1|		G_STRUCT_OFFSET(VipsMerge, out));
  138|       |
  139|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  140|      1|		_("Direction"),
  141|      1|		_("Horizontal or vertical merge"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsMerge, direction),
  144|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  145|       |
  146|      1|	VIPS_ARG_INT(class, "dx", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("dx"),
  148|      1|		_("Horizontal displacement from sec to ref"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsMerge, dx),
  151|      1|		-100000000, 1000000000, 1);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "dy", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("dy"),
  155|      1|		_("Vertical displacement from sec to ref"),
  156|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsMerge, dy),
  158|      1|		-100000000, 1000000000, 1);
  159|       |
  160|      1|	VIPS_ARG_INT(class, "mblend", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  161|      1|		_("Max blend"),
  162|      1|		_("Maximum blend size"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsMerge, mblend),
  165|      1|		0, 10000, 10);
  166|      1|}

mosaic.c:vips_mosaic_class_init:
  167|      1|{
  168|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  170|       |
  171|      1|	gobject_class->set_property = vips_object_set_property;
  172|      1|	gobject_class->get_property = vips_object_get_property;
  173|       |
  174|      1|	object_class->nickname = "mosaic";
  175|      1|	object_class->description = _("mosaic two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  176|      1|	object_class->build = vips_mosaic_build;
  177|       |
  178|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  179|      1|		_("Reference"),
  180|      1|		_("Reference image"),
  181|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  182|      1|		G_STRUCT_OFFSET(VipsMosaic, ref));
  183|       |
  184|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  185|      1|		_("Secondary"),
  186|      1|		_("Secondary image"),
  187|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsMosaic, sec));
  189|       |
  190|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  191|      1|		_("Output"),
  192|      1|		_("Output image"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  194|      1|		G_STRUCT_OFFSET(VipsMosaic, out));
  195|       |
  196|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  197|      1|		_("Direction"),
  198|      1|		_("Horizontal or vertical mosaic"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  200|      1|		G_STRUCT_OFFSET(VipsMosaic, direction),
  201|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  202|       |
  203|      1|	VIPS_ARG_INT(class, "xref", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  204|      1|		_("xref"),
  205|      1|		_("Position of reference tie-point"),
  206|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  207|      1|		G_STRUCT_OFFSET(VipsMosaic, xref),
  208|      1|		0, 1000000000, 1);
  209|       |
  210|      1|	VIPS_ARG_INT(class, "yref", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  211|      1|		_("yref"),
  212|      1|		_("Position of reference tie-point"),
  213|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  214|      1|		G_STRUCT_OFFSET(VipsMosaic, yref),
  215|      1|		0, 1000000000, 1);
  216|       |
  217|      1|	VIPS_ARG_INT(class, "xsec", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  218|      1|		_("xsec"),
  219|      1|		_("Position of secondary tie-point"),
  220|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  221|      1|		G_STRUCT_OFFSET(VipsMosaic, xsec),
  222|      1|		0, 1000000000, 1);
  223|       |
  224|      1|	VIPS_ARG_INT(class, "ysec", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  225|      1|		_("ysec"),
  226|      1|		_("Position of secondary tie-point"),
  227|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  228|      1|		G_STRUCT_OFFSET(VipsMosaic, ysec),
  229|      1|		0, 1000000000, 1);
  230|       |
  231|      1|	VIPS_ARG_INT(class, "hwindow", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  232|      1|		_("hwindow"),
  233|      1|		_("Half window size"),
  234|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsMosaic, hwindow),
  236|      1|		0, 1000000000, 5);
  237|       |
  238|      1|	VIPS_ARG_INT(class, "harea", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  239|      1|		_("harea"),
  240|      1|		_("Half area size"),
  241|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsMosaic, harea),
  243|      1|		0, 1000000000, 15);
  244|       |
  245|      1|	VIPS_ARG_INT(class, "mblend", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  246|      1|		_("Max blend"),
  247|      1|		_("Maximum blend size"),
  248|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsMosaic, mblend),
  250|      1|		0, 10000, 10);
  251|       |
  252|      1|	VIPS_ARG_INT(class, "bandno", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  253|      1|		_("Search band"),
  254|      1|		_("Band to search for features on"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsMosaic, bandno),
  257|      1|		0, 10000, 0);
  258|       |
  259|      1|	VIPS_ARG_INT(class, "dx0", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  260|      1|		_("Integer offset"),
  261|      1|		_("Detected integer offset"),
  262|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  263|      1|		G_STRUCT_OFFSET(VipsMosaic, dx0),
  264|      1|		-10000000, 10000000, 0);
  265|       |
  266|      1|	VIPS_ARG_INT(class, "dy0", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  267|      1|		_("Integer offset"),
  268|      1|		_("Detected integer offset"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  270|      1|		G_STRUCT_OFFSET(VipsMosaic, dy0),
  271|      1|		-10000000, 10000000, 0);
  272|       |
  273|      1|	VIPS_ARG_DOUBLE(class, "scale1", 15,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  274|      1|		_("Scale"),
  275|      1|		_("Detected scale"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  277|      1|		G_STRUCT_OFFSET(VipsMosaic, scale1),
  278|      1|		-10000000.0, 10000000.0, 1.0);
  279|       |
  280|      1|	VIPS_ARG_DOUBLE(class, "angle1", 16,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  281|      1|		_("Angle"),
  282|      1|		_("Detected rotation"),
  283|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  284|      1|		G_STRUCT_OFFSET(VipsMosaic, angle1),
  285|      1|		-10000000.0, 10000000.0, 0.0);
  286|       |
  287|      1|	VIPS_ARG_DOUBLE(class, "dx1", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  288|      1|		_("First-order displacement"),
  289|      1|		_("Detected first-order displacement"),
  290|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  291|      1|		G_STRUCT_OFFSET(VipsMosaic, dx1),
  292|      1|		-10000000.0, 10000000.0, 0.0);
  293|       |
  294|      1|	VIPS_ARG_DOUBLE(class, "dy1", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  295|      1|		_("First-order displacement"),
  296|      1|		_("Detected first-order displacement"),
  297|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  298|      1|		G_STRUCT_OFFSET(VipsMosaic, dy1),
  299|      1|		-10000000.0, 10000000.0, 0.0);
  300|      1|}

mosaic1.c:vips_mosaic1_class_init:
  486|      1|{
  487|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  488|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  489|       |
  490|      1|	gobject_class->set_property = vips_object_set_property;
  491|      1|	gobject_class->get_property = vips_object_get_property;
  492|       |
  493|      1|	object_class->nickname = "mosaic1";
  494|      1|	object_class->description = _("first-order mosaic of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  495|      1|	object_class->build = vips_mosaic1_build;
  496|       |
  497|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  498|      1|		_("Reference"),
  499|      1|		_("Reference image"),
  500|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  501|      1|		G_STRUCT_OFFSET(VipsMosaic1, ref));
  502|       |
  503|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  504|      1|		_("Secondary"),
  505|      1|		_("Secondary image"),
  506|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  507|      1|		G_STRUCT_OFFSET(VipsMosaic1, sec));
  508|       |
  509|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  510|      1|		_("Output"),
  511|      1|		_("Output image"),
  512|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  513|      1|		G_STRUCT_OFFSET(VipsMosaic1, out));
  514|       |
  515|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  516|      1|		_("Direction"),
  517|      1|		_("Horizontal or vertical mosaic"),
  518|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  519|      1|		G_STRUCT_OFFSET(VipsMosaic1, direction),
  520|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  521|       |
  522|      1|	VIPS_ARG_INT(class, "xr1", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  523|      1|		_("xr1"),
  524|      1|		_("Position of first reference tie-point"),
  525|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  526|      1|		G_STRUCT_OFFSET(VipsMosaic1, xr1),
  527|      1|		-1000000000, 1000000000, 1);
  528|       |
  529|      1|	VIPS_ARG_INT(class, "yr1", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  530|      1|		_("yr1"),
  531|      1|		_("Position of first reference tie-point"),
  532|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  533|      1|		G_STRUCT_OFFSET(VipsMosaic1, yr1),
  534|      1|		-1000000000, 1000000000, 1);
  535|       |
  536|      1|	VIPS_ARG_INT(class, "xs1", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  537|      1|		_("xs1"),
  538|      1|		_("Position of first secondary tie-point"),
  539|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  540|      1|		G_STRUCT_OFFSET(VipsMosaic1, xs1),
  541|      1|		-1000000000, 1000000000, 1);
  542|       |
  543|      1|	VIPS_ARG_INT(class, "ys1", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  544|      1|		_("ys1"),
  545|      1|		_("Position of first secondary tie-point"),
  546|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  547|      1|		G_STRUCT_OFFSET(VipsMosaic1, ys1),
  548|      1|		-1000000000, 1000000000, 1);
  549|       |
  550|      1|	VIPS_ARG_INT(class, "xr2", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  551|      1|		_("xr2"),
  552|      1|		_("Position of second reference tie-point"),
  553|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  554|      1|		G_STRUCT_OFFSET(VipsMosaic1, xr2),
  555|      1|		-1000000000, 1000000000, 1);
  556|       |
  557|      1|	VIPS_ARG_INT(class, "yr2", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  558|      1|		_("yr2"),
  559|      1|		_("Position of second reference tie-point"),
  560|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  561|      1|		G_STRUCT_OFFSET(VipsMosaic1, yr2),
  562|      1|		-1000000000, 1000000000, 1);
  563|       |
  564|      1|	VIPS_ARG_INT(class, "xs2", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  565|      1|		_("xs2"),
  566|      1|		_("Position of second secondary tie-point"),
  567|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  568|      1|		G_STRUCT_OFFSET(VipsMosaic1, xs2),
  569|      1|		-1000000000, 1000000000, 1);
  570|       |
  571|      1|	VIPS_ARG_INT(class, "ys2", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  572|      1|		_("ys2"),
  573|      1|		_("Position of second secondary tie-point"),
  574|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  575|      1|		G_STRUCT_OFFSET(VipsMosaic1, ys2),
  576|      1|		-1000000000, 1000000000, 1);
  577|       |
  578|      1|	VIPS_ARG_INT(class, "hwindow", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  579|      1|		_("hwindow"),
  580|      1|		_("Half window size"),
  581|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  582|      1|		G_STRUCT_OFFSET(VipsMosaic1, hwindow),
  583|      1|		0, 1000000000, 5);
  584|       |
  585|      1|	VIPS_ARG_INT(class, "harea", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  586|      1|		_("harea"),
  587|      1|		_("Half area size"),
  588|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsMosaic1, harea),
  590|      1|		0, 1000000000, 15);
  591|       |
  592|      1|	VIPS_ARG_BOOL(class, "search", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  593|      1|		_("Search"),
  594|      1|		_("Search to improve tie-points"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsMosaic1, search),
  597|      1|		FALSE);
  598|       |
  599|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 16,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  600|      1|		_("Interpolate"),
  601|      1|		_("Interpolate pixels with this"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  603|      1|		G_STRUCT_OFFSET(VipsMosaic1, interpolate));
  604|       |
  605|      1|	VIPS_ARG_INT(class, "mblend", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  606|      1|		_("Max blend"),
  607|      1|		_("Maximum blend size"),
  608|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  609|      1|		G_STRUCT_OFFSET(VipsMosaic1, mblend),
  610|      1|		0, 10000, 10);
  611|       |
  612|      1|	VIPS_ARG_INT(class, "bandno", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  613|      1|		_("Search band"),
  614|      1|		_("Band to search for features on"),
  615|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  616|      1|		G_STRUCT_OFFSET(VipsMosaic1, bandno),
  617|      1|		0, 10000, 0);
  618|      1|}

vips_mosaicing_operation_init:
   93|      2|{
   94|      2|	extern GType vips_merge_get_type(void);
   95|      2|	extern GType vips_mosaic_get_type(void);
   96|      2|	extern GType vips_mosaic1_get_type(void);
   97|      2|	extern GType vips_match_get_type(void);
   98|      2|	extern GType vips_globalbalance_get_type(void);
   99|      2|	extern GType vips_matrixinvert_get_type(void);
  100|       |
  101|      2|	vips_merge_get_type();
  102|      2|	vips_mosaic_get_type();
  103|      2|	vips_mosaic1_get_type();
  104|      2|	vips_matrixinvert_get_type();
  105|      2|	vips_match_get_type();
  106|      2|	vips_globalbalance_get_type();
  107|      2|}

affine.c:vips_affine_class_init:
  629|      1|{
  630|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  632|       |
  633|      1|	VIPS_DEBUG_MSG("vips_affine_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|       |
  635|      1|	gobject_class->dispose = vips_affine_dispose;
  636|      1|	gobject_class->set_property = vips_object_set_property;
  637|      1|	gobject_class->get_property = vips_object_get_property;
  638|       |
  639|      1|	vobject_class->nickname = "affine";
  640|      1|	vobject_class->description = _("affine transform of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  641|      1|	vobject_class->build = vips_affine_build;
  642|       |
  643|      1|	VIPS_ARG_BOXED(class, "matrix", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  644|      1|		_("Matrix"),
  645|      1|		_("Transformation matrix"),
  646|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  647|      1|		G_STRUCT_OFFSET(VipsAffine, matrix),
  648|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  649|       |
  650|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 2,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  651|      1|		_("Interpolate"),
  652|      1|		_("Interpolate pixels with this"),
  653|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  654|      1|		G_STRUCT_OFFSET(VipsAffine, interpolate));
  655|       |
  656|      1|	VIPS_ARG_BOXED(class, "oarea", 111,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  657|      1|		_("Output rect"),
  658|      1|		_("Area of output to generate"),
  659|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  660|      1|		G_STRUCT_OFFSET(VipsAffine, oarea),
  661|      1|		VIPS_TYPE_ARRAY_INT);
  662|       |
  663|      1|	VIPS_ARG_DOUBLE(class, "odx", 112,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  664|      1|		_("Output offset"),
  665|      1|		_("Horizontal output displacement"),
  666|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  667|      1|		G_STRUCT_OFFSET(VipsAffine, odx),
  668|      1|		-10000000, 10000000, 0);
  669|       |
  670|      1|	VIPS_ARG_DOUBLE(class, "ody", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  671|      1|		_("Output offset"),
  672|      1|		_("Vertical output displacement"),
  673|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  674|      1|		G_STRUCT_OFFSET(VipsAffine, ody),
  675|      1|		-10000000, 10000000, 0);
  676|       |
  677|      1|	VIPS_ARG_DOUBLE(class, "idx", 114,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  678|      1|		_("Input offset"),
  679|      1|		_("Horizontal input displacement"),
  680|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  681|      1|		G_STRUCT_OFFSET(VipsAffine, idx),
  682|      1|		-10000000, 10000000, 0);
  683|       |
  684|      1|	VIPS_ARG_DOUBLE(class, "idy", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  685|      1|		_("Input offset"),
  686|      1|		_("Vertical input displacement"),
  687|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  688|      1|		G_STRUCT_OFFSET(VipsAffine, idy),
  689|      1|		-10000000, 10000000, 0);
  690|       |
  691|      1|	VIPS_ARG_ENUM(class, "extend", 117,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  692|      1|		_("Extend"),
  693|      1|		_("How to generate the extra pixels"),
  694|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  695|      1|		G_STRUCT_OFFSET(VipsAffine, extend),
  696|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND);
  697|       |
  698|      1|	VIPS_ARG_BOXED(class, "background", 116,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  699|      1|		_("Background"),
  700|      1|		_("Background value"),
  701|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  702|      1|		G_STRUCT_OFFSET(VipsAffine, background),
  703|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  704|       |
  705|      1|	VIPS_ARG_BOOL(class, "premultiplied", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  706|      1|		_("Premultiplied"),
  707|      1|		_("Images have premultiplied alpha"),
  708|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  709|      1|		G_STRUCT_OFFSET(VipsAffine, premultiplied),
  710|      1|		FALSE);
  711|      1|}

bicubic.cpp:_ZL35vips_interpolate_bicubic_class_initP21_VipsInterpolateClass:
  623|      1|{
  624|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(iclass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|      1|	VipsInterpolateClass *interpolate_class =
  626|      1|		VIPS_INTERPOLATE_CLASS(iclass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  627|       |
  628|      1|	object_class->nickname = "bicubic";
  629|      1|	object_class->description = _("bicubic interpolation (Catmull-Rom)");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  630|       |
  631|      1|	interpolate_class->interpolate = vips_interpolate_bicubic_interpolate;
  632|      1|	interpolate_class->window_size = 4;
  633|       |
  634|       |	/* Build the tables of pre-computed coefficients.
  635|       |	 */
  636|     66|	for (int x = 0; x < VIPS_TRANSFORM_SCALE + 1; x++) {
  ------------------
  |  |  112|     66|#define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT)
  |  |  ------------------
  |  |  |  |  111|     66|#define VIPS_TRANSFORM_SHIFT (6)
  |  |  ------------------
  ------------------
  |  Branch (636:18): [True: 65, False: 1]
  ------------------
  637|     65|		calculate_coefficients_catmull(vips_bicubic_matrixf[x],
  638|     65|			(float) x / VIPS_TRANSFORM_SCALE);
  ------------------
  |  |  112|     65|#define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT)
  |  |  ------------------
  |  |  |  |  111|     65|#define VIPS_TRANSFORM_SHIFT (6)
  |  |  ------------------
  ------------------
  639|       |
  640|    325|		for (int i = 0; i < 4; i++)
  ------------------
  |  Branch (640:19): [True: 260, False: 65]
  ------------------
  641|    260|			vips_bicubic_matrixi[x][i] =
  642|    260|				vips_bicubic_matrixf[x][i] *
  643|    260|				VIPS_INTERPOLATE_SCALE;
  ------------------
  |  |  120|    260|#define VIPS_INTERPOLATE_SCALE (1 << VIPS_INTERPOLATE_SHIFT)
  |  |  ------------------
  |  |  |  |  119|    260|#define VIPS_INTERPOLATE_SHIFT (12)
  |  |  ------------------
  ------------------
  644|     65|	}
  645|      1|}

vips__interpolate_init:
  626|      2|{
  627|      2|	extern GType vips_interpolate_bicubic_get_type(void);
  628|      2|	extern GType vips_interpolate_lbb_get_type(void);
  629|      2|	extern GType vips_interpolate_nohalo_get_type(void);
  630|      2|	extern GType vips_interpolate_vsqbs_get_type(void);
  631|       |
  632|      2|	vips_interpolate_nearest_get_type();
  633|      2|	vips_interpolate_bilinear_get_type();
  634|       |
  635|      2|	vips_interpolate_bicubic_get_type();
  636|      2|	vips_interpolate_lbb_get_type();
  637|      2|	vips_interpolate_nohalo_get_type();
  638|      2|	vips_interpolate_vsqbs_get_type();
  639|      2|}
interpolate.c:vips_interpolate_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|       |
  176|       |#ifdef DEBUG
  177|       |	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  178|       |#endif /*DEBUG*/
  179|       |
  180|       |#ifdef DEBUG
  181|       |	gobject_class->finalize = vips_interpolate_finalize;
  182|       |#endif /*DEBUG*/
  183|       |
  184|      1|	vobject_class->nickname = "interpolate";
  185|      1|	vobject_class->description = _("VIPS interpolators");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  186|       |
  187|      1|	class->interpolate = NULL;
  188|      1|	class->get_window_size = vips_interpolate_real_get_window_size;
  189|      1|	class->get_window_offset = vips_interpolate_real_get_window_offset;
  190|      1|	class->window_size = -1;
  191|      1|	class->window_offset = -1;
  192|      1|}
interpolate.c:vips_interpolate_nearest_class_init:
  355|      1|{
  356|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      1|	VipsInterpolateClass *interpolate_class =
  358|      1|		VIPS_INTERPOLATE_CLASS(class);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  359|       |
  360|      1|	object_class->nickname = "nearest";
  361|      1|	object_class->description = _("nearest-neighbour interpolation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  362|       |
  363|      1|	interpolate_class->interpolate = vips_interpolate_nearest_interpolate;
  364|      1|	interpolate_class->window_size = 1;
  365|      1|}
interpolate.c:vips_interpolate_bilinear_class_init:
  573|      1|{
  574|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      1|	VipsInterpolateClass *interpolate_class =
  576|      1|		(VipsInterpolateClass *) class;
  577|       |
  578|      1|	object_class->nickname = "bilinear";
  579|      1|	object_class->description = _("bilinear interpolation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  580|       |
  581|      1|	interpolate_class->interpolate = vips_interpolate_bilinear_interpolate;
  582|      1|	interpolate_class->window_size = 2;
  583|      1|}

lbb.cpp:_ZL31vips_interpolate_lbb_class_initP24_VipsInterpolateLbbClass:
  866|      1|{
  867|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  868|      1|	VipsInterpolateClass *interpolate_class =
  869|      1|		VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  870|       |
  871|      1|	object_class->nickname = "lbb";
  872|      1|	object_class->description = _("reduced halo bicubic");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  873|       |
  874|      1|	interpolate_class->interpolate = vips_interpolate_lbb_interpolate;
  875|      1|	interpolate_class->window_size = 4;
  876|      1|}

mapim.c:vips_mapim_class_init:
  541|      1|{
  542|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|       |
  545|      1|	VIPS_DEBUG_MSG("vips_mapim_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|       |
  547|      1|	gobject_class->set_property = vips_object_set_property;
  548|      1|	gobject_class->get_property = vips_object_get_property;
  549|       |
  550|      1|	vobject_class->nickname = "mapim";
  551|      1|	vobject_class->description = _("resample with a map image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  552|      1|	vobject_class->build = vips_mapim_build;
  553|       |
  554|      1|	VIPS_ARG_IMAGE(class, "index", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  555|      1|		_("Index"),
  556|      1|		_("Index pixels with this"),
  557|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  558|      1|		G_STRUCT_OFFSET(VipsMapim, index));
  559|       |
  560|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 4,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  561|      1|		_("Interpolate"),
  562|      1|		_("Interpolate pixels with this"),
  563|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  564|      1|		G_STRUCT_OFFSET(VipsMapim, interpolate));
  565|       |
  566|      1|	VIPS_ARG_ENUM(class, "extend", 117,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  567|      1|		_("Extend"),
  568|      1|		_("How to generate the extra pixels"),
  569|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  570|      1|		G_STRUCT_OFFSET(VipsMapim, extend),
  571|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND);
  572|       |
  573|      1|	VIPS_ARG_BOXED(class, "background", 116,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  574|      1|		_("Background"),
  575|      1|		_("Background value"),
  576|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  577|      1|		G_STRUCT_OFFSET(VipsMapim, background),
  578|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  579|       |
  580|      1|	VIPS_ARG_BOOL(class, "premultiplied", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  581|      1|		_("Premultiplied"),
  582|      1|		_("Images have premultiplied alpha"),
  583|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  584|      1|		G_STRUCT_OFFSET(VipsMapim, premultiplied),
  585|      1|		FALSE);
  586|      1|}

nohalo.cpp:_ZL34vips_interpolate_nohalo_class_initP27_VipsInterpolateNohaloClass:
 1545|      1|{
 1546|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|      1|	VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
 1548|       |
 1549|      1|	object_class->nickname = "nohalo";
 1550|      1|	object_class->description =
 1551|      1|		_("edge sharpening resampler with halo reduction");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1552|       |
 1553|      1|	interpolate_class->interpolate = vips_interpolate_nohalo_interpolate;
 1554|      1|	interpolate_class->window_size = 6;
 1555|      1|	interpolate_class->window_offset = 2;
 1556|      1|}

quadratic.c:vips_quadratic_class_init:
  329|      1|{
  330|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |
  333|      1|	VIPS_DEBUG_MSG("vips_quadratic_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|       |
  335|      1|	gobject_class->dispose = vips_quadratic_dispose;
  336|      1|	gobject_class->set_property = vips_object_set_property;
  337|      1|	gobject_class->get_property = vips_object_get_property;
  338|       |
  339|      1|	vobject_class->nickname = "quadratic";
  340|      1|	vobject_class->description =
  341|      1|		_("resample an image with a quadratic transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  342|      1|	vobject_class->build = vips_quadratic_build;
  343|       |
  344|      1|	VIPS_ARG_IMAGE(class, "coeff", 8,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  345|      1|		_("Coeff"),
  346|      1|		_("Coefficient matrix"),
  347|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  348|      1|		G_STRUCT_OFFSET(VipsQuadratic, coeff));
  349|       |
  350|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 9,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  351|      1|		_("Interpolate"),
  352|      1|		_("Interpolate values with this"),
  353|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  354|      1|		G_STRUCT_OFFSET(VipsQuadratic, interpolate));
  355|      1|}

reduce.c:vips_reduce_class_init:
  188|      1|{
  189|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  192|       |
  193|      1|	VIPS_DEBUG_MSG("vips_reduce_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |
  195|      1|	gobject_class->set_property = vips_object_set_property;
  196|      1|	gobject_class->get_property = vips_object_get_property;
  197|       |
  198|      1|	vobject_class->nickname = "reduce";
  199|      1|	vobject_class->description = _("reduce an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  200|      1|	vobject_class->build = vips_reduce_build;
  201|       |
  202|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  203|       |
  204|      1|	VIPS_ARG_DOUBLE(class, "hshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  205|      1|		_("Hshrink"),
  206|      1|		_("Horizontal shrink factor"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsReduce, hshrink),
  209|      1|		1.0, 1000000.0, 1.0);
  210|       |
  211|      1|	VIPS_ARG_DOUBLE(class, "vshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  212|      1|		_("Vshrink"),
  213|      1|		_("Vertical shrink factor"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsReduce, vshrink),
  216|      1|		1.0, 1000000.0, 1.0);
  217|       |
  218|      1|	VIPS_ARG_ENUM(class, "kernel", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  219|      1|		_("Kernel"),
  220|      1|		_("Resampling kernel"),
  221|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsReduce, kernel),
  223|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  224|       |
  225|      1|	VIPS_ARG_DOUBLE(class, "gap", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  226|      1|		_("Gap"),
  227|      1|		_("Reducing gap"),
  228|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  229|      1|		G_STRUCT_OFFSET(VipsReduce, gap),
  230|      1|		0.0, 1000000.0, 0.0);
  231|       |
  232|       |	/* The old names .. now use h and v everywhere.
  233|       |	 */
  234|      1|	VIPS_ARG_DOUBLE(class, "xshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  235|      1|		_("Xshrink"),
  236|      1|		_("Horizontal shrink factor"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  238|      1|		G_STRUCT_OFFSET(VipsReduce, hshrink),
  239|      1|		1.0, 1000000.0, 1.0);
  240|       |
  241|      1|	VIPS_ARG_DOUBLE(class, "yshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  242|      1|		_("Yshrink"),
  243|      1|		_("Vertical shrink factor"),
  244|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  245|      1|		G_STRUCT_OFFSET(VipsReduce, vshrink),
  246|      1|		1.0, 1000000.0, 1.0);
  247|       |
  248|       |	/* We used to let people pick centre or corner, but it's automatic now.
  249|       |	 */
  250|      1|	VIPS_ARG_BOOL(class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  251|      1|		_("Centre"),
  252|      1|		_("Use centre sampling convention"),
  253|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  254|      1|		G_STRUCT_OFFSET(VipsReduce, centre),
  255|      1|		FALSE);
  256|      1|}

reduceh.cpp:_ZL23vips_reduceh_class_initP18_VipsResampleClass:
  568|      1|{
  569|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(reduceh_class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reduceh_class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|      1|	VipsOperationClass *operation_class =
  572|      1|		VIPS_OPERATION_CLASS(reduceh_class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  573|       |
  574|      1|	VIPS_DEBUG_MSG("vips_reduceh_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|       |
  576|      1|	gobject_class->set_property = vips_object_set_property;
  577|      1|	gobject_class->get_property = vips_object_get_property;
  578|       |
  579|      1|	vobject_class->nickname = "reduceh";
  580|      1|	vobject_class->description = _("shrink an image horizontally");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  581|      1|	vobject_class->build = vips_reduceh_build;
  582|       |
  583|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  584|       |
  585|      1|	VIPS_ARG_DOUBLE(reduceh_class, "hshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  586|      1|		_("Hshrink"),
  587|      1|		_("Horizontal shrink factor"),
  588|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsReduceh, hshrink),
  590|      1|		1.0, 1000000.0, 1.0);
  591|       |
  592|      1|	VIPS_ARG_ENUM(reduceh_class, "kernel", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  593|      1|		_("Kernel"),
  594|      1|		_("Resampling kernel"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsReduceh, kernel),
  597|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  598|       |
  599|      1|	VIPS_ARG_DOUBLE(reduceh_class, "gap", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  600|      1|		_("Gap"),
  601|      1|		_("Reducing gap"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  603|      1|		G_STRUCT_OFFSET(VipsReduceh, gap),
  604|      1|		0.0, 1000000.0, 0.0);
  605|       |
  606|       |	/* Old name.
  607|       |	 */
  608|      1|	VIPS_ARG_DOUBLE(reduceh_class, "xshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  609|      1|		_("Xshrink"),
  610|      1|		_("Horizontal shrink factor"),
  611|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  612|      1|		G_STRUCT_OFFSET(VipsReduceh, hshrink),
  613|      1|		1.0, 1000000.0, 1.0);
  614|       |
  615|       |	/* We used to let people pick centre or corner, but it's automatic now.
  616|       |	 */
  617|      1|	VIPS_ARG_BOOL(reduceh_class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  618|      1|		_("Centre"),
  619|      1|		_("Use centre sampling convention"),
  620|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  621|      1|		G_STRUCT_OFFSET(VipsReduceh, centre),
  622|      1|		FALSE);
  623|      1|}

reducev.cpp:_ZL23vips_reducev_class_initP18_VipsResampleClass:
 1049|      1|{
 1050|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(reducev_class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1051|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reducev_class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1052|      1|	VipsOperationClass *operation_class =
 1053|      1|		VIPS_OPERATION_CLASS(reducev_class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1054|       |
 1055|      1|	VIPS_DEBUG_MSG("vips_reducev_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|       |
 1057|       |#ifdef HAVE_ORC
 1058|       |	gobject_class->finalize = vips_reducev_finalize;
 1059|       |#endif /*HAVE_ORC*/
 1060|      1|	gobject_class->set_property = vips_object_set_property;
 1061|      1|	gobject_class->get_property = vips_object_get_property;
 1062|       |
 1063|      1|	vobject_class->nickname = "reducev";
 1064|      1|	vobject_class->description = _("shrink an image vertically");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1065|      1|	vobject_class->build = vips_reducev_build;
 1066|       |
 1067|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1068|       |
 1069|      1|	VIPS_ARG_DOUBLE(reducev_class, "vshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1070|      1|		_("Vshrink"),
 1071|      1|		_("Vertical shrink factor"),
 1072|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1073|      1|		G_STRUCT_OFFSET(VipsReducev, vshrink),
 1074|      1|		1.0, 1000000.0, 1.0);
 1075|       |
 1076|      1|	VIPS_ARG_ENUM(reducev_class, "kernel", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1077|      1|		_("Kernel"),
 1078|      1|		_("Resampling kernel"),
 1079|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1080|      1|		G_STRUCT_OFFSET(VipsReducev, kernel),
 1081|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
 1082|       |
 1083|      1|	VIPS_ARG_DOUBLE(reducev_class, "gap", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1084|      1|		_("Gap"),
 1085|      1|		_("Reducing gap"),
 1086|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1087|      1|		G_STRUCT_OFFSET(VipsReducev, gap),
 1088|      1|		0.0, 1000000.0, 0.0);
 1089|       |
 1090|       |	/* Old name.
 1091|       |	 */
 1092|      1|	VIPS_ARG_DOUBLE(reducev_class, "yshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1093|      1|		_("Yshrink"),
 1094|      1|		_("Vertical shrink factor"),
 1095|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1096|      1|		G_STRUCT_OFFSET(VipsReducev, vshrink),
 1097|      1|		1.0, 1000000.0, 1.0);
 1098|       |
 1099|       |	/* We used to let people pick centre or corner, but it's automatic now.
 1100|       |	 */
 1101|      1|	VIPS_ARG_BOOL(reducev_class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1102|      1|		_("Centre"),
 1103|      1|		_("Use centre sampling convention"),
 1104|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1105|      1|		G_STRUCT_OFFSET(VipsReducev, centre),
 1106|      1|		FALSE);
 1107|      1|}

vips_resample_operation_init:
  162|      2|{
  163|      2|	extern GType vips_thumbnail_file_get_type(void);
  164|      2|	extern GType vips_thumbnail_buffer_get_type(void);
  165|      2|	extern GType vips_thumbnail_image_get_type(void);
  166|      2|	extern GType vips_thumbnail_source_get_type(void);
  167|      2|	extern GType vips_mapim_get_type(void);
  168|      2|	extern GType vips_shrink_get_type(void);
  169|      2|	extern GType vips_shrinkh_get_type(void);
  170|      2|	extern GType vips_shrinkv_get_type(void);
  171|      2|	extern GType vips_reduce_get_type(void);
  172|      2|	extern GType vips_reduceh_get_type(void);
  173|      2|	extern GType vips_reducev_get_type(void);
  174|      2|	extern GType vips_quadratic_get_type(void);
  175|      2|	extern GType vips_affine_get_type(void);
  176|      2|	extern GType vips_similarity_get_type(void);
  177|      2|	extern GType vips_rotate_get_type(void);
  178|      2|	extern GType vips_resize_get_type(void);
  179|       |
  180|      2|	vips_thumbnail_file_get_type();
  181|      2|	vips_thumbnail_buffer_get_type();
  182|      2|	vips_thumbnail_image_get_type();
  183|      2|	vips_thumbnail_source_get_type();
  184|      2|	vips_mapim_get_type();
  185|      2|	vips_shrink_get_type();
  186|      2|	vips_shrinkh_get_type();
  187|      2|	vips_shrinkv_get_type();
  188|      2|	vips_reduceh_get_type();
  189|      2|	vips_reducev_get_type();
  190|      2|	vips_reduce_get_type();
  191|      2|	vips_quadratic_get_type();
  192|      2|	vips_affine_get_type();
  193|      2|	vips_similarity_get_type();
  194|      2|	vips_rotate_get_type();
  195|      2|	vips_resize_get_type();
  196|      2|}
resample.c:vips_resample_class_init:
  128|      1|{
  129|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "resample";
  136|      1|	vobject_class->description = _("resample operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_resample_build;
  138|       |
  139|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  140|      1|		_("Input"),
  141|      1|		_("Input image argument"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsResample, in));
  144|       |
  145|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  146|      1|		_("Output"),
  147|      1|		_("Output image"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  149|      1|		G_STRUCT_OFFSET(VipsResample, out));
  150|      1|}

resize.c:vips_resize_class_init:
  312|      1|{
  313|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  316|       |
  317|      1|	VIPS_DEBUG_MSG("vips_resize_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|      1|	gobject_class->set_property = vips_object_set_property;
  320|      1|	gobject_class->get_property = vips_object_get_property;
  321|       |
  322|      1|	vobject_class->nickname = "resize";
  323|      1|	vobject_class->description = _("resize an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  324|      1|	vobject_class->build = vips_resize_build;
  325|       |
  326|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "scale", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Scale factor"),
  330|      1|		_("Scale image by this factor"),
  331|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsResize, scale),
  333|      1|		0.0, 10000000.0, 0.0);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "vscale", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Vertical scale factor"),
  337|      1|		_("Vertical scale image by this factor"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsResize, vscale),
  340|      1|		0.0, 10000000.0, 0.0);
  341|       |
  342|      1|	VIPS_ARG_ENUM(class, "kernel", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  343|      1|		_("Kernel"),
  344|      1|		_("Resampling kernel"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsResize, kernel),
  347|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  348|       |
  349|      1|	VIPS_ARG_DOUBLE(class, "gap", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  350|      1|		_("Gap"),
  351|      1|		_("Reducing gap"),
  352|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  353|      1|		G_STRUCT_OFFSET(VipsResize, gap),
  354|      1|		0.0, 1000000.0, 2.0);
  355|       |
  356|       |	/* We used to let people set the input offset so you could pick centre
  357|       |	 * or corner interpolation, but it's not clear this was useful.
  358|       |	 */
  359|      1|	VIPS_ARG_DOUBLE(class, "idx", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  360|      1|		_("Input offset"),
  361|      1|		_("Horizontal input displacement"),
  362|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  363|      1|		G_STRUCT_OFFSET(VipsResize, idx),
  364|      1|		-10000000.0, 10000000.0, 0.0);
  365|       |
  366|      1|	VIPS_ARG_DOUBLE(class, "idy", 116,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  367|      1|		_("Input offset"),
  368|      1|		_("Vertical input displacement"),
  369|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  370|      1|		G_STRUCT_OFFSET(VipsResize, idy),
  371|      1|		-10000000.0, 10000000.0, 0.0);
  372|       |
  373|       |	/* It's a kernel now we use vips_reduce() not vips_affine().
  374|       |	 */
  375|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 2,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  376|      1|		_("Interpolate"),
  377|      1|		_("Interpolate pixels with this"),
  378|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  379|      1|		G_STRUCT_OFFSET(VipsResize, interpolate));
  380|       |
  381|       |	/* We used to let people pick centre or corner, but it's automatic now.
  382|       |	 */
  383|      1|	VIPS_ARG_BOOL(class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  384|      1|		_("Centre"),
  385|      1|		_("Use centre sampling convention"),
  386|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  387|      1|		G_STRUCT_OFFSET(VipsResize, centre),
  388|      1|		FALSE);
  389|      1|}

shrink.c:vips_shrink_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  126|       |
  127|      1|	VIPS_DEBUG_MSG("vips_shrink_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	gobject_class->set_property = vips_object_set_property;
  130|      1|	gobject_class->get_property = vips_object_get_property;
  131|       |
  132|      1|	vobject_class->nickname = "shrink";
  133|      1|	vobject_class->description = _("shrink an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  134|      1|	vobject_class->build = vips_shrink_build;
  135|       |
  136|       |	/* You'd think UNBUFFERED would work, but we will use reduce for non-int
  137|       |	 * shrinks, so it has to be straight SEQ.
  138|       |	 */
  139|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  140|       |
  141|      1|	VIPS_ARG_DOUBLE(class, "vshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  142|      1|		_("Vshrink"),
  143|      1|		_("Vertical shrink factor"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsShrink, vshrink),
  146|      1|		1.0, 1000000.0, 1.0);
  147|       |
  148|      1|	VIPS_ARG_DOUBLE(class, "hshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  149|      1|		_("Hshrink"),
  150|      1|		_("Horizontal shrink factor"),
  151|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  152|      1|		G_STRUCT_OFFSET(VipsShrink, hshrink),
  153|      1|		1.0, 1000000.0, 1.0);
  154|       |
  155|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  156|      1|		_("Ceil"),
  157|      1|		_("Round-up output dimensions"),
  158|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  159|      1|		G_STRUCT_OFFSET(VipsShrink, ceil),
  160|      1|		FALSE);
  161|       |
  162|       |	/* The old names .. now use h and v everywhere.
  163|       |	 */
  164|      1|	VIPS_ARG_DOUBLE(class, "xshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  165|      1|		_("Xshrink"),
  166|      1|		_("Horizontal shrink factor"),
  167|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  168|      1|		G_STRUCT_OFFSET(VipsShrink, hshrink),
  169|      1|		1.0, 1000000.0, 1.0);
  170|       |
  171|      1|	VIPS_ARG_DOUBLE(class, "yshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  172|      1|		_("Yshrink"),
  173|      1|		_("Vertical shrink factor"),
  174|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  175|      1|		G_STRUCT_OFFSET(VipsShrink, vshrink),
  176|      1|		1.0, 1000000.0, 1.0);
  177|      1|}

shrinkh.c:vips_shrinkh_class_init:
  336|      1|{
  337|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  340|       |
  341|      1|	VIPS_DEBUG_MSG("vips_shrinkh_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|      1|	gobject_class->set_property = vips_object_set_property;
  344|      1|	gobject_class->get_property = vips_object_get_property;
  345|       |
  346|      1|	vobject_class->nickname = "shrinkh";
  347|      1|	vobject_class->description = _("shrink an image horizontally");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  348|      1|	vobject_class->build = vips_shrinkh_build;
  349|       |
  350|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  351|       |
  352|      1|	VIPS_ARG_INT(class, "hshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  353|      1|		_("Hshrink"),
  354|      1|		_("Horizontal shrink factor"),
  355|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  356|      1|		G_STRUCT_OFFSET(VipsShrinkh, hshrink),
  357|      1|		1, 1000000, 1);
  358|       |
  359|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  360|      1|		_("Ceil"),
  361|      1|		_("Round-up output dimensions"),
  362|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  363|      1|		G_STRUCT_OFFSET(VipsShrinkh, ceil),
  364|      1|		FALSE);
  365|       |
  366|       |	/* The old name .. now use h and v everywhere.
  367|       |	 */
  368|      1|	VIPS_ARG_INT(class, "xshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  369|      1|		_("Xshrink"),
  370|      1|		_("Horizontal shrink factor"),
  371|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  372|      1|		G_STRUCT_OFFSET(VipsShrinkh, hshrink),
  373|      1|		1, 1000000, 1);
  374|      1|}

shrinkv.c:vips_shrinkv_class_init:
  410|      1|{
  411|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  414|       |
  415|      1|	VIPS_DEBUG_MSG("vips_shrinkv_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|       |
  417|      1|	gobject_class->set_property = vips_object_set_property;
  418|      1|	gobject_class->get_property = vips_object_get_property;
  419|       |
  420|      1|	vobject_class->nickname = "shrinkv";
  421|      1|	vobject_class->description = _("shrink an image vertically");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  422|      1|	vobject_class->build = vips_shrinkv_build;
  423|       |
  424|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  425|       |
  426|      1|	VIPS_ARG_INT(class, "vshrink", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  427|      1|		_("Vshrink"),
  428|      1|		_("Vertical shrink factor"),
  429|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  430|      1|		G_STRUCT_OFFSET(VipsShrinkv, vshrink),
  431|      1|		1, 1000000, 1);
  432|       |
  433|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  434|      1|		_("Ceil"),
  435|      1|		_("Round-up output dimensions"),
  436|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  437|      1|		G_STRUCT_OFFSET(VipsShrinkv, ceil),
  438|      1|		FALSE);
  439|       |
  440|       |	/* The old name .. now use h and v everywhere.
  441|       |	 */
  442|      1|	VIPS_ARG_INT(class, "yshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  443|      1|		_("Yshrink"),
  444|      1|		_("Vertical shrink factor"),
  445|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  446|      1|		G_STRUCT_OFFSET(VipsShrinkv, vshrink),
  447|      1|		1, 1000000, 1);
  448|      1|}

similarity.c:vips_similarity_base_class_init:
  115|      1|{
  116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|       |
  119|      1|	gobject_class->set_property = vips_object_set_property;
  120|      1|	gobject_class->get_property = vips_object_get_property;
  121|       |
  122|      1|	vobject_class->nickname = "similarity_base";
  123|      1|	vobject_class->description = _("base similarity transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  124|      1|	vobject_class->build = vips_similarity_base_build;
  125|       |
  126|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 5,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  127|      1|		_("Interpolate"),
  128|      1|		_("Interpolate pixels with this"),
  129|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  130|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, interpolate));
  131|       |
  132|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  133|      1|		_("Background"),
  134|      1|		_("Background value"),
  135|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  136|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, background),
  137|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  138|       |
  139|      1|	VIPS_ARG_DOUBLE(class, "odx", 112,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  140|      1|		_("Output offset"),
  141|      1|		_("Horizontal output displacement"),
  142|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, odx),
  144|      1|		-10000000, 10000000, 0);
  145|       |
  146|      1|	VIPS_ARG_DOUBLE(class, "ody", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  147|      1|		_("Output offset"),
  148|      1|		_("Vertical output displacement"),
  149|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, ody),
  151|      1|		-10000000, 10000000, 0);
  152|       |
  153|      1|	VIPS_ARG_DOUBLE(class, "idx", 114,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  154|      1|		_("Input offset"),
  155|      1|		_("Horizontal input displacement"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, idx),
  158|      1|		-10000000, 10000000, 0);
  159|       |
  160|      1|	VIPS_ARG_DOUBLE(class, "idy", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  161|      1|		_("Input offset"),
  162|      1|		_("Vertical input displacement"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, idy),
  165|      1|		-10000000, 10000000, 0);
  166|      1|}
similarity.c:vips_similarity_class_init:
  189|      1|{
  190|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	vobject_class->nickname = "similarity";
  197|      1|	vobject_class->description = _("similarity transform of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|       |
  199|      1|	VIPS_ARG_DOUBLE(class, "scale", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  200|      1|		_("Scale"),
  201|      1|		_("Scale by this factor"),
  202|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  203|      1|		G_STRUCT_OFFSET(VipsSimilarity, scale),
  204|      1|		0, 10000000, 1);
  205|       |
  206|      1|	VIPS_ARG_DOUBLE(class, "angle", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  207|      1|		_("Angle"),
  208|      1|		_("Rotate clockwise by this many degrees"),
  209|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsSimilarity, angle),
  211|      1|		-10000000, 10000000, 0);
  212|      1|}
similarity.c:vips_rotate_class_init:
  264|      1|{
  265|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|      1|	gobject_class->set_property = vips_object_set_property;
  269|      1|	gobject_class->get_property = vips_object_get_property;
  270|       |
  271|      1|	vobject_class->nickname = "rotate";
  272|      1|	vobject_class->description =
  273|      1|		_("rotate an image by a number of degrees");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|       |
  275|      1|	VIPS_ARG_DOUBLE(class, "angle", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  276|      1|		_("Angle"),
  277|      1|		_("Rotate clockwise by this many degrees"),
  278|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  279|      1|		G_STRUCT_OFFSET(VipsSimilarity, angle),
  280|      1|		-10000000, 10000000, 0);
  281|      1|}

bicubic.cpp:_ZL30calculate_coefficients_catmullPdd:
  292|     65|{
  293|       |	/* Nicolas believes that the following is an hitherto unknown
  294|       |	 * hyper-efficient method of computing Catmull-Rom coefficients. It
  295|       |	 * only uses 4* & 1+ & 5- for a total of only 10 flops to compute
  296|       |	 * four coefficients.
  297|       |	 */
  298|     65|	const double cr1 = 1. - x;
  299|     65|	const double cr2 = -.5 * x;
  300|     65|	const double cr3 = cr1 * cr2;
  301|     65|	const double cone = cr1 * cr3;
  302|     65|	const double cfou = x * cr3;
  303|     65|	const double cr4 = cfou - cone;
  304|     65|	const double ctwo = cr1 - cone + cr4;
  305|     65|	const double cthr = x - cfou - cr4;
  306|       |
  307|     65|	g_assert(x >= 0. && x <= 1.);
  ------------------
  |  |  166|     65|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|     65|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     65|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|       |
  309|     65|	c[0] = cone;
  310|     65|	c[3] = cfou;
  311|     65|	c[1] = ctwo;
  312|     65|	c[2] = cthr;
  313|     65|}

thumbnail.c:vips_thumbnail_class_init:
  948|      1|{
  949|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  951|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  952|       |
  953|      1|	gobject_class->dispose = vips_thumbnail_dispose;
  954|      1|	gobject_class->finalize = vips_thumbnail_finalize;
  955|      1|	gobject_class->set_property = vips_object_set_property;
  956|      1|	gobject_class->get_property = vips_object_get_property;
  957|       |
  958|      1|	vobject_class->nickname = "thumbnail_base";
  959|      1|	vobject_class->description = _("thumbnail generation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  960|      1|	vobject_class->build = vips_thumbnail_build;
  961|       |
  962|       |	/* We mustn't cache these calls, since we open the file or buffer in
  963|       |	 * sequential mode.
  964|       |	 */
  965|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  966|       |
  967|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  968|      1|		_("Output"),
  969|      1|		_("Output image"),
  970|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  971|      1|		G_STRUCT_OFFSET(VipsThumbnail, out));
  972|       |
  973|      1|	VIPS_ARG_INT(class, "width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  974|      1|		_("Target width"),
  975|      1|		_("Size to this width"),
  976|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  977|      1|		G_STRUCT_OFFSET(VipsThumbnail, width),
  978|      1|		1, VIPS_MAX_COORD, 1);
  979|       |
  980|      1|	VIPS_ARG_INT(class, "height", 113,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  981|      1|		_("Target height"),
  982|      1|		_("Size to this height"),
  983|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  984|      1|		G_STRUCT_OFFSET(VipsThumbnail, height),
  985|      1|		1, VIPS_MAX_COORD, 1);
  986|       |
  987|      1|	VIPS_ARG_ENUM(class, "size", 114,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  988|      1|		_("Size"),
  989|      1|		_("Only upsize, only downsize, or both"),
  990|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  991|      1|		G_STRUCT_OFFSET(VipsThumbnail, size),
  992|      1|		VIPS_TYPE_SIZE, VIPS_SIZE_BOTH);
  993|       |
  994|      1|	VIPS_ARG_BOOL(class, "no_rotate", 115,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  995|      1|		_("No rotate"),
  996|      1|		_("Don't use orientation tags to rotate image upright"),
  997|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  998|      1|		G_STRUCT_OFFSET(VipsThumbnail, no_rotate),
  999|      1|		FALSE);
 1000|       |
 1001|      1|	VIPS_ARG_ENUM(class, "crop", 116,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1002|      1|		_("Crop"),
 1003|      1|		_("Reduce to fill target rectangle, then crop"),
 1004|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1005|      1|		G_STRUCT_OFFSET(VipsThumbnail, crop),
 1006|      1|		VIPS_TYPE_INTERESTING, VIPS_INTERESTING_NONE);
 1007|       |
 1008|      1|	VIPS_ARG_BOOL(class, "linear", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1009|      1|		_("Linear"),
 1010|      1|		_("Reduce in linear light"),
 1011|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1012|      1|		G_STRUCT_OFFSET(VipsThumbnail, linear),
 1013|      1|		FALSE);
 1014|       |
 1015|      1|	VIPS_ARG_STRING(class, "import_profile", 118,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1016|      1|		_("Import profile"),
 1017|      1|		_("Fallback import profile"),
 1018|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1019|      1|		G_STRUCT_OFFSET(VipsThumbnail, import_profile),
 1020|      1|		NULL);
 1021|       |
 1022|      1|	VIPS_ARG_STRING(class, "export_profile", 119,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1023|      1|		_("Export profile"),
 1024|      1|		_("Fallback export profile"),
 1025|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1026|      1|		G_STRUCT_OFFSET(VipsThumbnail, export_profile),
 1027|      1|		NULL);
 1028|       |
 1029|      1|	VIPS_ARG_ENUM(class, "intent", 120,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1030|      1|		_("Intent"),
 1031|      1|		_("Rendering intent"),
 1032|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1033|      1|		G_STRUCT_OFFSET(VipsThumbnail, intent),
 1034|      1|		VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE);
 1035|       |
 1036|      1|	VIPS_ARG_ENUM(class, "fail_on", 121,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1037|      1|		_("Fail on"),
 1038|      1|		_("Error level to fail on"),
 1039|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1040|      1|		G_STRUCT_OFFSET(VipsThumbnail, fail_on),
 1041|      1|		VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE);
 1042|       |
 1043|       |	/* BOOL args which default TRUE arguments don't work with the
 1044|       |	 * command-line -- GOption does not allow --auto-rotate=false.
 1045|       |	 *
 1046|       |	 * This is now replaced (though still functional) with "no-rotate",
 1047|       |	 * see above.
 1048|       |	 */
 1049|      1|	VIPS_ARG_BOOL(class, "auto_rotate", 121,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1050|      1|		_("Auto rotate"),
 1051|      1|		_("Use orientation tags to rotate image upright"),
 1052|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1053|      1|		G_STRUCT_OFFSET(VipsThumbnail, auto_rotate),
 1054|      1|		TRUE);
 1055|      1|}
thumbnail.c:vips_thumbnail_file_class_init:
 1183|      1|{
 1184|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1185|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1186|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1187|       |
 1188|      1|	gobject_class->set_property = vips_object_set_property;
 1189|      1|	gobject_class->get_property = vips_object_get_property;
 1190|       |
 1191|      1|	vobject_class->nickname = "thumbnail";
 1192|      1|	vobject_class->description = _("generate thumbnail from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1193|       |
 1194|      1|	thumbnail_class->get_info = vips_thumbnail_file_get_info;
 1195|      1|	thumbnail_class->open = vips_thumbnail_file_open;
 1196|       |
 1197|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1198|      1|		_("Filename"),
 1199|      1|		_("Filename to read from"),
 1200|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1201|      1|		G_STRUCT_OFFSET(VipsThumbnailFile, filename),
 1202|      1|		NULL);
 1203|      1|}
thumbnail.c:vips_thumbnail_buffer_class_init:
 1430|      1|{
 1431|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1433|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1434|       |
 1435|      1|	gobject_class->set_property = vips_object_set_property;
 1436|      1|	gobject_class->get_property = vips_object_get_property;
 1437|       |
 1438|      1|	vobject_class->nickname = "thumbnail_buffer";
 1439|      1|	vobject_class->description = _("generate thumbnail from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1440|       |
 1441|      1|	thumbnail_class->get_info = vips_thumbnail_buffer_get_info;
 1442|      1|	thumbnail_class->open = vips_thumbnail_buffer_open;
 1443|       |
 1444|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1445|      1|		_("Buffer"),
 1446|      1|		_("Buffer to load from"),
 1447|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1448|      1|		G_STRUCT_OFFSET(VipsThumbnailBuffer, buf),
 1449|      1|		VIPS_TYPE_BLOB);
 1450|       |
 1451|      1|	VIPS_ARG_STRING(class, "option_string", 20,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1452|      1|		_("Extra options"),
 1453|      1|		_("Options that are passed on to the underlying loader"),
 1454|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1455|      1|		G_STRUCT_OFFSET(VipsThumbnailBuffer, option_string),
 1456|      1|		"");
 1457|      1|}
thumbnail.c:vips_thumbnail_source_class_init:
 1643|      1|{
 1644|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1645|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1647|       |
 1648|      1|	gobject_class->set_property = vips_object_set_property;
 1649|      1|	gobject_class->get_property = vips_object_get_property;
 1650|       |
 1651|      1|	vobject_class->nickname = "thumbnail_source";
 1652|      1|	vobject_class->description = _("generate thumbnail from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1653|       |
 1654|      1|	thumbnail_class->get_info = vips_thumbnail_source_get_info;
 1655|      1|	thumbnail_class->open = vips_thumbnail_source_open;
 1656|       |
 1657|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1658|      1|		_("Source"),
 1659|      1|		_("Source to load from"),
 1660|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1661|      1|		G_STRUCT_OFFSET(VipsThumbnailSource, source),
 1662|      1|		VIPS_TYPE_SOURCE);
 1663|       |
 1664|      1|	VIPS_ARG_STRING(class, "option_string", 20,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1665|      1|		_("Extra options"),
 1666|      1|		_("Options that are passed on to the underlying loader"),
 1667|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1668|      1|		G_STRUCT_OFFSET(VipsThumbnailSource, option_string),
 1669|      1|		"");
 1670|      1|}
thumbnail.c:vips_thumbnail_image_class_init:
 1767|      1|{
 1768|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1769|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1770|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1771|       |
 1772|      1|	gobject_class->set_property = vips_object_set_property;
 1773|      1|	gobject_class->get_property = vips_object_get_property;
 1774|       |
 1775|      1|	vobject_class->nickname = "thumbnail_image";
 1776|      1|	vobject_class->description = _("generate thumbnail from image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1777|       |
 1778|      1|	thumbnail_class->get_info = vips_thumbnail_image_get_info;
 1779|      1|	thumbnail_class->open = vips_thumbnail_image_open;
 1780|       |
 1781|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1782|      1|		_("Input"),
 1783|      1|		_("Input image argument"),
 1784|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1785|      1|		G_STRUCT_OFFSET(VipsThumbnailImage, in));
 1786|      1|}

vsqbs.cpp:_ZL33vips_interpolate_vsqbs_class_initP26_VipsInterpolateVsqbsClass:
  373|      1|{
  374|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|      1|	VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  376|       |
  377|      1|	object_class->nickname = "vsqbs";
  378|      1|	object_class->description = _("B-Splines with antialiasing smoothing");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  379|       |
  380|      1|	interpolate_class->interpolate = vips_interpolate_vsqbs_interpolate;
  381|      1|	interpolate_class->window_size = 4;
  382|      1|	interpolate_class->window_offset = 1;
  383|      1|}

