XML Schema Decimals
3
RASQAL Library

# XML Schema Decimals

XML Schema decimal number arithmetic.

## Synopsis

    void                rasqal_free_xsd_decimal             (rasqal_xsd_decimal *dec);
    rasqal_xsd_decimal* rasqal_new_xsd_decimal              (void);
    typedef             rasqal_xsd_decimal;
    int                 rasqal_xsd_decimal_add              (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    char*               rasqal_xsd_decimal_as_counted_string
                                                            (rasqal_xsd_decimal *dec,
                                                             size_t *len_p);
    char*               rasqal_xsd_decimal_as_string        (rasqal_xsd_decimal *dec);
    int                 rasqal_xsd_decimal_compare          (rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    int                 rasqal_xsd_decimal_divide           (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    int                 rasqal_xsd_decimal_equals           (rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    double              rasqal_xsd_decimal_get_double       (rasqal_xsd_decimal *dec);
    int                 rasqal_xsd_decimal_is_zero          (rasqal_xsd_decimal *d);
    int                 rasqal_xsd_decimal_multiply         (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    int                 rasqal_xsd_decimal_print            (rasqal_xsd_decimal *dec,
                                                             FILE *stream);
    int                 rasqal_xsd_decimal_set_double       (rasqal_xsd_decimal *dec,
                                                             double d);
    int                 rasqal_xsd_decimal_set_long         (rasqal_xsd_decimal *dec,
                                                             long l );
    int                 rasqal_xsd_decimal_set_string       (rasqal_xsd_decimal *dec,
                                                             const char *string);
    int                 rasqal_xsd_decimal_subtract         (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);
    int                 rasqal_xsd_decimal_negate           (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a);

## Description

A class for providing XSD Decimals with arbitrary length floating point decimals.

## Details

### rasqal_free_xsd_decimal ()

    void                rasqal_free_xsd_decimal             (rasqal_xsd_decimal *dec);

Destroy XSD Decimal object.

`dec` :

  Decimal object

### rasqal_new_xsd_decimal ()

    rasqal_xsd_decimal* rasqal_new_xsd_decimal              (void);

Create a new XSD Decimal object.

Returns :

  new xsd:decimal object or NULL on failure.

### rasqal_xsd_decimal

    typedef struct rasqal_xsd_decimal_s rasqal_xsd_decimal;

Rasqal XSD Decimal class.

### rasqal_xsd_decimal_add ()

    int                 rasqal_xsd_decimal_add              (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Add two XSD Decimals and store in result XSD Decimal

`result` :

  result variable

`a` :

  argment decimal 1

`b` :

  argument decimal 2

Returns :

  non-0 on failure

### rasqal_xsd_decimal_as_counted_string ()

    char*               rasqal_xsd_decimal_as_counted_string
                                                            (rasqal_xsd_decimal *dec,
                                                             size_t *len_p);

Get an XSD Decimal as a string lexical form with optional length.

The returned string is shared and owned by the `dec` object and must be copied. If `len_p` is not NULL, the length of the returned string is stored.

`dec` :

  XSD Decimal

`len_p` :

  pointer to length variable (or NULL)

Returns :

  lexical form string or NULL on failure.

### rasqal_xsd_decimal_as_string ()

    char*               rasqal_xsd_decimal_as_string        (rasqal_xsd_decimal *dec);

Get an XSD Decimal as a string lexical form.

The returned string is shared and owned by the `dec` object and must be copied.

`dec` :

  XSD Decimal

Returns :

  lexical form string or NULL on failure.

### rasqal_xsd_decimal_compare ()

    int                 rasqal_xsd_decimal_compare          (rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Compare two XSD Decimals

`a` :

  first XSD decimal

`b` :

  second XSD decimal

Returns :

  <0 if `a` is less than `b`, 0 if equal, >1 otherwise

### rasqal_xsd_decimal_divide ()

    int                 rasqal_xsd_decimal_divide           (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Divide two XSD Decimals and store in result XSD Decimal

If the divisor `b` is 0, failure is returned

`result` :

  result variable

`a` :

  argment decimal 1

`b` :

  argument decimal 2

Returns :

  non-0 on failure

### rasqal_xsd_decimal_equals ()

    int                 rasqal_xsd_decimal_equals           (rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Compare two XSD Decimals for equality.

`a` :

  first XSD Decimal

`b` :

  second XSD Decimal

Returns :

  non-0 if equal.

### rasqal_xsd_decimal_get_double ()

    double              rasqal_xsd_decimal_get_double       (rasqal_xsd_decimal *dec);

Get an XSD Decimal as a double (may lose precision)

`dec` :

  XSD Decimal

Returns :

  double value.

### rasqal_xsd_decimal_is_zero ()

    int                 rasqal_xsd_decimal_is_zero          (rasqal_xsd_decimal *d);

Test if an XSD decimal is zero.

`d` :

  decimal

Returns :

  non-0 if decimal is zero

### rasqal_xsd_decimal_multiply ()

    int                 rasqal_xsd_decimal_multiply         (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Multiply two XSD Decimals and store in result XSD Decimal

`result` :

  result variable

`a` :

  argment decimal 1

`b` :

  argument decimal 2

Returns :

  non-0 on failure

### rasqal_xsd_decimal_print ()

    int                 rasqal_xsd_decimal_print            (rasqal_xsd_decimal *dec,
                                                             FILE *stream);

Write an XSD Decimal to a FILE* stream

`dec` :

  XSD Decimal

`stream` :

  FILE* stream

Returns :

  non-0 on failure

### rasqal_xsd_decimal_set_double ()

    int                 rasqal_xsd_decimal_set_double       (rasqal_xsd_decimal *dec,
                                                             double d);

Set an XSD Decimal value from a double.

`dec` :

  XSD Decimal

`d` :

  double

Returns :

  non-0 on failure

### rasqal_xsd_decimal_set_long ()

    int                 rasqal_xsd_decimal_set_long         (rasqal_xsd_decimal *dec,
                                                             long l );

Set an XSD Decimal value from a long.

`dec` :

  XSD Decimal

`Param2` :

Returns :

  non-0 on failure

### rasqal_xsd_decimal_set_string ()

    int                 rasqal_xsd_decimal_set_string       (rasqal_xsd_decimal *dec,
                                                             const char *string);

Set an XSD Decimal value from a string lexical form

`dec` :

  XSD Decimal

`string` :

  lexical form

Returns :

  non-0 on failure

### rasqal_xsd_decimal_subtract ()

    int                 rasqal_xsd_decimal_subtract         (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a,
                                                             rasqal_xsd_decimal *b);

Subtract two XSD Decimals and store in result XSD Decimal

`result` :

  result variable

`a` :

  argment decimal 1

`b` :

  argument decimal 2

Returns :

  non-0 on failure

### rasqal_xsd_decimal_negate ()

    int                 rasqal_xsd_decimal_negate           (rasqal_xsd_decimal *result,
                                                             rasqal_xsd_decimal *a);

Negate an XSD Decimal

`result` :

  result variable

`a` :

  argment decimal

Returns :

  non-0 on failure