Coverage Report

Created: 2023-09-25 06:30

/src/xpdf-4.04/goo/GString.h
Line
Count
Source (jump to first uncovered line)
1
//========================================================================
2
//
3
// GString.h
4
//
5
// Simple variable-length string type.
6
//
7
// Copyright 1996-2003 Glyph & Cog, LLC
8
//
9
//========================================================================
10
11
#ifndef GSTRING_H
12
#define GSTRING_H
13
14
#include <aconf.h>
15
16
#ifdef USE_GCC_PRAGMAS
17
#pragma interface
18
#endif
19
20
#include <limits.h> // for LLONG_MAX and ULLONG_MAX
21
#include <stdarg.h>
22
#include "gtypes.h"
23
24
class GString {
25
public:
26
27
  // Create an empty string.
28
  GString();
29
30
  // Create a string from a C string.
31
  GString(const char *sA);
32
33
  // Create a string from <lengthA> chars at <sA>.  This string
34
  // can contain null characters.
35
  GString(const char *sA, int lengthA);
36
37
  // Create a string from <lengthA> chars at <idx> in <str>.
38
  GString(GString *str, int idx, int lengthA);
39
40
  // Copy a string.
41
  GString(GString *str);
42
0
  GString *copy() { return new GString(this); }
43
44
  // Concatenate two strings.
45
  GString(GString *str1, GString *str2);
46
47
  // Convert an integer to a string.
48
  static GString *fromInt(int x);
49
50
  // Create a formatted string.  Similar to printf, but without the
51
  // string overflow issues.  Formatting elements consist of:
52
  //     {<arg>:[<width>][.<precision>]<type>}
53
  // where:
54
  // - <arg> is the argument number (arg 0 is the first argument
55
  //   following the format string) -- NB: args must be first used in
56
  //   order; they can be reused in any order
57
  // - <width> is the field width -- negative to reverse the alignment;
58
  //   starting with a leading zero to zero-fill (for integers)
59
  // - <precision> is the number of digits to the right of the decimal
60
  //   point (for floating point numbers)
61
  // - <type> is one of:
62
  //     d, x, o, b -- int in decimal, hex, octal, binary
63
  //     ud, ux, uo, ub -- unsigned int
64
  //     ld, lx, lo, lb, uld, ulx, ulo, ulb -- long, unsigned long
65
  //     lld, llx, llo, llb, ulld, ullx, ullo, ullb
66
  //         -- long long, unsigned long long
67
  //     f, g -- double
68
  //     c -- char
69
  //     s -- string (char *)
70
  //     t -- GString *
71
  //     w -- blank space; arg determines width
72
  // To get literal curly braces, use {{ or }}.
73
  static GString *format(const char *fmt, ...);
74
  static GString *formatv(const char *fmt, va_list argList);
75
76
  // Destructor.
77
  ~GString();
78
79
  // Get length.
80
5.55M
  int getLength() { return length; }
81
82
  // Get C string.
83
4.69M
  char *getCString() { return s; }
84
85
  // Get <i>th character.
86
0
  char getChar(int i) { return s[i]; }
87
88
  // Change <i>th character.
89
0
  void setChar(int i, char c) { s[i] = c; }
90
91
  // Clear string to zero length.
92
  GString *clear();
93
94
  // Append a character or string.
95
  GString *append(char c);
96
  GString *append(GString *str);
97
  GString *append(const char *str);
98
  GString *append(const char *str, int lengthA);
99
100
  // Append a formatted string.
101
  GString *appendf(const char *fmt, ...);
102
  GString *appendfv(const char *fmt, va_list argList);
103
104
  // Insert a character or string.
105
  GString *insert(int i, char c);
106
  GString *insert(int i, GString *str);
107
  GString *insert(int i, const char *str);
108
  GString *insert(int i, const char *str, int lengthA);
109
110
  // Delete a character or range of characters.
111
  GString *del(int i, int n = 1);
112
113
  // Convert string to all-upper/all-lower case.
114
  GString *upperCase();
115
  GString *lowerCase();
116
117
  // Compare two strings:  -1:<  0:=  +1:>
118
  int cmp(GString *str);
119
  int cmpN(GString *str, int n);
120
  int cmp(const char *sA);
121
  int cmpN(const char *sA, int n);
122
123
private:
124
125
  int length;
126
  char *s;
127
128
  void resize(int length1);
129
#ifdef LLONG_MAX
130
  static void formatInt(long long x, char *buf, int bufSize,
131
      GBool zeroFill, int width, int base,
132
      const char **p, int *len);
133
#else
134
  static void formatInt(long x, char *buf, int bufSize,
135
      GBool zeroFill, int width, int base,
136
      const char **p, int *len);
137
#endif
138
#ifdef ULLONG_MAX
139
  static void formatUInt(unsigned long long x, char *buf, int bufSize,
140
       GBool zeroFill, int width, int base,
141
       const char **p, int *len);
142
#else
143
  static void formatUInt(Gulong x, char *buf, int bufSize,
144
       GBool zeroFill, int width, int base,
145
       const char **p, int *len);
146
#endif
147
  static void formatDouble(double x, char *buf, int bufSize, int prec,
148
         GBool trim, const char **p, int *len);
149
};
150
151
#endif