[cplusplus] Add raster and vector vtables Extend hb-cplusplus.hh with shared_ptr/unique_ptr vtables for the public raster and vector object types when their headers are included. Also simplify the local vtable macro so the get_empty/nullptr cases share one definition instead of duplicating the exact same template body. Tested: - meson compile -C build Assisted-by: OpenAI Codex
diff --git a/src/hb-cplusplus.hh b/src/hb-cplusplus.hh index b6b5c8f..14944ee 100644 --- a/src/hb-cplusplus.hh +++ b/src/hb-cplusplus.hh
@@ -138,52 +138,56 @@ static constexpr auto get_user_data = _get_user_data; }; -#define HB_DEFINE_VTABLE(name) \ +#define HB_DEFINE_VTABLE(name, empty) \ template<> \ struct vtable<hb_##name##_t> \ : vtable_t<hb_##name##_t, \ - &hb_##name##_get_empty, \ + empty, \ &hb_##name##_reference, \ &hb_##name##_destroy, \ &hb_##name##_set_user_data, \ &hb_##name##_get_user_data> {} -HB_DEFINE_VTABLE (buffer); -HB_DEFINE_VTABLE (blob); -HB_DEFINE_VTABLE (face); -HB_DEFINE_VTABLE (font); -HB_DEFINE_VTABLE (font_funcs); -HB_DEFINE_VTABLE (map); -HB_DEFINE_VTABLE (set); -HB_DEFINE_VTABLE (shape_plan); -HB_DEFINE_VTABLE (unicode_funcs); -HB_DEFINE_VTABLE (draw_funcs); -HB_DEFINE_VTABLE (paint_funcs); - -#undef HB_DEFINE_VTABLE +HB_DEFINE_VTABLE (buffer, &hb_buffer_get_empty); +HB_DEFINE_VTABLE (blob, &hb_blob_get_empty); +HB_DEFINE_VTABLE (face, &hb_face_get_empty); +HB_DEFINE_VTABLE (font, &hb_font_get_empty); +HB_DEFINE_VTABLE (font_funcs, &hb_font_funcs_get_empty); +HB_DEFINE_VTABLE (map, &hb_map_get_empty); +HB_DEFINE_VTABLE (set, &hb_set_get_empty); +HB_DEFINE_VTABLE (shape_plan, &hb_shape_plan_get_empty); +HB_DEFINE_VTABLE (unicode_funcs, &hb_unicode_funcs_get_empty); +HB_DEFINE_VTABLE (draw_funcs, &hb_draw_funcs_get_empty); +HB_DEFINE_VTABLE (paint_funcs, &hb_paint_funcs_get_empty); #ifdef HB_SUBSET_H -#define HB_DEFINE_VTABLE(name) \ - template<> \ - struct vtable<hb_##name##_t> \ - : vtable_t<hb_##name##_t, \ - nullptr, \ - &hb_##name##_reference, \ - &hb_##name##_destroy, \ - &hb_##name##_set_user_data, \ - &hb_##name##_get_user_data> {} - - -HB_DEFINE_VTABLE (subset_input); -HB_DEFINE_VTABLE (subset_plan); - -#undef HB_DEFINE_VTABLE +HB_DEFINE_VTABLE (subset_input, nullptr); +HB_DEFINE_VTABLE (subset_plan, nullptr); #endif +#ifdef HB_RASTER_H + +HB_DEFINE_VTABLE (raster_image, nullptr); +HB_DEFINE_VTABLE (raster_draw, nullptr); +HB_DEFINE_VTABLE (raster_paint, nullptr); + +#endif + + +#ifdef HB_VECTOR_H + +HB_DEFINE_VTABLE (vector_draw, nullptr); +HB_DEFINE_VTABLE (vector_paint, nullptr); + +#endif + +#undef HB_DEFINE_VTABLE + + } // namespace hb /* Workaround for GCC < 7, see: