GwySIUnit — SI unit representation, physical quantitiy formatting
#define | gwy_si_unit_duplicate() |
#define | gwy_si_unit_assign() |
GwySIUnit * | gwy_si_unit_new () |
GwySIUnit * | gwy_si_unit_new_parse () |
void | gwy_si_unit_set_from_string () |
void | gwy_si_unit_set_from_string_parse () |
gchar * | gwy_si_unit_get_string () |
GwySIUnit * | gwy_si_unit_multiply () |
GwySIUnit * | gwy_si_unit_divide () |
GwySIUnit * | gwy_si_unit_power () |
GwySIUnit * | gwy_si_unit_nth_root () |
GwySIUnit * | gwy_si_unit_power_multiply () |
GwySIUnit * | gwy_si_unit_factor_to_base () |
gboolean | gwy_si_unit_equal () |
gboolean | gwy_si_unit_equal_string () |
GwySIValueFormat * | gwy_si_unit_get_format () |
GwySIValueFormat * | gwy_si_unit_get_format_for_power10 () |
GwySIValueFormat * | gwy_si_unit_get_format_with_resolution () |
GwySIValueFormat * | gwy_si_unit_get_format_with_digits () |
void | value-changed | Run First |
struct | GwySIUnit |
struct | GwySIUnitClass |
GObject ╰── GwySIUnit
GwySIUnit implements GwySerializable.
#include <libgwyddion/gwyddion.h>
GwySIUnit object represents a physical SI unit (or any other unit), it can be created from a unit string with
gwy_si_unit_new()
.
GwySIUnit is also responsible for prefixes selection and generally formatting of physical quantities (see also
gwymath for pure number formatting functions). There are several functions computing value format (as
a GwySIValueFormat structure) with given resolution -- gwy_si_unit_get_format_with_resolution()
, or number of
significant digits -- gwy_si_unit_get_format_with_digits()
.
#define gwy_si_unit_duplicate(siunit)
Convenience macro doing gwy_serializable_duplicate()
with all the necessary typecasting.
siunit |
An SI unit to duplicate. |
#define gwy_si_unit_assign(dest, source)
Convenience macro making one SI unit equal to another.
This is just a gwy_serializable_clone()
wrapper with all the necessary typecasting.
dest |
Target SI unit. |
|
source |
Source SI unit. |
Since: 2.51
GwySIUnit *
gwy_si_unit_new (const gchar *unit_string
);
Creates a new SI unit from string representation.
Unit string represents unit with no prefixes (e. g. "m", "N", "A", etc.)
unit_string |
Unit string (it can be |
A new SI unit.
GwySIUnit * gwy_si_unit_new_parse (const gchar *unit_string
,gint *power10
);
Creates a new SI unit from string representation.
This is a more powerful version of gwy_si_unit_new()
: unit_string
may be a relatively complex unit, with prefixes,
like "pA/s" or "km^2". Beside conversion to a base SI unit like "A/s" or "m^2" it also computes the power of 10 one
has to multiply the base unit with to get an equivalent of unit_string
.
For example, for "pA/s"
it will store -12 to power10
because 1 pA/s is 1e-12 A/s, for
"km^2"
it will store 6 to power10
because 1 km^2 is 1e6 m^2.
unit_string |
Unit string (it can be |
|
power10 |
Where power of 10 should be stored (or |
A new SI unit.
void gwy_si_unit_set_from_string (GwySIUnit *siunit
,const gchar *unit_string
);
Sets string that represents unit.
It must be base unit with no prefixes (e. g. "m", "N", "A", etc.).
siunit |
An SI unit. |
|
unit_string |
Unit string to set |
void gwy_si_unit_set_from_string_parse (GwySIUnit *siunit
,const gchar *unit_string
,gint *power10
);
Changes an SI unit according to string representation.
This is a more powerful version of gwy_si_unit_set_from_string()
, please see gwy_si_unit_new_parse()
for some
discussion.
siunit |
An SI unit. |
|
unit_string |
Unit string to set |
|
power10 |
Where power of 10 should be stored (or |
gchar * gwy_si_unit_get_string (GwySIUnit *siunit
,GwySIUnitFormatStyle style
);
Obtains string representing a SI unit.
siunit |
An SI unit. |
|
style |
Unit format style. |
A newly allocated string that represents the base unit (with no prefixes).
GwySIUnit * gwy_si_unit_multiply (GwySIUnit *siunit1
,GwySIUnit *siunit2
,GwySIUnit *result
);
Multiplies two SI units.
siunit1 |
An SI unit. |
|
siunit2 |
An SI unit. |
|
result |
An SI unit to set to product of |
When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used later.
Otherwise result
itself is simply returned, its reference count is NOT increased.
GwySIUnit * gwy_si_unit_divide (GwySIUnit *siunit1
,GwySIUnit *siunit2
,GwySIUnit *result
);
Divides two SI units.
siunit1 |
An SI unit. |
|
siunit2 |
An SI unit. |
|
result |
An SI unit to set to quotient of |
When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used later.
Otherwise result
itself is simply returned, its reference count is NOT increased.
GwySIUnit * gwy_si_unit_power (GwySIUnit *siunit
,gint power
,GwySIUnit *result
);
Computes a power of an SI unit.
siunit |
An SI unit. |
|
power |
Power to raise |
|
result |
An SI unit to set to power of |
When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used later.
Otherwise result
itself is simply returned, its reference count is NOT increased.
GwySIUnit * gwy_si_unit_nth_root (GwySIUnit *siunit
,gint ipower
,GwySIUnit *result
);
Calulates n-th root of an SI unit.
This operation fails if the result would have fractional powers that are not representable by GwySIUnit.
siunit |
An SI unit. |
|
ipower |
The root to take: 2 means a quadratic root, 3 means cubic root, etc. |
|
result |
An SI unit to set to power of |
On success: When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used
later, otherwise result
itself is simply returned, its reference count is NOT increased. On failure NULL
is always returned.
Since: 2.5
GwySIUnit * gwy_si_unit_power_multiply (GwySIUnit *siunit1
,gint power1
,GwySIUnit *siunit2
,gint power2
,GwySIUnit *result
);
Computes the product of two SI units raised to arbitrary powers.
This is the most complex SI unit arithmetic function. It can be easily chained when more than two units are to be multiplied.
siunit1 |
An SI unit. |
|
power1 |
Power to raise |
|
siunit2 |
An SI unit. |
|
power2 |
Power to raise |
|
result |
An SI unit to set to |
When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used later.
Otherwise result
itself is simply returned, its reference count is NOT increased.
Since: 2.4
GwySIUnit * gwy_si_unit_factor_to_base (GwySIUnit *siunit
,GwySIUnit *result
,gdouble *mfactor
);
Factors a possibly derived SI unit to base units.
For instance, if siunit
was set to "N/m" the result will be "kg/s^2".
Normally the result will consist only of the base seven SI units. However, recognised non-SI units (and
pseudounits) in siunit
, such as "px" are left intact in the decomposition.
Also note that the decomposition is done to prefixable units. Kilogram is not prefixable (gram is) and there is no general way to keep the kilo- on the kilograms when deriving units for different powers of 10. Therefore, the calculated factor corresponds to decomposition to grams.
You must multiply the corresponding data with factor
if you intend to use the result
for them instead of unit
!
siunit |
An SI unit. |
|
result |
An SI unit to set to decomposed |
|
mfactor |
Location to store multiplicative factor between |
When result
is NULL
, a newly created SI unit that has to be dereferenced when no longer used later.
Otherwise result
itself is simply returned, its reference count is NOT increased.
Since: 2.51
gboolean gwy_si_unit_equal (GwySIUnit *siunit
,GwySIUnit *siunit2
);
Checks whether two SI units are equal.
siunit |
First unit. |
|
siunit2 |
Second unit. |
TRUE
if the units are equal.
gboolean gwy_si_unit_equal_string (GwySIUnit *siunit
,const gchar *unit_string
);
Checks whether an SI unit corresponds to given string.
Any power-of-ten prefixes are ignored. This function is mostly useful for quick commensurability checks with
simple units such as "m" and for checking whether a unit is non-empty (by comparing with NULL
or an empty string).
siunit |
An SI unit. |
|
unit_string |
Unit string (it can be |
TRUE
if the units is equivalent to the given string.
Since: 2.49
GwySIValueFormat * gwy_si_unit_get_format (GwySIUnit *siunit
,GwySIUnitFormatStyle style
,gdouble value
,GwySIValueFormat *format
);
Finds a good format for representing a value.
The values should be then printed as value/format->magnitude
[format->units
] with format->precision
decimal
places.
siunit |
An SI unit. |
|
style |
Unit format style. |
|
value |
Value the format should be suitable for. |
|
format |
A value format to set-up, may be |
The value format. If format
was NULL
, a newly allocated format is returned, otherwise (modified)
format
itself is returned.
GwySIValueFormat * gwy_si_unit_get_format_for_power10 (GwySIUnit *siunit
,GwySIUnitFormatStyle style
,gint power10
,GwySIValueFormat *format
);
Finds format for representing a specific power-of-10 multiple of a unit.
The values should be then printed as value/format->magnitude
[format->units
] with format->precision
decimal
places.
This function does not change the precision field of format
.
siunit |
An SI unit. |
|
style |
Unit format style. |
|
power10 |
Power of 10, in the same sense as |
|
format |
A value format to set-up, may be |
The value format. If format
was NULL
, a newly allocated format is returned, otherwise (modified)
format
itself is returned.
GwySIValueFormat * gwy_si_unit_get_format_with_resolution (GwySIUnit *siunit
,GwySIUnitFormatStyle style
,gdouble maximum
,gdouble resolution
,GwySIValueFormat *format
);
Finds a good format for representing a range of values with given resolution.
The values should be then printed as value/format->magnitude
[format->units
] with format->precision
decimal
places.
siunit |
An SI unit. |
|
style |
Unit format style. |
|
maximum |
The maximum value to be represented. |
|
resolution |
The smallest step (approximately) that should make a visible difference in the representation. |
|
format |
A value format to set-up, may be |
The value format. If format
was NULL
, a newly allocated format is returned, otherwise (modified)
format
itself is returned.
GwySIValueFormat * gwy_si_unit_get_format_with_digits (GwySIUnit *siunit
,GwySIUnitFormatStyle style
,gdouble maximum
,gint sdigits
,GwySIValueFormat *format
);
Finds a good format for representing a values with given number of significant digits.
The values should be then printed as value/format->magnitude
[format->units
] with format->precision
decimal
places.
siunit |
An SI unit. |
|
style |
Unit format style. |
|
maximum |
The maximum value to be represented. |
|
sdigits |
The number of significant digits the value should have. |
|
format |
A value format to set-up, may be |
The value format. If format
was NULL
, a newly allocated format is returned, otherwise (modified)
format
itself is returned.
struct GwySIUnit;
The GwySIUnit struct contains private data only and should be accessed using the functions below.
struct GwySIUnitClass { GObjectClass parent_class; void (*value_changed)(GwySIUnit *siunit); };
“value-changed”
signalvoid user_function (GwySIUnit *gwysiunit, gpointer user_data)
The ::value-changed signal is emitted whenever SI unit changes.
gwysiunit |
The GwySIUnit which received the signal. |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run First