/****************************************************************************
*
* var.hpp
*
*
Create: Dec 12 2004
*
Update: Sep 23 2005
*
© Jan-Erik
Lärka 2004 - 2005
*
****************************************************************************/
#ifndef VAR_HPP
#define
VAR_HPP
#include
<iostream>
#include
<stdlib.h>
#include <rexxsaa.h>
using namespace
std;
enum Calc { Add, Sub, Mult, Div };
class var {
private:
char *string;
int alloc_size;
bool static_size;
public:
/** Constructor alt. 1
* var( size, <static size> )
*
* This constructor create the new object that can hold
* a
string of specified size. Additionally it's possible
* to
specify if the
string/array should
be static in size
*
or dynamically resizeable by the class.
* Parameters:
*
slength - number of characters (mandatory)
*
s_size - static size (optional, FALSE by default)
*/
var( int slength, bool s_size = false )
: static_size( s_size ) {
if
( slength < 0
) slength = 0;
string = new char[
slength + 1 ];
for( int i = 0; i
<= slength; i++ ) string[ i ] = '\0';
alloc_size = slength;
};
/** Constructor alt. 2
(Default constructor
too)
* var(
<s>,
<size>, <static size> )
*
* This constructor
create the new object that can hold
* a
string of specified size. Additionally it's possible
* to
specify if the
string/array should
be dynamically
*
resizeable. If no parameters used it act as default
* constructor and
just prepare for futher use.
* Parameters:
*
s - string to set at creation (optional)
*
slength - number of characters (optional)
*
s_size - static size (optional, FALSE by default)
*/
var( const char *s = "", int slength = 0, bool s_size = false )
: static_size( s_size ) {
int i = 0,
slength2 = 0;
if
( slength < 0
)
slength2 = slength = -slength;
else if
( s[ 0 ] != NULL )
while ( s[ slength2 ] != '\0'
) slength2++;
slength = ( slength == 0
) ? slength2 : slength;
string = new char[
slength + 1 ];
if
( s[ 0 ] != NULL ) for(
; i < slength2 && i
< slength; i++ ) string[ i ] = s[ i ];
for( ; i
<= slength; i++ ) string[ i ] = '\0';
alloc_size = slength;
};
/** Copy constructor
* var( class,
<static size> )
*
* This copy
constructor copy contence
so it doesn't point to
* same
address space. Additionally it's possible to specify
* if the
target string/array should be dynamically resizeable.
* Parameters:
*
v - variable of class var with string (mandatory)
*
s_size - static size (optional, FALSE by default)
*/
var( const var&
v, bool
s_size = false )
: static_size( s_size ) {
int slength =
v.len();
string = new char[
slength + 1 ];
for( int i = 0; i
< slength; i++ ) string[ i ] = v.string[ i ];
string[ slength ] = '\0';
alloc_size = slength;
};
/** Destructor
* ~var()
*
* Destructor
used to destroy allocated object and clean up memory.
* Parameters:
*
none
*/
~var() { delete []
string; }
/* Methods (Member
functions) for
class */
friend int max( int i, int i2 ) { return
i > i2 ? i : i2; }
friend double max( double d, double d2 ) { return
d > d2 ? d : d2; }
friend double max( int i, double d ) { return
d > i ? d : i; }
friend double max( double d, int i ) { return
i > d ? i : d; }
friend int min( int
i, int i2 ) { return
i < i2 ? i : i2; }
friend double min( double d, double d2 ) { return
d < d2 ? d : d2; }
friend double min( int i, double d ) { return
d < i ? d : i; }
friend double min( double d, int i ) { return
i < d ? i : d; }
bool isAutoResizable() const { return
!static_size; }
bool isStaticInSize()
const { return static_size; }
int len() const;
int len( const char*
) const;
int allocated() const { return
alloc_size; }
var& flush();
var& clean();
var& reSize( int stat_size =
-1, bool stat = false, bool truncate
= false );
friend int cmp( var
& , const var &, bool
exact = true );
friend int cmp( char* , const char* , bool exact = true );
int cmp( const char*
, bool exact = true
) const;
friend int cmp( var
& , const char, bool exact = true );
int cmp( const char, bool exact = true ) const;
var& cpy( const var
& );
var& cpy( const char*, const int
);
var& cpy( const char );
friend var cpy( var
& , const var &
);
friend var cpy( var
& , const char
);
var& set( RXSTRING*
& );
var& get( const RXSTRING*
);
var& cat( const var
& );
var& revCat( const var
& );
friend var cat( var
& , const var &
);
var& cat( const char );
friend var cat( var
& , const char
);
var& cat( const int );
friend var cat( var
& , const int
);
var split( const int
, int skip = 0 );
var split( const var
& , bool
skip = false );
var split( const char, int start = 0, int n = 0 );
friend var split( char*
&, const int
, int skip = 0 );
var& remstr( const int , int n = 1 );
friend var remstr( var &
, const int
, int n = 1 );
friend var remstr( char* , const int , int n = 1 );
var& substr( int , int stop = -1, char pad = ' '
);
var substr2( var
& , int , int stop = -1, char pad = ' '
) const;
var substr2( int , int stop = -1, char pad = ' '
) const;
var substr2( const char* , int , int stop = -1, char pad = ' '
) const;
var& cal( const var& , Calc calc = Add );
int boyerMooreSearch( const var &
) const;
friend int boyerMooreSearch( var &
, const var &
);
int bruteForceSearch( const char
, int
start = 0, bool
exact = true ) const;
friend int bruteForceSearch( var &
, const char
, int start = 0, bool
exact = true );
int reversebruteForceSearch( const char
, int
start = -1, bool
exact = true
) const;
friend int reversebruteForceSearch( var & , const char , int start = -1, bool exact = true );
var& left( int pos );
var& middle( int length );
var& right( int pos );
var& right( const var
& );
var right2( const var &
);
var& leftOf( const var
& );
var splitTo( const int , int skip = 0 );
var splitTo( const var &
, bool
skip = false );
var splitTo( const char, int start = 0, int n = 0 );
var toLast2( const char ) const;
var afterLast2( const char ) const;
var& rightOf( const var
& );
var& addRightOf( const var &
);
int words( const char c = ' ' ) const;
var word( int n, const char c = ' ' ) const;
var& removeText( const var &
);
friend var& removeText( var
& , const var &
);
var& removeChar( const char );
friend var& removeChar( var
& , const char
);
var& removeByChar( const var &
);
var& translateChar( const char , const char );
var& translateByChar( const var
& , const var &
);
var& upper();
var& lower();
var& strip( const char c = ' ' );
var strip2( const char c = ' ' ) const;
var& stripTrailing( const char
c = ' ' );
var stripTrailing2( const char c = ' ' ) const;
var& insert( var &, int , bool truncate = true );
bool isDigit() const;
bool isDigit( const char* ) const;
bool isAlpha() const;
bool isAlpha( const char* ) const;
/* Operations to
perform on the class */
friend
ostream& operator
<< ( ostream& out, const
var& v
);
friend
istream& operator
>> ( istream& in, const
var& v
);
friend var operator
+ ( const char* , const var& );
friend var operator
+ ( const char , const var& );
friend var operator
+ ( const int , const var& );
friend var operator
+ ( const long , const var& );
friend var operator
+ ( const double , const var& );
friend var operator
- ( const char* , const var& );
friend var operator
- ( const char , const var& );
friend var operator
- ( const int , const var& );
friend var operator
- ( const long , const var& );
friend var operator
- ( const double , const var& );
friend var operator
* ( const int , const var& );
friend var operator
* ( const long , const var& );
friend var operator
* ( const double , const var& );
friend var operator
/ ( const char* , const var& );
friend var operator
/ ( const char , const var& );
friend var operator
/ ( const int , const var& );
friend var operator
/ ( const long , const var& );
friend var operator
/ ( const double , const var& );
operator char*() { return string; };
operator int() { return atoi(
string ); };
operator long() { return atol(
string ); };
operator double() { return atof(
string ); };
operator unsigned long() { return
strtoul( string, NULL,
10
); };
operator bool() { return (
string[ 0 ] != '\0' ); };
var& operator = ( const char*
);
var& operator = ( const char
);
var& operator = ( const var& );
var& operator = ( const int
);
var& operator = ( const long );
var& operator = ( const double
);
bool operator
< ( const char*
) const;
bool operator
< ( const char
) const;
bool operator
< ( const var& ) const;
bool operator
< ( const int
) const;
bool operator
< ( const long ) const;
bool operator
< ( const double
) const;
bool operator
> ( const char*
) const;
bool operator
> ( const char
) const;
bool operator
> ( const var& ) const;
bool operator
> ( const int
) const;
bool operator
> ( const long ) const;
bool operator
> ( const double
) const;
bool operator
<= ( const char*
) const;
bool operator
<= ( const char
) const;
bool operator
<= ( const var& ) const;
bool operator
<= ( const int
) const;
bool operator
<= ( const long ) const;
bool operator
<= ( const double
) const;
bool operator
>= ( const char*
) const;
bool operator
>= ( const char
) const;
bool operator
>= ( const var& ) const;
bool operator
>= ( const int
) const;
bool operator
>= ( const long ) const;
bool operator
>= ( const double
) const;
bool operator == ( const char* ) const;
bool operator == ( const char ) const;
bool operator == ( const var& ) const;
bool operator == ( const int ) const;
bool operator == ( const long ) const;
bool operator == ( const double ) const;
bool operator ^= ( const char* ) const;
bool operator ^= ( const char ) const;
bool operator ^= ( const var& ) const;
bool operator ^= ( const int ) const;
bool operator ^= ( const long ) const;
bool operator ^= ( const double ) const;
bool operator != ( const char* ) const;
bool operator != ( const char ) const;
bool operator != ( const var& ) const;
bool operator != ( const int ) const;
bool operator != ( const long ) const;
bool operator != ( const double ) const;
var& operator += ( const char*
);
var& operator += ( const char
);
var& operator += ( const var& );
var& operator += ( const int
);
var& operator += ( const long );
var& operator += ( const double
);
var& operator -= ( const char*
);
var& operator -= ( const char
);
var& operator -= ( const var& );
var& operator -= ( const int
);
var& operator -= ( const long );
var& operator -= ( const double
);
var& operator *= ( const int
);
var& operator *= ( const long );
var& operator *= ( const double
);
var& operator /= ( const char*
);
var& operator /= ( const char
);
var& operator /= ( const var& );
var& operator /= ( const int
);
var& operator /= ( const long );
var& operator /= ( const double
);
var operator + ( const char* ) const;
var operator + ( const char ) const;
var operator + ( const var& ) const;
var operator + ( const int ) const;
var operator + ( const long ) const;
var operator + ( const double ) const;
var operator - ( const char* ) const;
var operator - ( const char ) const;
var operator - ( const var& ) const;
var operator - ( const int ) const;
var operator - ( const long ) const;
var operator - ( const double ) const;
var operator * ( const int ) const;
var operator * ( const long ) const;
var operator * ( const double ) const;
var operator / ( const char* ) const;
var operator / ( const char ) const;
var operator / ( const var& ) const;
var operator / ( const int ) const;
var operator / ( const long ) const;
var operator / ( const double ) const;
char& operator
[] ( const int
);
};
#endif