aboutsummaryrefslogtreecommitdiff
path: root/src/SString.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/SString.h')
-rw-r--r--src/SString.h86
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