File: astring.h

package info (click to toggle)
apcupsd 3.14.10-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 7,296 kB
  • sloc: ansic: 36,560; cpp: 7,912; sh: 3,981; makefile: 1,576; tcl: 368; objc: 276; php: 255
file content (90 lines) | stat: -rw-r--r-- 2,673 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * astring.h
 *
 * Simple string management class. Like STL, but lighter.
 */

/*
 * Copyright (C) 2007 Adam Kropelin
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General
 * Public License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the Free
 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */

#ifndef __ASTRING_H
#define __ASTRING_H

#include <string.h>
#include <stdarg.h>

class astring
{
public:

   astring()                   : _data(NULL) { assign(""); }
   astring(const char *str)    : _data(NULL) { assign(str); }
   astring(const astring &str) : _data(NULL) { assign(str._data); }
   ~astring() { delete [] _data; }

   int len() const { return _len; }

   int format(const char *format, ...);
   int vformat(const char *format, va_list args);

   astring &operator=(const astring &rhs);
   astring &operator=(const char *rhs);
   astring &operator=(const char rhs);

   const char &operator[](int index) const;
   char &operator[](int index);

   astring &operator+(const char *rhs);
   astring &operator+=(const char *rhs) { return *this + rhs; }
   astring &operator+(const astring &rhs);
   astring &operator+=(const astring &rhs) { return *this + rhs; }
   astring &operator+(const char rhs);
   astring &operator+=(const char rhs) { return *this + rhs; }

   bool operator==(const char *rhs) const { return !strcmp(_data, rhs); }
   bool operator==(const astring &rhs) const { return *this == rhs._data; }
   bool operator!=(const char *rhs) const { return !(*this == rhs); }
   bool operator!=(const astring &rhs) const { return !(*this == rhs); }

   astring substr(int start, int len = -1) const;
   int strchr(char ch) const;

   operator const char *() const { return _data; }
   const char *str() const { return _data; }

   astring &rtrim();
   astring &ltrim();
   astring &trim() { ltrim(); return rtrim(); }

   bool empty() const { return _len == 0; }

   int compare(const char *rhs) const { return strcmp(_data, rhs); }

private:

   void realloc(unsigned int newlen);
   void assign(const char *str, int len = -1);

   char *_data;
   int _len;
};

inline astring operator+(const char *lhs, const astring &rhs)
   { return astring(lhs) + rhs; }

#endif