summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/htlib/htString.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htlib/htString.h')
-rw-r--r--debian/htdig/htdig-3.2.0b6/htlib/htString.h260
1 files changed, 260 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htlib/htString.h b/debian/htdig/htdig-3.2.0b6/htlib/htString.h
new file mode 100644
index 00000000..592a072f
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/htlib/htString.h
@@ -0,0 +1,260 @@
+//
+// htString.h
+//
+// htString: (implementation in String.cc) Just Another String class.
+//
+// Part of the ht://Dig package <http://www.htdig.org/>
+// Copyright (c) 1999-2004 The ht://Dig Group
+// For copyright details, see the file COPYING in your distribution
+// or the GNU Library General Public License (LGPL) version 2 or later
+// <http://www.gnu.org/copyleft/lgpl.html>
+//
+// $Id: htString.h,v 1.24 2004/05/28 13:15:21 lha Exp $
+//
+#ifndef __String_h
+#define __String_h
+
+#include "Object.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#ifdef HAVE_STD
+#include <iostream>
+#ifdef HAVE_NAMESPACES
+using namespace std;
+#endif
+#else
+#include <iostream.h>
+#endif /* HAVE_STD */
+
+class String : public Object
+{
+public:
+ String() { Length = 0; Allocated = 0; Data = 0; } // Create an empty string
+ String(int init); // initial allocated length
+ String(const char *s); // from null terminated s
+ String(const char *s, int len); // from s with length len
+ String(const String &s); // Copy constructor
+
+ //
+ // This can be used for performance reasons if it is known the
+ // String will need to grow.
+ //
+ String(const String &s, int allocation_hint);
+
+ ~String();
+
+ inline int length() const;
+ char *get();
+ const char *get() const;
+ operator char*() { return get(); }
+ operator const char*() const { return get(); }
+
+ //
+ // Interpretation
+ //
+ int as_integer(int def = 0) const;
+ double as_double(double def = 0) const;
+ int empty() const { return length() == 0; }
+
+ //
+ // If it is not posible to use the constructor with an initial
+ // allocation size, use the following member to set the size.
+ //
+ void allocate(int init) {reallocate_space(init);}
+
+ //
+ // allocate space for a new char *, and copy the String in.
+ //
+ char *new_char() const;
+
+ //
+ // Assignment
+ //
+ inline String& set(const char *s, int l) { trunc(); append(s, l); return *this; }
+ inline String& set(char *s) { trunc(); append(s, strlen(s)); return *this; }
+ void operator = (const String &s);
+ void operator = (const char *s);
+ inline void operator += (const String &s) { append(s); }
+ inline void operator += (const char *s) { append(s); }
+
+ //
+ // Appending
+ //
+ inline String &operator << (const char *);
+ inline String &operator << (char);
+ inline String &operator << (unsigned char c) {return *this<<(char)c;}
+ String &operator << (int);
+ String &operator << (unsigned int);
+ String &operator << (long);
+ inline String &operator << (short i) {return *this<<(int)i;}
+ String &operator << (const String &);
+ String &operator << (const String *s) {return *this << *s;}
+
+ //
+ // Access to specific characters
+ //
+ inline char &operator [] (int n);
+ inline char operator [] (int n) const;
+ inline char Nth (int n) { return (*this)[n]; }
+ inline char last() const { return Length > 0 ? Data[Length - 1] : '\0'; }
+
+ //
+ // Removing
+ //
+ char operator >> (char c);
+
+ //
+ // Comparison
+ // Return:
+ // 0 : 'this' is equal to 's'.
+ // -1 : 'this' is less than 's'.
+ // 1 : 'this' is greater than 's'.
+ //
+ int compare(const Object& s) const { return compare((const String&)s); }
+ int compare(const String& s) const;
+ int nocase_compare(const String &s) const;
+
+ //
+ // Searching for parts
+ //
+ int lastIndexOf(char c) const;
+ int lastIndexOf(char c, int pos) const;
+ int indexOf(char c) const;
+ int indexOf(char c, int pos) const;
+ int indexOf(const char *) const;
+ int indexOf(const char *, int pos) const;
+
+ //
+ // Manipulation
+ //
+ void append(const String &s);
+ void append(const char *s);
+ void append(const char *s, int n);
+ void append(char ch);
+
+ inline String &trunc() { Length = 0; return *this; }
+ String &chop(int n = 1);
+ String &chop(char ch = '\n');
+ String &chop(const char *str = (char *)"\r\n");
+
+ //
+ // SubStrings
+ //
+ // The string starting at postion 'start' and length 'len'.
+ //
+ String sub(int start, int len) const;
+ String sub(int start) const;
+
+ //
+ // IO
+ //
+ int Write(int fd) const;
+
+#ifndef NOSTREAM
+ void debug(ostream &o);
+#endif /* NOSTREAM */
+
+ //
+ // Non-member operators
+ //
+ friend String operator + (const String &a, const String &b);
+ friend int operator == (const String &a, const String &b);
+ friend int operator != (const String &a, const String &b);
+ friend int operator < (const String &a, const String &b);
+ friend int operator > (const String &a, const String &b);
+ friend int operator <= (const String &a, const String &b);
+ friend int operator >= (const String &a, const String &b);
+
+#ifndef NOSTREAM
+ friend ostream &operator << (ostream &o, const String &s);
+
+ friend istream &operator >> (istream &in, String &line);
+#endif /* NOSTREAM */
+
+ int readLine(FILE *in);
+
+ int lowercase();
+ int uppercase();
+
+ void replace(char c1, char c2);
+ int remove(const char *);
+
+ Object *Copy() const { return new String(*this); }
+
+ //
+ // Persistent storage support
+ //
+ void Serialize(String &);
+ void Deserialize(String &, int &);
+
+private:
+ int Length; // Current Length
+ int Allocated; // Total space allocated
+ char *Data; // The actual contents
+
+ void copy_data_from(const char *s, int len, int dest_offset = 0);
+ void copy(const char *s, int len, int allocation_hint);
+
+ //
+ // Possibly make Data bigger.
+ //
+ void reallocate_space(int len);
+
+ //
+ // Allocate some space for the data. Delete Data if it
+ // has been allocated.
+ //
+ void allocate_space(int len);
+ // Allocate some space without rounding
+ void allocate_fix_space(int len);
+
+ friend class StringIndex;
+};
+
+extern char *form(const char *, ...);
+extern char *vform(const char *, va_list);
+
+//
+// Inline methods.
+//
+inline String &String::operator << (const char *str)
+{
+ append(str);
+ return *this;
+}
+
+inline String &String::operator << (char ch)
+{
+ append(ch);
+ return *this;
+}
+
+inline int String::length() const
+{
+ return Length;
+}
+
+inline char String::operator [] (int n) const
+{
+ if(n < 0) n = Length + n;
+ if(n >= Length || n < 0) return '\0';
+
+ return Data[n];
+}
+
+static char null = '\0';
+
+inline char &String::operator [] (int n)
+{
+ if(n < 0) n = Length + n;
+ if(n >= Length || n < 0) return null;
+
+ return Data[n];
+}
+
+//
+// Non friend, non member operators
+//
+#endif