summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/astring.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/astring.h')
-rw-r--r--src/lib/util/astring.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/lib/util/astring.h b/src/lib/util/astring.h
new file mode 100644
index 00000000000..3d80216383c
--- /dev/null
+++ b/src/lib/util/astring.h
@@ -0,0 +1,228 @@
+/***************************************************************************
+
+ astring.h
+
+ Allocated string manipulation functions.
+
+ Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __ASTRING_H__
+#define __ASTRING_H__
+
+#include "pool.h"
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+typedef struct _astring astring;
+
+
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+
+/* ----- astring allocation ----- */
+
+/* allocate a new astring */
+astring *astring_alloc(void);
+
+/* free an astring */
+void astring_free(astring *str);
+
+
+
+/* ----- inline astring changes ----- */
+
+/* copy one astring into another */
+astring *astring_cpy(astring *dst, const astring *src);
+
+/* copy a C string into an astring */
+astring *astring_cpyc(astring *dst, const char *src);
+
+/* copy a character array into an astring */
+astring *astring_cpych(astring *dst, const char *src, int count);
+
+/* copy a substring of one string into another */
+astring *astring_cpysubstr(astring *dst, const astring *src, int start, int count);
+
+/* insert one astring into another */
+astring *astring_ins(astring *dst, int insbefore, const astring *src);
+
+/* insert a C string into an astring */
+astring *astring_insc(astring *dst, int insbefore, const char *src);
+
+/* insert a character array into an astring */
+astring *astring_insch(astring *dst, int insbefore, const char *src, int count);
+
+/* insert a substring of one string into another */
+astring *astring_inssubstr(astring *dst, int insbefore, const astring *src, int start, int count);
+
+/* extract a substring of ourself, removing everything else */
+astring *astring_substr(astring *str, int start, int count);
+
+/* formatted printf to an astring */
+int astring_printf(astring *dst, const char *format, ...);
+
+
+
+/* ----- astring queries ----- */
+
+/* return a pointer to a C string from an astring */
+const char *astring_c(const astring *str);
+
+/* return the length of an astring */
+int astring_len(const astring *str);
+
+/* compare two astrings */
+int astring_cmp(const astring *str1, const astring *str2);
+
+/* compare an astring to a C string */
+int astring_cmpc(const astring *str1, const char *str2);
+
+/* compare an astring to a character buffer */
+int astring_cmpch(const astring *str1, const char *str2, int count);
+
+/* compare an astring to a character buffer */
+int astring_cmpsubstr(const astring *str1, const astring *str2, int start, int count);
+
+/* case-insenstive compare two astrings */
+int astring_icmp(const astring *str1, const astring *str2);
+
+/* case-insenstive compare an astring to a C string */
+int astring_icmpc(const astring *str1, const char *str2);
+
+/* case-insenstive compare an astring to a character buffer */
+int astring_icmpch(const astring *str1, const char *str2, int count);
+
+/* case-insenstive compare an astring to a character buffer */
+int astring_icmpsubstr(const astring *str1, const astring *str2, int start, int count);
+
+/* search an astring for a character, returning offset or -1 if not found */
+int astring_chr(const astring *str, int start, int ch);
+
+/* reverse search an astring for a character, returning offset or -1 if not found */
+int astring_rchr(const astring *str, int start, int ch);
+
+/* search in an astring for another astring, returning offset or -1 if not found */
+int astring_find(const astring *str, int start, const astring *search);
+
+/* search in an astring for a C string, returning offset or -1 if not found */
+int astring_findc(const astring *str, int start, const char *search);
+
+
+
+/* ----- astring utilties ----- */
+
+/* delete all instances of 'ch' */
+astring *astring_delchr(astring *str, int ch);
+
+/* replace all instances of 'ch' with 'newch' */
+astring *astring_replacechr(astring *str, int ch, int newch);
+
+/* convert string to all upper-case */
+astring *astring_toupper(astring *str);
+
+/* convert string to all lower-case */
+astring *astring_tolower(astring *str);
+
+/* remove all space characters from beginning/end */
+astring *astring_trimspace(astring *str);
+
+
+
+/***************************************************************************
+ INLINE FUNCTIONS
+***************************************************************************/
+
+/* allocate a new duplicate of an astring */
+INLINE astring *astring_dup(const astring *str)
+{
+ return astring_cpy(astring_alloc(), str);
+}
+
+/* allocate a new duplicate of an astring */
+INLINE astring *astring_dupc(const char *str)
+{
+ return astring_cpyc(astring_alloc(), str);
+}
+
+/* allocate a new duplicate of an astring */
+INLINE astring *astring_dupch(const char *str, int count)
+{
+ return astring_cpych(astring_alloc(), str, count);
+}
+
+/* allocate a duplicate of a substring */
+INLINE astring *astring_dupsubstr(const astring *str, int start, int count)
+{
+ return astring_cpysubstr(astring_alloc(), str, start, count);
+}
+
+
+/* reset an astring to an empty string */
+INLINE astring *astring_reset(astring *dst)
+{
+ return astring_cpyc(dst, "");
+}
+
+
+/* concatenate one astring to the end of another */
+INLINE astring *astring_cat(astring *dst, const astring *src)
+{
+ return astring_ins(dst, -1, src);
+}
+
+/* concatenate a C string to the end of an astring */
+INLINE astring *astring_catc(astring *dst, const char *src)
+{
+ return astring_insc(dst, -1, src);
+}
+
+/* concatenate a character array to the end of an astring */
+INLINE astring *astring_catch(astring *dst, const char *src, int count)
+{
+ return astring_insch(dst, -1, src, count);
+}
+
+/* concatenate a substring of one string into another */
+INLINE astring *astring_catsubstr(astring *dst, const astring *src, int start, int count)
+{
+ return astring_inssubstr(dst, -1, src, start, count);
+}
+
+
+/* assemble an astring from 2 C strings */
+INLINE astring *astring_assemble_2(astring *dst, const char *src1, const char *src2)
+{
+ return astring_catc(astring_cpyc(dst, src1), src2);
+}
+
+/* assemble an astring from 3 C strings */
+INLINE astring *astring_assemble_3(astring *dst, const char *src1, const char *src2, const char *src3)
+{
+ return astring_catc(astring_assemble_2(dst, src1, src2), src3);
+}
+
+/* assemble an astring from 4 C strings */
+INLINE astring *astring_assemble_4(astring *dst, const char *src1, const char *src2, const char *src3, const char *src4)
+{
+ return astring_catc(astring_assemble_3(dst, src1, src2, src3), src4);
+}
+
+/* assemble an astring from 5 C strings */
+INLINE astring *astring_assemble_5(astring *dst, const char *src1, const char *src2, const char *src3, const char *src4, const char *src5)
+{
+ return astring_catc(astring_assemble_4(dst, src1, src2, src3, src4), src5);
+}
+
+
+#endif /* __ASTRING_H__ */