1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** \file 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Simple string interface allows indiscriminate allocation of strings 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * such that they can be allocated all over the place and released in 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * one chunk via a string factory - saves lots of hassle in remembering what 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * strings were allocated where. 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef _ANTLR3_STRING_H 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define _ANTLR3_STRING_H 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// [The "BSD licence"] 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.temporal-wave.com 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://www.linkedin.com/in/jimidle 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// All rights reserved. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Redistribution and use in source and binary forms, with or without 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// modification, are permitted provided that the following conditions 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// are met: 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 1. Redistributions of source code must retain the above copyright 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer. 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 2. Redistributions in binary form must reproduce the above copyright 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// notice, this list of conditions and the following disclaimer in the 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// documentation and/or other materials provided with the distribution. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3. The name of the author may not be used to endorse or promote products 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// derived from this software without specific prior written permission. 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3defs.h> 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <antlr3collections.h> 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverextern "C" { 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Base string class tracks the allocations and provides simple string 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * tracking functions. Mostly you can work directly on the string for things 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * that don't reallocate it, like strchr() etc. Perhaps someone will want to provide implementations for UTF8 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * and so on. 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct ANTLR3_STRING_struct 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** The factory that created this string 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING_FACTORY factory; 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to the current string value (starts at NULL unless 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * the string allocator is told to create it with a pre known size. 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 chars; 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Current length of the string up to and not including, the trailing '\0' 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Note that the actual allocation (->size) 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * is always at least one byte more than this to accommodate trailing '\0' 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 len; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Current size of the string in bytes including the trailing '\0' 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 size; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Index of string (allocation number) in case someone wants 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * to explicitly release it. 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 index; 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Occasionally it is useful to know what the encoding of the string 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * actually is, hence it is stored here as one the ANTLR3_ENCODING_ values 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT8 encoding; 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that sets the string value to a specific string in the default encoding 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * for this string. For instance, if this is 8 bit, then this function is the same as set8 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * but if the encoding is UTF16, then the pointer is assumed to point to UTF16 characters, not 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 8 bit. 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*set) (struct ANTLR3_STRING_struct * string, const char * chars); 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that sets the string value to a specific 8 bit string in the default encoding 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * for this string. For instance, if this is an 8 bit string, then this function is the same as set8 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * but if the encoding is UTF16, then the pointer is assumed to point to 8 bit characters that must 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * be converted to UTF16 characters on the fly. 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*set8) (struct ANTLR3_STRING_struct * string, const char * chars); 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function adds a raw char * type pointer in the default encoding 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * for this string. For instance, if this is 8 bit, then this function is the same as append8 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * but if the encoding is UTF16, then the pointer is assumed to point to UTF16 characters not 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 8 bit. 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*append) (struct ANTLR3_STRING_struct * string, const char * newbit); 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function adds a raw char * type pointer in the default encoding 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * for this string. For instance, if this is a UTF16 string, then this function assumes the pointer 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * points to 8 bit characters that must be converted on the fly. 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*append8) (struct ANTLR3_STRING_struct * string, const char * newbit); 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that inserts the supplied string at the specified 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * offset in the current string in the default encoding for this string. For instance, if this is an 8 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * bit string, then this is the same as insert8, but if this is a UTF16 string, then the pointer 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * must point to UTF16 characters. 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*insert) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, const char * newbit); 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that inserts the supplied string at the specified 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * offset in the current string in the default encoding for this string. For instance, if this is a UTF16 string 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * then the pointer is assumed to point at 8 bit characteres that must be converted on the fly. 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*insert8) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, const char * newbit); 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that sets the string value to a copy of the supplied string (strings must be in the 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * same encoding. 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*setS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * chars); 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function appends a copy of the characters contained in another string. Strings must be in the 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * same encoding. 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*appendS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * newbit); 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that inserts a copy of the characters in the supplied string at the specified 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * offset in the current string. strings must be in the same encoding. 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*insertS) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, struct ANTLR3_STRING_struct * newbit); 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that inserts the supplied integer in string form at the specified 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * offset in the current string. 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*inserti) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, ANTLR3_INT32 i); 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that adds a single character to the end of the string, in the encoding of the 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * string - 8 bit, UTF16, utf-8 etc. Input is a single UTF32 (32 bits wide integer) character. 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*addc) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 c); 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that adds the stringified representation of an integer 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * to the string. 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_UINT8 (*addi) (struct ANTLR3_STRING_struct * string, ANTLR3_INT32 i); 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that compares the text of a string to the supplied 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 8 bit character string and returns a result a la strcmp() 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*compare8) (struct ANTLR3_STRING_struct * string, const char * compStr); 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that compares the text of a string with the supplied character string 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (which is assumed to be in the same encoding as the string itself) and returns a result 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * a la strcmp() 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*compare) (struct ANTLR3_STRING_struct * string, const char * compStr); 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that compares the text of a string with the supplied string 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (which is assumed to be in the same encoding as the string itself) and returns a result 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * a la strcmp() 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 (*compareS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * compStr); 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that returns the character indexed at the supplied 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * offset as a 32 bit character. 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UCHAR (*charAt) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 offset); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that returns a substring of the supplied string a la .subString(s,e) 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * in the Java language. 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct ANTLR3_STRING_struct * 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*subString) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex); 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that returns the integer representation of any numeric characters 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * at the beginning of the string 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_INT32 (*toInt32) (struct ANTLR3_STRING_struct * string); 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to a function that yields an 8 bit string regardless of the encoding of the supplied 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * string. This is useful when you want to use the text of a token in some way that requires an 8 bit 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * value, such as the key for a hashtable. The function is required to produce a usable string even 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * if the text given as input has characters that do not fit in 8 bit space, it will replace them 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * with some arbitrary character such as '?' 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct ANTLR3_STRING_struct * 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*to8) (struct ANTLR3_STRING_struct * string); 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// Pointer to a function that yields a UT8 encoded string of the current string, 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// regardless of the current encoding of the string. Because there is currently no UTF8 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// handling in the string class, it creates therefore, a string that is useful only for read only 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// applications as it will not contain methods that deal with UTF8 at the moment. 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /// 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct ANTLR3_STRING_struct * 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (*toUTF8) (struct ANTLR3_STRING_struct * string); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_STRING; 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** Definition of the string factory interface, which creates and tracks 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * strings for you of various shapes and sizes. 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct ANTLR3_STRING_FACTORY_struct 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{ 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** List of all the strings that have been allocated by the factory 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_VECTOR strings; 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /* Index of next string that we allocate 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_UINT32 index; 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures an empty string 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newRaw) (struct ANTLR3_STRING_FACTORY_struct * factory); 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures a raw string with no text in it but space for size 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * characters. 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newSize) (struct ANTLR3_STRING_FACTORY_struct * factory, ANTLR3_UINT32 size); 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures a string from a given pointer and length. The pointer is assumed 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * to point to characters in the same encoding as the string type, hence if this is a UTF16 string the 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * pointer should point to UTF16 characters. 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newPtr) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures a string from a given pointer and length. The pointer is assumed to 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * point at 8 bit characters which must be converted on the fly to the encoding of the actual string. 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newPtr8) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures a string from a given pointer and works out the length. The pointer is 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * assumed to point to characters in the same encoding as the string itself, i.e. UTF16 if a UTF16 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * string and so on. 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newStr) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string); 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that manufactures a string from a given pointer and length. The pointer should 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * point to 8 bit characters regardless of the actual encoding of the string. The 8 bit characters 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * will be converted to the actual string encoding on the fly. 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*newStr8) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string); 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that deletes the string altogether 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*destroy) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_STRING string); 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that returns a copy of the string in printable form without any control 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * characters in it. 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pANTLR3_STRING (*printable)(struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_STRING string); 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Pointer to function that closes the factory 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void (*close) (struct ANTLR3_STRING_FACTORY_struct * factory); 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANTLR3_STRING_FACTORY; 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifdef __cplusplus 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 273