casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
casacore::MUString Class Reference

Pointed String class to aid analysis of quantity strings. More...

#include <MUString.h>

Public Member Functions

 MUString ()
 Default constructor creates an empty string. More...
 
 MUString (const String &in)
 Create from String; setting pointer at start. More...
 
 MUString (const Char *in)
 
 MUString (char in)
 
 MUString (const MUString &other)
 Copy constructor; new pointer will be same as old. More...
 
MUStringoperator= (const MUString &other)
 Copy assignment; new pointer will be same as old. More...
 
 ~MUString ()
 Destructor. More...
 
String operator() ()
 Obtain remaining string (same as get()). More...
 
void push ()
 Save current pointer on internal stack. More...
 
void pop ()
 Restore pointer from stack (or set to start if stack empty) More...
 
void unpush ()
 Restore stack for one level. More...
 
void skipBlank ()
 Act on whitespace; adjusting pointer if skip. More...
 
Bool testBlank () const
 
Bool tSkipBlank ()
 
void skipSign ()
 Act on sign; return +1 or -1 depending on signs found (– == +) More...
 
Bool testSign () const
 
Bool tSkipSign ()
 
Int getSign ()
 
void skipInt ()
 Act on integer field. More...
 
Bool testInt () const
 
Bool tSkipInt ()
 
Int getInt ()
 
void skipuInt ()
 
Bool tSkipuInt ()
 
Bool testuInt () const
 
uInt getuInt ()
 
void skipDouble ()
 Act on Double field. More...
 
Bool testDouble () const
 
Bool tSkipDouble ()
 
Double getDouble ()
 
void skipChar (Int n=1)
 Act on character(s) More...
 
void skipChar (Char ch)
 
Bool tSkipChar (Char nc)
 
void skipCharNC (Char ch)
 
Bool tSkipCharNC (Char ch)
 
Bool tSkipOneChar (Char ch)
 
Bool tSkipOneCharNC (Char ch)
 
void skipChar (const Regex &ex)
 
Bool tSkipChar (const Regex &ex)
 
void skipAlpha ()
 
Bool tSkipAlpha ()
 
void skipNum ()
 
Bool tSkipNum ()
 
void skipAlphaNum ()
 
Bool tSkipAlphaNum ()
 
Bool testChar (Char ch) const
 
Bool testCharNC (Char ch) const
 
Bool testChar (const Regex &ex) const
 
Bool testAlpha () const
 
Bool testNum () const
 
Bool testAlphaNum () const
 
Char getChar ()
 
String getAlpha ()
 
String getAlphaNum ()
 
Bool testString (const Regex &ex) const
 Act on series of characters. More...
 
Bool testString (const String &ex) const
 
Bool testStringNC (const String &ex) const
 
Bool tSkipString (const Regex &ex)
 
Bool tSkipString (const String &ex)
 
Bool tSkipStringNC (const String &ex)
 
void skipString (const Regex &ex)
 
void skipString (const String &ex)
 
void skipStringNC (const String &ex)
 
String getString (const Regex &ex)
 
String getString (const String &ex)
 
String getStringNC (const String &ex)
 
Bool matchPair (Char nd)
 Match a pair of opening(at pointer)/closing characters (e.g. More...
 
Int freqChar (Char ch) const
 Get frequency of occurrence. More...
 
String get ()
 Get part of string. More...
 
String get (uInt st)
 
String get (uInt st, uInt nd)
 
Int getPtr () const
 Get pointer. More...
 
void setPtr (Int in=0)
 (Re-)set pointer More...
 
Bool eos () const
 test for end of string More...
 
Bool status () const
 Get status last get. More...
 
const StringlastGet () const
 Get String found at last get. More...
 

Static Public Member Functions

static uInt minimaxNC (const String &in, Int N_name, const String tname[])
 Do minimax check on list of Strings. More...
 
static uInt minimaxNC (const String &in, const Vector< String > &tname)
 

Private Member Functions

void adjustPtr (Int in)
 Member functions Make a new pointer between 0 and len inclusive. More...
 
Int initLast ()
 Initialise last settings; return pointer. More...
 
void setLast (Int st)
 Set last settings. More...
 

Private Attributes

String str
 
Data

String value More...

 
uInt ptr
 0-based pointer into string More...
 
uInt len
 Length of string. More...
 
Block< uIntstack
 Pointer stack. More...
 
uInt stpt
 Pointer into stack. More...
 
Bool stat
 Status of last get. More...
 
String lget
 String found at last get. More...
 

Friends

ostream & operator<< (ostream &os, const MUString &in)
 Output String starting at pointer. More...
 

Detailed Description

Pointed String class to aid analysis of quantity strings.

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tMeasure

Prerequisite

Etymology

From Measure Utility String

Synopsis

The MUString is a class with a String and an embedded pointer. It can be used to linearly analyse a string for its semantics. Imagine for instance a string that represents an angle. It could be formatted as [+-]hh:mm:ss.ttt or as [+-]hh[hH]mm[mM] or as [+-]dd.mm.ss.ttt or with .'s replaced with dms or as [+-]ddd.fff deg etc.
The available methods aid in analysing this string (see example).
The following analysis method classes are avaible:

The following types (X in the above list) are available

General string aids are available. The main one a minimax, caseless check of an input String against a vector: static uInt minimaxNC(String in, Int N_name, String name[]) and its vector equivalent: static uInt minimaxNC(String in, Vector<String> name). Success is indicated by a return value less than N_name or the vector length.

Example

See MVAngle class for example background. The following example is the conversion of different input angle formats to a Quantity. A full blown example, but gives some idea of intricacies involved.

res = Quantity(0.0, "rad"); // result
MUString tmp(in); // Pointed non-const String
tmp.skipBlank();
Double s = tmp.getSign(); // sign
tmp.push(); // Save position to rescan
Double r = tmp.getuInt(); // first field
Int tp = 0; // distributor
if (tmp.tSkipChar('.')) { // if more than one., dms format
Double r1 = tmp.getuInt();
if (tmp.tSkipChar('.')) {
r += r1/60.0 + tmp.getDouble()/3600.0;
tp = 4;
} else { // else value with units
tmp.pop(); // Reset position
r = tmp.getDouble();
};
} else if (tmp.tSkipCharNC('d')) { // dms
tp = 1;
} else if (tmp.tSkipCharNC('h')) { // hms
tp = 2;
} else if (tmp.tSkipChar(':')) { // hms
tp = 3;
};
switch (tp) {
case 0: {
UnitVal u; String us;
if (!MVAngle::unitString(u,us,tmp)) return False;
r *= s;
if (u == UnitVal::NODIM) { // check correct dimension
res = Quantity(r,"rad");
return True;
};
if (u == UnitVal::ANGLE) {
res = Quantity(r,us);
return True;
};
if (u == UnitVal::TIME) {
res = Quantity(Quantity(r/240.,us).getBaseValue(), "deg");
return True;
};
return False;
};
break;
case 1:
case 2:
case 3: { // get remainder od ms and hms formats
Char tc = 'm';
if (tp == 3) tc = ':';
tmp.push();
Double r1 = tmp.getuInt();
if (tmp.tSkipChar('.')) {
tmp.pop();
r += tmp.getDouble()/3600.;
} else if (tmp.tSkipCharNC(tc)) {
r += r1/60.0 + tmp.getDouble()/3600.;
} else {
r += r1/3600.0;
};
r *= s;
};
break;
default:
break;
};
switch (tp) { // make correct units
case 1:
case 4:
res = Quantity(r,"deg");
break;
case 2:
case 3:
res = Quantity(Quantity(r/240.,"h").getBaseValue(), "deg");
break;
default:
break;
};
return True;

Motivation

The class was written to be able to analyse an input string for its Quantum representation as value with units, or os a date/time or as an angle.

To Do

Definition at line 229 of file MUString.h.

Constructor & Destructor Documentation

casacore::MUString::MUString ( )

Default constructor creates an empty string.

casacore::MUString::MUString ( const String in)

Create from String; setting pointer at start.

casacore::MUString::MUString ( const Char in)
casacore::MUString::MUString ( char  in)
casacore::MUString::MUString ( const MUString other)

Copy constructor; new pointer will be same as old.

casacore::MUString::~MUString ( )

Destructor.

Member Function Documentation

void casacore::MUString::adjustPtr ( Int  in)
private

Member functions Make a new pointer between 0 and len inclusive.

Bool casacore::MUString::eos ( ) const

test for end of string

Int casacore::MUString::freqChar ( Char  ch) const

Get frequency of occurrence.

String casacore::MUString::get ( )

Get part of string.

String casacore::MUString::get ( uInt  st)
String casacore::MUString::get ( uInt  st,
uInt  nd 
)
String casacore::MUString::getAlpha ( )
String casacore::MUString::getAlphaNum ( )
Char casacore::MUString::getChar ( )
Double casacore::MUString::getDouble ( )
Int casacore::MUString::getInt ( )
Int casacore::MUString::getPtr ( ) const

Get pointer.

Int casacore::MUString::getSign ( )
String casacore::MUString::getString ( const Regex ex)
String casacore::MUString::getString ( const String ex)
String casacore::MUString::getStringNC ( const String ex)
uInt casacore::MUString::getuInt ( )
Int casacore::MUString::initLast ( )
private

Initialise last settings; return pointer.

const String& casacore::MUString::lastGet ( ) const

Get String found at last get.

Bool casacore::MUString::matchPair ( Char  nd)

Match a pair of opening(at pointer)/closing characters (e.g.

(and)). Return False if wrong semantics. The string between the pair (excluding them) will be put in Last. If false, the ptr will be as originally; if True it will point beyond the matched closing character

static uInt casacore::MUString::minimaxNC ( const String in,
Int  N_name,
const String  tname[] 
)
static

Do minimax check on list of Strings.

static uInt casacore::MUString::minimaxNC ( const String in,
const Vector< String > &  tname 
)
static
String casacore::MUString::operator() ( )

Obtain remaining string (same as get()).

MUString& casacore::MUString::operator= ( const MUString other)

Copy assignment; new pointer will be same as old.

void casacore::MUString::pop ( )

Restore pointer from stack (or set to start if stack empty)

void casacore::MUString::push ( )

Save current pointer on internal stack.

void casacore::MUString::setLast ( Int  st)
private

Set last settings.

void casacore::MUString::setPtr ( Int  in = 0)

(Re-)set pointer

void casacore::MUString::skipAlpha ( )
void casacore::MUString::skipAlphaNum ( )
void casacore::MUString::skipBlank ( )

Act on whitespace; adjusting pointer if skip.

void casacore::MUString::skipChar ( Int  n = 1)

Act on character(s)

void casacore::MUString::skipChar ( Char  ch)
void casacore::MUString::skipChar ( const Regex ex)
void casacore::MUString::skipCharNC ( Char  ch)
void casacore::MUString::skipDouble ( )

Act on Double field.

If no value 0 returned and False.

void casacore::MUString::skipInt ( )

Act on integer field.

If no integer found in 0 returned; and False

void casacore::MUString::skipNum ( )
void casacore::MUString::skipSign ( )

Act on sign; return +1 or -1 depending on signs found (– == +)

void casacore::MUString::skipString ( const Regex ex)
void casacore::MUString::skipString ( const String ex)
void casacore::MUString::skipStringNC ( const String ex)
void casacore::MUString::skipuInt ( )
Bool casacore::MUString::status ( ) const

Get status last get.

Bool casacore::MUString::testAlpha ( ) const
Bool casacore::MUString::testAlphaNum ( ) const
Bool casacore::MUString::testBlank ( ) const
Bool casacore::MUString::testChar ( Char  ch) const
Bool casacore::MUString::testChar ( const Regex ex) const
Bool casacore::MUString::testCharNC ( Char  ch) const
Bool casacore::MUString::testDouble ( ) const
Bool casacore::MUString::testInt ( ) const
Bool casacore::MUString::testNum ( ) const
Bool casacore::MUString::testSign ( ) const
Bool casacore::MUString::testString ( const Regex ex) const

Act on series of characters.

Bool casacore::MUString::testString ( const String ex) const
Bool casacore::MUString::testStringNC ( const String ex) const
Bool casacore::MUString::testuInt ( ) const
Bool casacore::MUString::tSkipAlpha ( )
Bool casacore::MUString::tSkipAlphaNum ( )
Bool casacore::MUString::tSkipBlank ( )
Bool casacore::MUString::tSkipChar ( Char  nc)
Bool casacore::MUString::tSkipChar ( const Regex ex)
Bool casacore::MUString::tSkipCharNC ( Char  ch)
Bool casacore::MUString::tSkipDouble ( )
Bool casacore::MUString::tSkipInt ( )
Bool casacore::MUString::tSkipNum ( )
Bool casacore::MUString::tSkipOneChar ( Char  ch)
Bool casacore::MUString::tSkipOneCharNC ( Char  ch)
Bool casacore::MUString::tSkipSign ( )
Bool casacore::MUString::tSkipString ( const Regex ex)
Bool casacore::MUString::tSkipString ( const String ex)
Bool casacore::MUString::tSkipStringNC ( const String ex)
Bool casacore::MUString::tSkipuInt ( )
void casacore::MUString::unpush ( )

Restore stack for one level.

Friends And Related Function Documentation

ostream& operator<< ( ostream &  os,
const MUString in 
)
friend

Output String starting at pointer.

Member Data Documentation

uInt casacore::MUString::len
private

Length of string.

Definition at line 392 of file MUString.h.

String casacore::MUString::lget
private

String found at last get.

Definition at line 400 of file MUString.h.

uInt casacore::MUString::ptr
private

0-based pointer into string

Definition at line 390 of file MUString.h.

Block<uInt> casacore::MUString::stack
private

Pointer stack.

Definition at line 394 of file MUString.h.

Bool casacore::MUString::stat
private

Status of last get.

Definition at line 398 of file MUString.h.

uInt casacore::MUString::stpt
private

Pointer into stack.

Definition at line 396 of file MUString.h.

String casacore::MUString::str
private

Data

String value

Definition at line 388 of file MUString.h.


The documentation for this class was generated from the following file: