Add a bunch of typedefs/enums/#defines to glib.h, as well as many implementations of glib functions:
g_array_set_size
g_array_sized_new
g_list_remove_all
g_string_erase
g_string_insert
g_string_set_size
g_utf8_offset_to_pointer
g_utf8_pointer_to_offset
g_utf8_to_ucs4_fast
g_unichar_is_space
g_unicode_break_type (stubbed, always returns G_UNICODE_BREAK_UNKNOWN at the moment)
g_utf8_offset_to_pointer
g_utf8_pointer_to_offset
g_utf8_to_ucs4_fast
#define g_array_new monoeg_g_array_new
#define g_array_remove_index monoeg_g_array_remove_index
#define g_array_remove_index_fast monoeg_g_array_remove_index_fast
+#define g_array_set_size monoeg_g_array_set_size
+#define g_array_sized_new monoeg_g_array_sized_new
#define g_ascii_strdown monoeg_g_ascii_strdown
#define g_ascii_strncasecmp monoeg_g_ascii_strncasecmp
#define g_ascii_tolower monoeg_g_ascii_tolower
#define g_ascii_xdigit_value monoeg_g_ascii_xdigit_value
#define g_build_path monoeg_g_build_path
+#define g_byte_array_append monoeg_g_byte_array_append
+#define g_byte_array_free monoeg_g_byte_array_free
+#define g_byte_array_new monoeg_g_byte_array_new
#define g_clear_error monoeg_g_clear_error
#define g_convert monoeg_g_convert
#define g_convert_error_quark monoeg_g_convert_error_quark
#define g_list_nth_data monoeg_g_list_nth_data
#define g_list_prepend monoeg_g_list_prepend
#define g_list_remove monoeg_g_list_remove
+#define g_list_remove_all monoeg_g_list_remove_all
#define g_list_remove_link monoeg_g_list_remove_link
#define g_list_reverse monoeg_g_list_reverse
#define g_list_sort monoeg_g_list_sort
#define g_string_append_len monoeg_g_string_append_len
#define g_string_append_unichar monoeg_g_string_append_unichar
#define g_string_append_printf monoeg_g_string_append_printf
+#define g_string_append_vprintf monoeg_g_string_append_vprintf
+#define g_string_erase monoeg_g_string_erase
#define g_string_free monoeg_g_string_free
+#define g_string_insert monoeg_g_string_insert
#define g_string_new monoeg_g_string_new
#define g_string_new_len monoeg_g_string_new_len
#define g_string_prepend monoeg_g_string_prepend
#define g_string_printf monoeg_g_string_printf
+#define g_string_set_size monoeg_g_string_set_size
#define g_string_sized_new monoeg_g_string_sized_new
#define g_string_truncate monoeg_g_string_truncate
#define g_strjoin monoeg_g_strjoin
#define g_utf16_to_ucs4 monoeg_g_utf16_to_ucs4
#define g_utf16_to_utf8 monoeg_g_utf16_to_utf8
#define g_utf8_get_char monoeg_g_utf8_get_char
+#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer
+#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset
#define g_utf8_strdown monoeg_g_utf8_strdown
#define g_utf8_strlen monoeg_g_utf8_strlen
#define g_utf8_strup monoeg_g_utf8_strup
+#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast
#define g_utf8_to_utf16 monoeg_g_utf8_to_utf16
#define g_utf8_validate monoeg_g_utf8_validate
#define g_unichar_to_utf8 monoeg_g_unichar_to_utf8
+#define g_unichar_is_space monoeg_g_unichar_is_space
+#define g_unicode_break_type monoeg_g_unicode_break_type
+#define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer
+#define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset
+#define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast
#define g_win32_getlocale monoeg_g_win32_getlocale
#define g_assertion_message monoeg_assertion_message
#define g_malloc monoeg_malloc
#define g_strdup monoeg_strdup
#define g_ucs4_to_utf16_len monoeg_ucs4_to_utf16_len
#define g_utf16_to_ucs4_len monoeg_utf16_to_ucs4_len
-#define g_byte_array_free monoeg_g_byte_array_free
-#define g_byte_array_new monoeg_g_byte_array_new
return (GArray*)rv;
}
+GArray *
+g_array_sized_new (gboolean zero_terminated,
+ gboolean clear_,
+ guint element_size,
+ guint reserved_size)
+{
+ GArrayPriv *rv = g_new0 (GArrayPriv, 1);
+ rv->zero_terminated = zero_terminated;
+ rv->clear_ = clear_;
+ rv->element_size = element_size;
+
+ ensure_capacity (rv, reserved_size);
+
+ return (GArray*)rv;
+}
+
gchar*
g_array_free (GArray *array,
gboolean free_segment)
return array;
}
+void
+g_array_set_size (GArray *array, gint length)
+{
+ g_return_if_fail (array != NULL);
+ g_return_if_fail (length >= 0);
+
+ GArrayPriv *priv = (GArrayPriv*)array;
+
+ if (length == priv->capacity)
+ return; // nothing to be done
+
+ if (length > priv->capacity) {
+ // grow the array
+ ensure_capacity (priv, length);
+ }
+
+ array->len = length;
+}
#define G_MAXINT INT_MAX
#define G_MININT INT_MIN
#define G_MAXINT32 INT32_MAX
+#define G_MAXUINT32 UINT32_MAX
#define G_MININT32 INT32_MIN
#define G_MININT64 INT64_MIN
#define G_MAXINT64 INT64_MAX
/*
* Precondition macros
*/
+#define g_warn_if_fail(x) G_STMT_START { if (!(x)) { g_warning ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); } } G_STMT_END
#define g_return_if_fail(x) G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return; } } G_STMT_END
#define g_return_val_if_fail(x,e) G_STMT_START { if (!(x)) { g_critical ("%s:%d: assertion '%s' failed", __FILE__, __LINE__, #x); return (e); } } G_STMT_END
#define g_strncasecmp strncasecmp
#define g_strstrip(a) g_strchug (g_strchomp (a))
#endif
+#define g_ascii_strdup strdup
#define G_STR_DELIMITERS "_-|> <."
GString *g_string_append_len (GString *string, const gchar *val, gssize len);
GString *g_string_truncate (GString *string, gsize len);
GString *g_string_prepend (GString *string, const gchar *val);
+GString *g_string_insert (GString *string, gssize pos, const gchar *val);
+GString *g_string_set_size (GString *string, gsize len);
+GString *g_string_erase (GString *string, gssize pos, gssize len);
#define g_string_sprintfa g_string_append_printf
GCompareFunc func);
GList *g_list_remove (GList *list,
gconstpointer data);
+GList *g_list_remove_all (GList *list,
+ gconstpointer data);
GList *g_list_reverse (GList *list);
GList *g_list_remove_link (GList *list,
GList *link);
};
GArray *g_array_new (gboolean zero_terminated, gboolean clear_, guint element_size);
+GArray *g_array_sized_new (gboolean zero_terminated, gboolean clear_, guint element_size, guint reserved_size);
gchar* g_array_free (GArray *array, gboolean free_segment);
GArray *g_array_append_vals (GArray *array, gconstpointer data, guint len);
GArray* g_array_insert_vals (GArray *array, guint index_, gconstpointer data, guint len);
GArray* g_array_remove_index (GArray *array, guint index_);
GArray* g_array_remove_index_fast (GArray *array, guint index_);
+void g_array_set_size (GArray *array, gint length);
#define g_array_append_val(a,v) (g_array_append_vals((a),&(v),1))
#define g_array_insert_val(a,i,v) (g_array_insert_vals((a),(i),&(v),1))
G_UNICODE_SPACE_SEPARATOR
} GUnicodeType;
+typedef enum {
+ G_UNICODE_BREAK_MANDATORY,
+ G_UNICODE_BREAK_CARRIAGE_RETURN,
+ G_UNICODE_BREAK_LINE_FEED,
+ G_UNICODE_BREAK_COMBINING_MARK,
+ G_UNICODE_BREAK_SURROGATE,
+ G_UNICODE_BREAK_ZERO_WIDTH_SPACE,
+ G_UNICODE_BREAK_INSEPARABLE,
+ G_UNICODE_BREAK_NON_BREAKING_GLUE,
+ G_UNICODE_BREAK_CONTINGENT,
+ G_UNICODE_BREAK_SPACE,
+ G_UNICODE_BREAK_AFTER,
+ G_UNICODE_BREAK_BEFORE,
+ G_UNICODE_BREAK_BEFORE_AND_AFTER,
+ G_UNICODE_BREAK_HYPHEN,
+ G_UNICODE_BREAK_NON_STARTER,
+ G_UNICODE_BREAK_OPEN_PUNCTUATION,
+ G_UNICODE_BREAK_CLOSE_PUNCTUATION,
+ G_UNICODE_BREAK_QUOTATION,
+ G_UNICODE_BREAK_EXCLAMATION,
+ G_UNICODE_BREAK_IDEOGRAPHIC,
+ G_UNICODE_BREAK_NUMERIC,
+ G_UNICODE_BREAK_INFIX_SEPARATOR,
+ G_UNICODE_BREAK_SYMBOL,
+ G_UNICODE_BREAK_ALPHABETIC,
+ G_UNICODE_BREAK_PREFIX,
+ G_UNICODE_BREAK_POSTFIX,
+ G_UNICODE_BREAK_COMPLEX_CONTEXT,
+ G_UNICODE_BREAK_AMBIGUOUS,
+ G_UNICODE_BREAK_UNKNOWN,
+ G_UNICODE_BREAK_NEXT_LINE,
+ G_UNICODE_BREAK_WORD_JOINER,
+ G_UNICODE_BREAK_HANGUL_L_JAMO,
+ G_UNICODE_BREAK_HANGUL_V_JAMO,
+ G_UNICODE_BREAK_HANGUL_T_JAMO,
+ G_UNICODE_BREAK_HANGUL_LV_SYLLABLE,
+ G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+} GUnicodeBreakType;
+
gunichar g_unichar_toupper (gunichar c);
gunichar g_unichar_tolower (gunichar c);
gunichar g_unichar_totitle (gunichar c);
GUnicodeType g_unichar_type (gunichar c);
+gboolean g_unichar_isspace (gunichar c);
gboolean g_unichar_isxdigit (gunichar c);
gint g_unichar_xdigit_value (gunichar c);
+GUnicodeBreakType g_unichar_break_type (gunichar c);
#ifndef MAX
#define MAX(a,b) (((a)>(b)) ? (a) : (b))
gchar *g_utf8_strup (const gchar *str, gssize len);
gchar *g_utf8_strdown (const gchar *str, gssize len);
gint g_unichar_to_utf8 (gunichar c, gchar *outbuf);
+gunichar* g_utf8_to_ucs4_fast (const gchar *str, glong len, glong *items_written);
gunichar2 *g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **error);
gchar *g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error);
gunichar *g_utf16_to_ucs4 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error);
#define g_rename rename
#define g_stat stat
#define g_unlink unlink
+#define g_fopen fopen
+#define g_lstat lstat
+#define g_rmdir rmdir
+#define g_mkstemp mkstemp
+#define g_ascii_isdigit isdigit
+#define g_ascii_strtod strtod
+#define g_ascii_isalnum isalnum
/*
* Pattern matching
gunichar g_utf8_get_char (const gchar *src);
glong g_utf8_strlen (const gchar *str, gssize max);
#define g_utf8_next_char(p) p + (g_trailingBytesForUTF8[(guchar)(*p)] + 1)
+gchar * g_utf8_offset_to_pointer (const gchar *str, glong offset);
+glong g_utf8_pointer_to_offset (const gchar *str, const gchar *pos);
+
+/*
+ * priorities
+ */
+#define G_PRIORITY_DEFAULT 0
+#define G_PRIORITY_DEFAULT_IDLE 200
/*
* Empty thread functions, not used by eglib
return list;
}
+GList*
+g_list_remove_all (GList *list, gconstpointer data)
+{
+ GList *current = g_list_find (list, data);
+
+ if (!current)
+ return list;
+
+ while (current) {
+ if (current == list)
+ list = list->next;
+ g_list_free_1 (disconnect_node (current));
+
+ current = g_list_find (list, data);
+ }
+
+ return list;
+}
+
GList*
g_list_remove_link (GList *list, GList *link)
{
return string;
}
+GString *
+g_string_insert (GString *string, gssize pos, const gchar *val)
+{
+ gssize len;
+
+ g_return_val_if_fail (string != NULL, string);
+ g_return_val_if_fail (val != NULL, string);
+ g_return_val_if_fail (pos <= string->len, string);
+
+ len = strlen (val);
+
+ GROW_IF_NECESSARY(string, len);
+ memmove(string->str + pos + len, string->str + pos, string->len - pos - len + 1);
+ memcpy(string->str + pos, val, len);
+
+ return string;
+}
+
void
g_string_append_printf (GString *string, const gchar *format, ...)
{
return string;
}
+GString *
+g_string_set_size (GString *string, gsize len)
+{
+ g_return_val_if_fail (string != NULL, string);
+
+ GROW_IF_NECESSARY(string, len);
+
+ string->len = len;
+ string->str[len] = 0;
+ return string;
+}
+
+GString *
+g_string_erase (GString *string, gssize pos, gssize len)
+{
+ g_return_val_if_fail (string != NULL, string);
+
+ /* Silent return */
+ if (pos >= string->len)
+ return string;
+
+ if (len == -1 || (pos + len) >= string->len) {
+ string->str[pos] = 0;
+ }
+ else {
+ memmove (string->str + pos, string->str + pos + len, string->len - (pos + len) + 1);
+ string->len -= len;
+ }
+
+ return string;
+}
return 0;
}
+GUnicodeBreakType
+g_unichar_break_type (gunichar c)
+{
+ // MOONLIGHT_FIXME
+ return G_UNICODE_BREAK_UNKNOWN;
+}
+
gunichar
g_unichar_case (gunichar c, gboolean upper)
{
return -1;
}
+gboolean
+g_unichar_isspace (gunichar c)
+{
+ GUnicodeType type = g_unichar_type (c);
+ if (type == G_UNICODE_LINE_SEPARATOR ||
+ type == G_UNICODE_PARAGRAPH_SEPARATOR ||
+ type == G_UNICODE_SPACE_SEPARATOR)
+ return TRUE;
+
+ return FALSE;
+}
+
gchar *
g_convert (const gchar *str, gssize len,
const gchar *to_codeset, const gchar *from_codeset,
return retstr;
}
+gchar *
+g_utf8_offset_to_pointer (const gchar *str, glong offset)
+{
+ if (offset == 0)
+ return str;
+
+ if (offset > 0) {
+ gchar *p = (gchar*)str;
+ do {
+ p = g_utf8_next_char (p);
+ offset --;
+ } while (offset > 0);
+
+ return p;
+ }
+ else {
+ // MOONLIGHT_FIXME
+ g_assert_not_reached();
+ }
+}
+
+glong
+g_utf8_pointer_to_offset (const gchar *str, const gchar *pos)
+{
+ const gchar *inptr, *inend;
+ glong offset = 0;
+ glong sign = 1;
+
+ if (pos == str)
+ return 0;
+
+ if (str < pos) {
+ inptr = str;
+ inend = pos;
+ } else {
+ inptr = pos;
+ inend = str;
+ sign = -1;
+ }
+
+ do {
+ inptr = g_utf8_next_char (inptr);
+ offset++;
+ } while (inptr < inend);
+
+ return offset * sign;
+}
+
+gunichar*
+g_utf8_to_ucs4_fast (const gchar *str, glong len, glong *items_written)
+{
+ gunichar* ucs4;
+ int ucs4_index;
+ const char *p;
+ int mb_size;
+ gunichar codepoint;
+
+ g_return_val_if_fail (str != NULL, NULL);
+
+ if (len < 0) {
+ /* we need to find the length of str, as len < 0 means it must be 0 terminated */
+
+ len = 0;
+ p = str;
+ while (*p) {
+ len ++;
+ p = g_utf8_next_char(p);
+ }
+ }
+
+ ucs4 = g_malloc (sizeof(gunichar)*len);
+ if (items_written)
+ *items_written = len;
+
+ p = str;
+ ucs4_index = 0;
+ while (len) {
+ guint8 c = *p++;
+
+
+ if (c < 0x80) {
+ mb_size = 1;
+ }
+ else if ((c & 0xE0) == 0xC0) {
+ c &= 0x1f;
+
+ mb_size = 2;
+ }
+ else if ((c & 0xF0) == 0xE0) {
+ c &= 0x0f;
+ mb_size = 3;
+ }
+ else if ((c & 0xF8) == 0xF0) {
+ c &= 0x07;
+ mb_size = 4;
+ }
+ else if ((c & 0xFC) == 0xF8) {
+ c &= 0x03;
+ mb_size = 5;
+ }
+ else if ((c & 0xFE) == 0xFC) {
+ c &= 0x01;
+ mb_size = 6;
+ }
+
+ codepoint = c;
+ while (--mb_size) {
+ codepoint <<= 6 | ((*p)&0x3f);
+ p++;
+ }
+
+ ucs4[ucs4_index++] = codepoint;
+ len --;
+ }
+
+ return ucs4;
+}
+
/**
* from http://home.tiscali.nl/t876506/utf8tbl.html
*