stringinfo.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * stringinfo.h
  4.  *   Declarations/definitions for "StringInfo" functions.
  5.  *
  6.  * StringInfo provides an indefinitely-extensible string data type.
  7.  * It can be used to buffer either ordinary C strings (null-terminated text)
  8.  * or arbitrary binary data.  All storage is allocated with palloc().
  9.  *
  10.  * Copyright (c) 1994, Regents of the University of California
  11.  *
  12.  * $Id: stringinfo.h,v 1.13 1999/05/26 12:56:27 momjian Exp $
  13.  *
  14.  *-------------------------------------------------------------------------
  15.  */
  16. #ifndef STRINGINFO_H
  17. #define STRINGINFO_H
  18. /*-------------------------
  19.  * StringInfoData holds information about an extensible string.
  20.  * data is the current buffer for the string (allocated with palloc).
  21.  * len is the current string length.  There is guaranteed to be
  22.  * a terminating '' at data[len], although this is not very
  23.  * useful when the string holds binary data rather than text.
  24.  * maxlen is the allocated size in bytes of 'data', i.e. the maximum
  25.  * string size (including the terminating '' char) that we can
  26.  * currently store in 'data' without having to reallocate
  27.  * more space.  We must always have maxlen > len.
  28.  *-------------------------
  29.  */
  30. typedef struct StringInfoData
  31. {
  32. char    *data;
  33. int len;
  34. int maxlen;
  35. } StringInfoData;
  36. typedef StringInfoData *StringInfo;
  37. /*------------------------
  38.  * There are two ways to create a StringInfo object initially:
  39.  *
  40.  * StringInfo stringptr = makeStringInfo();
  41.  * Both the StringInfoData and the data buffer are palloc'd.
  42.  *
  43.  * StringInfoData string;
  44.  * initStringInfo(&string);
  45.  * The data buffer is palloc'd but the StringInfoData is just local.
  46.  * This is the easiest approach for a StringInfo object that will
  47.  * only live as long as the current routine.
  48.  *
  49.  * To destroy a StringInfo, pfree() the data buffer, and then pfree() the
  50.  * StringInfoData if it was palloc'd.  There's no special support for this.
  51.  *
  52.  * NOTE: some routines build up a string using StringInfo, and then
  53.  * release the StringInfoData but return the data string itself to their
  54.  * caller. At that point the data string looks like a plain palloc'd
  55.  * string.
  56.  *-------------------------
  57.  */
  58. #ifdef NOT_USED
  59. /*------------------------
  60.  * makeStringInfo
  61.  * Create an empty 'StringInfoData' & return a pointer to it.
  62.  */
  63. extern StringInfo makeStringInfo(void);
  64. #endif
  65. /*------------------------
  66.  * initStringInfo
  67.  * Initialize a StringInfoData struct (with previously undefined contents)
  68.  * to describe an empty string.
  69.  */
  70. extern void initStringInfo(StringInfo str);
  71. /*------------------------
  72.  * appendStringInfo
  73.  * Format text data under the control of fmt (an sprintf-like format string)
  74.  * and append it to whatever is already in str.  More space is allocated
  75.  * to str if necessary.  This is sort of like a combination of sprintf and
  76.  * strcat.
  77.  * CAUTION: the current implementation has a 1K limit on the amount of text
  78.  * generated in a single call (not on the total string length).
  79.  */
  80. extern void appendStringInfo(StringInfo str, const char *fmt,...);
  81. /*------------------------
  82.  * appendStringInfoChar
  83.  * Append a single byte to str.
  84.  * Like appendStringInfo(str, "%c", ch) but much faster.
  85.  */
  86. extern void appendStringInfoChar(StringInfo str, char ch);
  87. /*------------------------
  88.  * appendBinaryStringInfo
  89.  * Append arbitrary binary data to a StringInfo, allocating more space
  90.  * if necessary.
  91.  */
  92. extern void appendBinaryStringInfo(StringInfo str,
  93.    const char *data, int datalen);
  94. /*------------------------
  95.  * stringStringInfo
  96.  * Return the string itself or "<>" if it is NULL.
  97.  * This is just a convenience macro used by many callers of appendStringInfo.
  98.  */
  99. #define stringStringInfo(s) (((s) == NULL) ? "<>" : (s))
  100. #endif  /* STRINGINFO_H */