@@ -269,6 +269,9 @@ G_BEGIN_DECLS
269269 * #GArrowExtractRegexOptions is a class to customize the `extract_regex`
270270 * function.
271271 *
272+ * #GArrowListSliceOptions is a class to customize the `list_slice`
273+ * function.
274+ *
272275 * There are many functions to compute data on an array.
273276 */
274277
@@ -7091,6 +7094,215 @@ garrow_extract_regex_options_new(void)
70917094 return GARROW_EXTRACT_REGEX_OPTIONS (options);
70927095}
70937096
7097+ enum {
7098+ PROP_LIST_SLICE_OPTIONS_START = 1 ,
7099+ PROP_LIST_SLICE_OPTIONS_STOP,
7100+ PROP_LIST_SLICE_OPTIONS_STEP,
7101+ PROP_LIST_SLICE_OPTIONS_RETURN_FIXED_SIZE_LIST,
7102+ };
7103+
7104+ G_DEFINE_TYPE (GArrowListSliceOptions,
7105+ garrow_list_slice_options,
7106+ GARROW_TYPE_FUNCTION_OPTIONS)
7107+
7108+ static void
7109+ garrow_list_slice_options_set_property(GObject *object,
7110+ guint prop_id,
7111+ const GValue *value,
7112+ GParamSpec *pspec)
7113+ {
7114+ auto options = garrow_list_slice_options_get_raw (GARROW_LIST_SLICE_OPTIONS (object));
7115+
7116+ switch (prop_id) {
7117+ case PROP_LIST_SLICE_OPTIONS_START:
7118+ options->start = g_value_get_int64 (value);
7119+ break ;
7120+ case PROP_LIST_SLICE_OPTIONS_STOP:
7121+ {
7122+ gint64 stop_value = g_value_get_int64 (value);
7123+ if (stop_value == -1 ) {
7124+ options->stop = std::nullopt ;
7125+ } else {
7126+ options->stop = stop_value;
7127+ }
7128+ }
7129+ break ;
7130+ case PROP_LIST_SLICE_OPTIONS_STEP:
7131+ options->step = g_value_get_int64 (value);
7132+ break ;
7133+ case PROP_LIST_SLICE_OPTIONS_RETURN_FIXED_SIZE_LIST:
7134+ {
7135+ auto return_fixed_size_list_value =
7136+ static_cast <GArrowListSliceReturnFixedSizeList>(g_value_get_enum (value));
7137+ switch (return_fixed_size_list_value) {
7138+ case GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_AUTO:
7139+ options->return_fixed_size_list = std::nullopt ;
7140+ break ;
7141+ case GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_FALSE:
7142+ options->return_fixed_size_list = false ;
7143+ break ;
7144+ case GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_TRUE:
7145+ options->return_fixed_size_list = true ;
7146+ break ;
7147+ default :
7148+ options->return_fixed_size_list = std::nullopt ;
7149+ break ;
7150+ }
7151+ }
7152+ break ;
7153+ default :
7154+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
7155+ break ;
7156+ }
7157+ }
7158+
7159+ static void
7160+ garrow_list_slice_options_get_property (GObject *object,
7161+ guint prop_id,
7162+ GValue *value,
7163+ GParamSpec *pspec)
7164+ {
7165+ auto options = garrow_list_slice_options_get_raw (GARROW_LIST_SLICE_OPTIONS (object));
7166+
7167+ switch (prop_id) {
7168+ case PROP_LIST_SLICE_OPTIONS_START:
7169+ g_value_set_int64 (value, options->start );
7170+ break ;
7171+ case PROP_LIST_SLICE_OPTIONS_STOP:
7172+ if (options->stop .has_value ()) {
7173+ g_value_set_int64 (value, options->stop .value ());
7174+ } else {
7175+ g_value_set_int64 (value, -1 ); // Sentinel value for "not set"
7176+ }
7177+ break ;
7178+ case PROP_LIST_SLICE_OPTIONS_STEP:
7179+ g_value_set_int64 (value, options->step );
7180+ break ;
7181+ case PROP_LIST_SLICE_OPTIONS_RETURN_FIXED_SIZE_LIST:
7182+ if (options->return_fixed_size_list .has_value ()) {
7183+ if (options->return_fixed_size_list .value ()) {
7184+ g_value_set_enum (value, GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_TRUE);
7185+ } else {
7186+ g_value_set_enum (value, GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_FALSE);
7187+ }
7188+ } else {
7189+ // When not set (nullopt), return AUTO (default)
7190+ g_value_set_enum (value, GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_AUTO);
7191+ }
7192+ break ;
7193+ default :
7194+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
7195+ break ;
7196+ }
7197+ }
7198+
7199+ static void
7200+ garrow_list_slice_options_init (GArrowListSliceOptions *object)
7201+ {
7202+ auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE (object);
7203+ priv->options = static_cast <arrow::compute::FunctionOptions *>(
7204+ new arrow::compute::ListSliceOptions ());
7205+ }
7206+
7207+ static void
7208+ garrow_list_slice_options_class_init (GArrowListSliceOptionsClass *klass)
7209+ {
7210+ auto gobject_class = G_OBJECT_CLASS (klass);
7211+
7212+ gobject_class->set_property = garrow_list_slice_options_set_property;
7213+ gobject_class->get_property = garrow_list_slice_options_get_property;
7214+
7215+ arrow::compute::ListSliceOptions options;
7216+
7217+ GParamSpec *spec;
7218+ /* *
7219+ * GArrowListSliceOptions:start:
7220+ *
7221+ * The start of list slicing.
7222+ *
7223+ * Since: 23.0.0
7224+ */
7225+ spec = g_param_spec_int64 (" start" ,
7226+ " Start" ,
7227+ " The start of list slicing" ,
7228+ G_MININT64,
7229+ G_MAXINT64,
7230+ options.start ,
7231+ static_cast <GParamFlags>(G_PARAM_READWRITE));
7232+ g_object_class_install_property (gobject_class, PROP_LIST_SLICE_OPTIONS_START, spec);
7233+
7234+ /* *
7235+ * GArrowListSliceOptions:stop:
7236+ *
7237+ * Optional stop of list slicing. If not set (value is -1), then slice to end.
7238+ *
7239+ * Since: 23.0.0
7240+ */
7241+ spec = g_param_spec_int64 (
7242+ " stop" ,
7243+ " Stop" ,
7244+ " Optional stop of list slicing. If not set (value is -1), then slice to end" ,
7245+ -1 , // Use -1 as sentinel for "not set"
7246+ G_MAXINT64,
7247+ -1 , // Default to -1 (not set)
7248+ static_cast <GParamFlags>(G_PARAM_READWRITE));
7249+ g_object_class_install_property (gobject_class, PROP_LIST_SLICE_OPTIONS_STOP, spec);
7250+
7251+ /* *
7252+ * GArrowListSliceOptions:step:
7253+ *
7254+ * Slicing step.
7255+ *
7256+ * Since: 23.0.0
7257+ */
7258+ spec = g_param_spec_int64 (" step" ,
7259+ " Step" ,
7260+ " Slicing step" ,
7261+ G_MININT64,
7262+ G_MAXINT64,
7263+ options.step ,
7264+ static_cast <GParamFlags>(G_PARAM_READWRITE));
7265+ g_object_class_install_property (gobject_class, PROP_LIST_SLICE_OPTIONS_STEP, spec);
7266+
7267+ /* *
7268+ * GArrowListSliceOptions:return-fixed-size-list:
7269+ *
7270+ * Whether to return a FixedSizeListArray. If
7271+ * #GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_TRUE and stop is after a list element's
7272+ * length, nulls will be appended to create the requested slice size. If
7273+ * #GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_AUTO (default), will return whatever type
7274+ * it got in.
7275+ *
7276+ * Since: 23.0.0
7277+ */
7278+ spec = g_param_spec_enum (
7279+ " return-fixed-size-list" ,
7280+ " Return fixed size list" ,
7281+ " Whether to return a FixedSizeListArray. If TRUE and stop is after a list element's "
7282+ " length, nulls will be appended to create the requested slice size. If AUTO "
7283+ " (default), will return whatever type it got in" ,
7284+ GARROW_TYPE_LIST_SLICE_RETURN_FIXED_SIZE_LIST,
7285+ GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_AUTO,
7286+ static_cast <GParamFlags>(G_PARAM_READWRITE));
7287+ g_object_class_install_property (gobject_class,
7288+ PROP_LIST_SLICE_OPTIONS_RETURN_FIXED_SIZE_LIST,
7289+ spec);
7290+ }
7291+
7292+ /* *
7293+ * garrow_list_slice_options_new:
7294+ *
7295+ * Returns: A newly created #GArrowListSliceOptions.
7296+ *
7297+ * Since: 23.0.0
7298+ */
7299+ GArrowListSliceOptions *
7300+ garrow_list_slice_options_new (void )
7301+ {
7302+ auto options = g_object_new (GARROW_TYPE_LIST_SLICE_OPTIONS, NULL );
7303+ return GARROW_LIST_SLICE_OPTIONS (options);
7304+ }
7305+
70947306G_END_DECLS
70957307
70967308arrow::Result<arrow::FieldRef>
@@ -7893,3 +8105,38 @@ garrow_extract_regex_options_get_raw(GArrowExtractRegexOptions *options)
78938105 return static_cast <arrow::compute::ExtractRegexOptions *>(
78948106 garrow_function_options_get_raw (GARROW_FUNCTION_OPTIONS (options)));
78958107}
8108+
8109+ GArrowListSliceOptions *
8110+ garrow_list_slice_options_new_raw (const arrow::compute::ListSliceOptions *arrow_options)
8111+ {
8112+ gint64 stop_value = -1 ;
8113+ if (arrow_options->stop .has_value ()) {
8114+ stop_value = arrow_options->stop .value ();
8115+ }
8116+ GArrowListSliceReturnFixedSizeList return_fixed_size_list_value =
8117+ GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_AUTO;
8118+ if (arrow_options->return_fixed_size_list .has_value ()) {
8119+ if (arrow_options->return_fixed_size_list .value ()) {
8120+ return_fixed_size_list_value = GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_TRUE;
8121+ } else {
8122+ return_fixed_size_list_value = GARROW_LIST_SLICE_RETURN_FIXED_SIZE_LIST_FALSE;
8123+ }
8124+ }
8125+ return GARROW_LIST_SLICE_OPTIONS (g_object_new (GARROW_TYPE_LIST_SLICE_OPTIONS,
8126+ " start" ,
8127+ arrow_options->start ,
8128+ " stop" ,
8129+ stop_value,
8130+ " step" ,
8131+ arrow_options->step ,
8132+ " return-fixed-size-list" ,
8133+ return_fixed_size_list_value,
8134+ NULL ));
8135+ }
8136+
8137+ arrow::compute::ListSliceOptions *
8138+ garrow_list_slice_options_get_raw (GArrowListSliceOptions *options)
8139+ {
8140+ return static_cast <arrow::compute::ListSliceOptions *>(
8141+ garrow_function_options_get_raw (GARROW_FUNCTION_OPTIONS (options)));
8142+ }
0 commit comments