+/**
+ * \file
+ */
+
#ifndef __MONO_DECIMAL_MS_H__
#define __MONO_DECIMAL_MS_H__
-typedef struct tagDEC {
+
+typedef struct {
// Decimal.cs treats the first two shorts as one long
// And they seriable the data so we need to little endian
// seriliazation
#if G_BYTE_ORDER != G_LITTLE_ENDIAN
union {
struct {
- int8_t sign;
- int8_t scale;
+ uint8_t sign;
+ uint8_t scale;
} u;
uint16_t signscale;
} u;
- uint16_t wReserved;
+ uint16_t reserved;
#else
- uint16_t wReserved;
+ uint16_t reserved;
union {
struct {
- int8_t scale;
- int8_t sign;
+ uint8_t scale;
+ uint8_t sign;
} u;
uint16_t signscale;
} u;
} MonoDecimal;
typedef enum {
+ MONO_DECIMAL_CMP_LT=-1,
MONO_DECIMAL_CMP_EQ,
- MONO_DECIMAL_CMP_LT,
MONO_DECIMAL_CMP_GT
} MonoDecimalCompareResult;
MonoDecimalCompareResult
- mono_decimal_compare (MonoDecimal *left, MonoDecimal *right) MONO_INTERNAL;
+ mono_decimal_compare (MonoDecimal *left, MonoDecimal *right);
-void mono_decimal_init_single (MonoDecimal *_this, float value) MONO_INTERNAL;
-void mono_decimal_init_double (MonoDecimal *_this, double value) MONO_INTERNAL;
-void mono_decimal_floor (MonoDecimal *d) MONO_INTERNAL;
-int32_t mono_decimal_get_hash_code (MonoDecimal *d) MONO_INTERNAL;
-void mono_decimal_multiply (MonoDecimal *d1, MonoDecimal *d2) MONO_INTERNAL;
-void mono_decimal_round (MonoDecimal *d, int32_t decimals) MONO_INTERNAL;
-void mono_decimal_tocurrency (MonoDecimal *decimal) MONO_INTERNAL;
-double mono_decimal_to_double (MonoDecimal d) MONO_INTERNAL;
-int32_t mono_decimal_to_int32 (MonoDecimal d) MONO_INTERNAL;
-float mono_decimal_to_float (MonoDecimal d) MONO_INTERNAL;
-void mono_decimal_truncate (MonoDecimal *d) MONO_INTERNAL;
+void mono_decimal_init_single (MonoDecimal *_this, float value);
+void mono_decimal_init_double (MonoDecimal *_this, double value);
+void mono_decimal_floor (MonoDecimal *d);
+int32_t mono_decimal_get_hash_code (MonoDecimal *d);
+void mono_decimal_multiply (MonoDecimal *d1, MonoDecimal *d2);
+void mono_decimal_round (MonoDecimal *d, int32_t decimals);
+void mono_decimal_tocurrency (MonoDecimal *decimal);
+double mono_decimal_to_double (MonoDecimal d);
+int32_t mono_decimal_to_int32 (MonoDecimal d);
+float mono_decimal_to_float (MonoDecimal d);
+void mono_decimal_truncate (MonoDecimal *d);
+void mono_decimal_addsub (MonoDecimal *left, MonoDecimal *right, uint8_t sign);
+void mono_decimal_divide (MonoDecimal *left, MonoDecimal *right);
+int mono_decimal_from_number (void *from, MonoDecimal *target);
#endif