***********************
** FILE NAME : String.h
** SYSTEM NAME : Andromeda X-Windows Encapsulation
-** VERSION NUMBER : $Revision: 1.3 $
+** VERSION NUMBER : $Revision: 1.4 $
**
** DESCRIPTION : Character String class definition
**
/*****************************
$Log: String.h,v $
- Revision 1.3 2002-11-03 13:18:57 arjen
+ Revision 1.4 2007-05-04 13:56:05 arjen
+ Added a copy contructor to the regex class. This prevents multiple frees in the destructor.
+
+ Revision 1.3 2002/11/03 13:18:57 arjen
New functions - String::escape() and String::unescape()
Revision 1.2 2002/09/28 06:45:51 arjen
*****************************/
-// static const char RCSID[] = "$Id: String.h,v 1.3 2002-11-03 13:18:57 arjen Exp $";
+// static const char RCSID[] = "$Id: String.h,v 1.4 2007-05-04 13:56:05 arjen Exp $";
#ifndef STRING_H
#define STRING_H
#include <regex.h>
+// Forward declarations.
+class substring;
+class regex;
+
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
** NAME : String - Character String class.
** MEMBERS : p -> s : Pointer to the actual String data.
**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-
class String
{
friend class substring;
friend class String;
regex_t expression;
+ String original;
public:
regex(const String & reg);
regex(const char * reg);
+ regex(const regex & reg);
~regex();
friend bool operator == (const String &s, const regex &r);
***********************
** FILE NAME : regex.cpp
** SYSTEM NAME : Andromeda X-Windows Encapsulation
-** VERSION NUMBER : $Revision: 1.2 $
+** VERSION NUMBER : $Revision: 1.3 $
**
** DESCRIPTION : regex class implementation.
**
/*****************************
$Log: regex.cpp,v $
- Revision 1.2 2002-09-28 06:45:51 arjen
+ Revision 1.3 2007-05-04 13:56:05 arjen
+ Added a copy contructor to the regex class. This prevents multiple frees in the destructor.
+
+ Revision 1.2 2002/09/28 06:45:51 arjen
New feature: subtring selection by regular expression.
Bugfix: use the std: namespace for STL classes istream and ostream
*****************************/
-static const char RCSID[] = "$Id: regex.cpp,v 1.2 2002-09-28 06:45:51 arjen Exp $";
+static const char RCSID[] = "$Id: regex.cpp,v 1.3 2007-05-04 13:56:05 arjen Exp $";
#include <stdio.h>
#include <ctype.h>
regex::regex(const String ®)
{
+ original = reg;
regcomp (&expression, reg.p->s, REG_EXTENDED);
}
regex::regex(const char *reg)
{
+ original = reg;
regcomp (&expression, reg, REG_EXTENDED);
}
+regex::regex(const regex & reg)
+{
+ original = reg.original;
+ regcomp (&expression, reg.original, REG_EXTENDED);
+}
+
regex::~regex()
{
regfree(&expression);