casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends
casa::MUString Class Reference

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

#include <MUString.h>

List of all members.

Public Member Functions

 MUString ()
 Default constructor creates an empty string.
 MUString (const String &in)
 Create from String; setting pointer at start.
 MUString (const Char *in)
 MUString (char in)
 MUString (const MUString &other)
 Copy constructor; new pointer will be same as old.
MUStringoperator= (const MUString &other)
 Copy assignment; new pointer will be same as old.
 ~MUString ()
 Destructor.
String operator() ()
 Obtain remaining string (same as get()).
void push ()
 Save current pointer on internal stack.
void pop ()
 Restore pointer from stack (or set to start if stack empty)
void unpush ()
 Restore stack for one level.
void skipBlank ()
 Act on whitespace; adjusting pointer if skip.
Bool testBlank () const
Bool tSkipBlank ()
void skipSign ()
 Act on sign; return +1 or -1 depending on signs found (-- == +)
Bool testSign () const
Bool tSkipSign ()
Int getSign ()
void skipInt ()
 Act on integer field.
Bool testInt () const
Bool tSkipInt ()
Int getInt ()
void skipuInt ()
Bool tSkipuInt ()
Bool testuInt () const
uInt getuInt ()
void skipDouble ()
 Act on Double field.
Bool testDouble () const
Bool tSkipDouble ()
Double getDouble ()
void skipChar (Int n=1)
 Act on character(s)
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.
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.
Int freqChar (Char ch) const
 Get frequency of occurrence.
String get ()
 Get part of string.
String get (uInt st)
String get (uInt st, uInt nd)
Int getPtr () const
 Get pointer.
void setPtr (Int in=0)
 (Re-)set pointer
Bool eos () const
 test for end of string
Bool status () const
 Get status last get.
const StringlastGet () const
 Get String found at last get.

Static Public Member Functions

static uInt minimaxNC (const String &in, Int N_name, const String tname[])
 Do minimax check on list of Strings.
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.
Int initLast ()
 Initialise last settings; return pointer.
void setLast (Int st)
 Set last settings.

Private Attributes

String str
 
   

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

Friends

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

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

Default constructor creates an empty string.

Create from String; setting pointer at start.

casa::MUString::MUString ( const Char in)
casa::MUString::MUString ( const MUString other)

Copy constructor; new pointer will be same as old.

Destructor.


Member Function Documentation

void casa::MUString::adjustPtr ( Int  in) [private]

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

test for end of string

Get frequency of occurrence.

Get part of string.

String casa::MUString::get ( uInt  st,
uInt  nd 
)

Get pointer.

Initialise last settings; return pointer.

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

Get String found at last get.

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 casa::MUString::minimaxNC ( const String in,
Int  N_name,
const String  tname[] 
) [static]

Do minimax check on list of Strings.

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

Obtain remaining string (same as get()).

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

Copy assignment; new pointer will be same as old.

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

Save current pointer on internal stack.

void casa::MUString::setLast ( Int  st) [private]

Set last settings.

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

(Re-)set pointer

Act on whitespace; adjusting pointer if skip.

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

Act on character(s)

void casa::MUString::skipChar ( const Regex ex)

Act on Double field.

If no value 0 returned and False.

Act on integer field.

If no integer found in 0 returned; and False

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

void casa::MUString::skipString ( const Regex ex)
void casa::MUString::skipString ( const String ex)
void casa::MUString::skipStringNC ( const String ex)

Get status last get.

Bool casa::MUString::testChar ( const Regex ex) const
Bool casa::MUString::testString ( const Regex ex) const

Act on series of characters.

Bool casa::MUString::testString ( const String ex) const
Bool casa::MUString::testStringNC ( const String ex) const

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

Length of string.

Definition at line 392 of file MUString.h.

String found at last get.

Definition at line 400 of file MUString.h.

0-based pointer into string

Definition at line 390 of file MUString.h.

Pointer stack.

Definition at line 394 of file MUString.h.

Status of last get.

Definition at line 398 of file MUString.h.

Pointer into stack.

Definition at line 396 of file MUString.h.

   

Data String value

Definition at line 388 of file MUString.h.


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