girepository: Split GIValueInfo out of gienuminfo.c

It’s a separate type, so it would be less confusing if it were in its
own file.

This doesn’t change any API.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3155
This commit is contained in:
Philip Withnall 2024-01-17 13:43:58 +00:00
parent 515b3fc1dc
commit 9377a0dd54
6 changed files with 134 additions and 63 deletions

View File

@ -221,51 +221,3 @@ gi_enum_info_class_init (gpointer g_class,
info_class->info_type = GI_INFO_TYPE_ENUM;
}
/**
* GIValueInfo:
*
* A `GIValueInfo` represents a value in an enumeration.
*
* The `GIValueInfo` is fetched by calling
* [method@GIRepository.EnumInfo.get_value] on a [class@GIRepository.EnumInfo].
*
* Since: 2.80
*/
/**
* gi_value_info_get_value:
* @info: a #GIValueInfo
*
* Obtain the enumeration value of the `GIValueInfo`.
*
* Returns: the enumeration value. This will always be representable
* as a 32-bit signed or unsigned value. The use of `int64_t` as the
* return type is to allow both.
* Since: 2.80
*/
int64_t
gi_value_info_get_value (GIValueInfo *info)
{
GIRealInfo *rinfo = (GIRealInfo *)info;
ValueBlob *blob;
g_return_val_if_fail (info != NULL, -1);
g_return_val_if_fail (GI_IS_VALUE_INFO (info), -1);
blob = (ValueBlob *)&rinfo->typelib->data[rinfo->offset];
if (blob->unsigned_value)
return (int64_t)(uint32_t)blob->value;
else
return (int64_t)blob->value;
}
void
gi_value_info_class_init (gpointer g_class,
gpointer class_data)
{
GIBaseInfoClass *info_class = g_class;
info_class->info_type = GI_INFO_TYPE_VALUE;
}

View File

@ -44,17 +44,6 @@ G_BEGIN_DECLS
((gi_base_info_get_info_type ((GIBaseInfo*) info) == GI_INFO_TYPE_ENUM) || \
(gi_base_info_get_info_type ((GIBaseInfo*) info) == GI_INFO_TYPE_FLAGS))
/**
* GI_IS_VALUE_INFO:
* @info: an info structure
*
* Checks if @info is a [class@GIRepository.ValueInfo].
*
* Since: 2.80
*/
#define GI_IS_VALUE_INFO(info) \
(gi_base_info_get_info_type ((GIBaseInfo*) info) == GI_INFO_TYPE_VALUE)
GI_AVAILABLE_IN_ALL
unsigned int gi_enum_info_get_n_values (GIEnumInfo *info);
@ -76,8 +65,4 @@ GITypeTag gi_enum_info_get_storage_type (GIEnumInfo *info);
GI_AVAILABLE_IN_ALL
const char * gi_enum_info_get_error_domain (GIEnumInfo *info);
GI_AVAILABLE_IN_ALL
int64_t gi_value_info_get_value (GIValueInfo *info);
G_END_DECLS

View File

@ -50,6 +50,7 @@
#include <girepository/gitypes.h>
#include <girepository/giunioninfo.h>
#include <girepository/giunresolvedinfo.h>
#include <girepository/givalueinfo.h>
#include <girepository/givfuncinfo.h>
G_BEGIN_DECLS

View File

@ -0,0 +1,81 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
* GObject introspection: Enum implementation
*
* Copyright (C) 2005 Matthias Clasen
* Copyright (C) 2008,2009 Red Hat, Inc.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <glib.h>
#include <girepository/girepository.h>
#include "gibaseinfo-private.h"
#include "girepository-private.h"
#include "gitypelib-internal.h"
#include "givalueinfo.h"
/**
* GIValueInfo:
*
* A `GIValueInfo` represents a value in an enumeration.
*
* The `GIValueInfo` is fetched by calling
* [method@GIRepository.EnumInfo.get_value] on a [class@GIRepository.EnumInfo].
*
* Since: 2.80
*/
/**
* gi_value_info_get_value:
* @info: a #GIValueInfo
*
* Obtain the enumeration value of the `GIValueInfo`.
*
* Returns: the enumeration value. This will always be representable
* as a 32-bit signed or unsigned value. The use of `int64_t` as the
* return type is to allow both.
* Since: 2.80
*/
int64_t
gi_value_info_get_value (GIValueInfo *info)
{
GIRealInfo *rinfo = (GIRealInfo *)info;
ValueBlob *blob;
g_return_val_if_fail (info != NULL, -1);
g_return_val_if_fail (GI_IS_VALUE_INFO (info), -1);
blob = (ValueBlob *)&rinfo->typelib->data[rinfo->offset];
if (blob->unsigned_value)
return (int64_t)(uint32_t)blob->value;
else
return (int64_t)blob->value;
}
void
gi_value_info_class_init (gpointer g_class,
gpointer class_data)
{
GIBaseInfoClass *info_class = g_class;
info_class->info_type = GI_INFO_TYPE_VALUE;
}

View File

@ -0,0 +1,50 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
* GObject introspection: Enum and Enum values
*
* Copyright (C) 2005 Matthias Clasen
* Copyright (C) 2008,2009 Red Hat, Inc.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#pragma once
#if !defined (__GIREPOSITORY_H_INSIDE__) && !defined (GI_COMPILATION)
#error "Only <girepository.h> can be included directly."
#endif
#include <girepository/gitypes.h>
G_BEGIN_DECLS
/**
* GI_IS_VALUE_INFO:
* @info: an info structure
*
* Checks if @info is a [class@GIRepository.ValueInfo].
*
* Since: 2.80
*/
#define GI_IS_VALUE_INFO(info) \
(gi_base_info_get_info_type ((GIBaseInfo*) info) == GI_INFO_TYPE_VALUE)
GI_AVAILABLE_IN_ALL
int64_t gi_value_info_get_value (GIValueInfo *info);
G_END_DECLS

View File

@ -62,6 +62,7 @@ girepo_headers = files(
'gitypes.h',
'giunioninfo.h',
'giunresolvedinfo.h',
'givalueinfo.h',
'givfuncinfo.h',
)
@ -162,6 +163,7 @@ girepo_sources = files(
'gitypelib.c',
'giunioninfo.c',
'giunresolvedinfo.c',
'givalueinfo.c',
'givfuncinfo.c',
)