diff options
Diffstat (limited to 'src/SString.h')
-rw-r--r-- | src/SString.h | 86 |
1 files changed, 66 insertions, 20 deletions
diff --git a/src/SString.h b/src/SString.h index 4f93951..8be38ee 100644 --- a/src/SString.h +++ b/src/SString.h @@ -11,25 +11,32 @@ #include <stddef.h> +#ifdef __cplusplus +extern "C" +{ +#endif +typedef struct String_tag String; /* The abstract type for a String */ + +typedef char SSCHAR; /* but could be Unicode */ + typedef enum { SSFALSE, SSTRUE } SSBOOL; -typedef char SSCHAR; -typedef struct String_tag String; /* String creation and deletion */ String *String_New(); String *String_Copy( const String *other ); String *String_Make( const SSCHAR *other ); void String_Delete( String * ); - /* Copying */ -String * StringSet( String *dest, const String *source ); -String * StringSetSubString( String *dest, const String *source, - size_t first, size_t last ); /* Number of characters in string */ size_t StringLength( const String * ); /* Accessors */ SSCHAR StringNthChar( const String *, size_t n ); String * StringSetNthChar( String *, size_t n, SSCHAR c ); -String * StringTruncate( String *, size_t n ); + /* Copying */ +String * StringSet( String *dest, const String *source ); +String * StringSetRange( String *dest, const String *source, + size_t start, size_t length ); +String * StringSetToPartAfter( String *dest, const String *source, + size_t position ); /* Conversion to and from C string */ String * StringSetToCString( String *s, const SSCHAR *c_str ); String * StringConcatCString( String *s, const SSCHAR *c_str ); @@ -38,34 +45,73 @@ String * StringInsertCString( String * s, const char * c_str, String * StringSetToBuffer( String *s, const SSCHAR *buf, size_t len ); const SSCHAR * StringGetBuffer( const String * s ); +void StringCopyBuffer( const String * s, SSCHAR * buf, + size_t bufsize ); /* Searching */ -SSBOOL StringFindSubString( const String *s, const String *substr, +SSBOOL StringFindStringFrom( const String *s, const String *toFind, size_t *position ); -SSBOOL StringFindChar( const String *s, SSCHAR theChar, +SSBOOL StringFindCharFrom( const String *s, SSCHAR theChar, size_t *position ); +size_t StringSetNextToken( const String *s, String *token, + const SSCHAR *delim, size_t index ); /* Comparison */ SSBOOL StringEquals( const String *a, const String *b ); int StringCompare( const String *a, const String *b ); /* Insertion and Concatenation */ String * StringInsert( String * s, const String * other, size_t pos ); +String * StringConcat( String * s, const String * other); String * StringInsertChar( String * s, SSCHAR c, size_t pos ); + /* Deleting and Trimming */ String * StringDeleteChar( String * s, size_t pos ); String * StringDeleteRange( String * s, size_t begin, size_t end ); -String * StringConcat( String * s, const String * other); - /* Trim */ -String * StringTrimHead( const String *s, size_t pos ); -String * StringTrimTail( const String *s, size_t pos ); +String * StringTruncate( String *, size_t n ); +String * StringTrimLeading( String *, size_t n ); + /* For line reading and writing */ +void String_SetLineEndChars( String *str, const SSCHAR * ); /* Printing to stdout */ void StringPrint( const String *str ); void StringFormatPrint( const String *str, const SSCHAR *format ); - /* For line reading and writing */ -void String_SetLineEndCharacter( SSCHAR c ); - /* String conversions */ + /* Numeric conversions */ +double StringAsDouble( const String *str ); +long StringAsLong( const String *str ); +unsigned long StringAsUnsignedLong( const String *str ); + +typedef enum SSFORMAT_TAG +{ + SFMT_DEFAULT = 0, + SFMT_LEFT_ALIGN = 1, + SFMT_PAD_ZERO = 1<<1, + SFMT_LOWERCASE = 1<<2, + SFMT_ADD_SIGN_SPACE = 1<<3, + SFMT_PRINT_SIGN = 1<<4, + SFMT_ALT = 1<<5 +} SSFORMAT; + +typedef enum SSDOUBLE_FORMAT_TAG +{ + SFMT_EXPONENTIAL = 1<<6, + SFMT_DISCRETIONARY_EXP = 1<<7 +} SSDOUBLE_FORMAT; + +typedef enum SSINT_FORMAT_TAG +{ + SFMT_HEX = 1<<6, + SFMT_OCTAL = 1<<7 +} SSINT_FORMAT; +#define SFMT_ALWAYS_POINT SFMT_ALT +#define SFMT_DONT_TRIM_ZEROS SFMT_ALT + +String * StringConcatFormattedInt( String *s, long int d, + int width, int precision, SSINT_FORMAT f ); +String * StringConcatFormattedUnsigned( String *s, unsigned long int n, + int width, int precision, SSINT_FORMAT f ); +String * StringConcatFormattedDouble( String *s, double d, + int width, int precision, SSDOUBLE_FORMAT f ); String * StringConcatDecimal( String *str, long int d ); -String * StringConcatHex( String *str, long int d ); -String * StringConcatOctal( String *str, long int d ); String * StringConcatDouble( String *str, double d ); -String * StringConcatFormattedDouble( String *str, int ndigits, - int ndecimals, double d ); + +#ifdef __cplusplus +} +#endif #endif |