Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes
vul_awk Class Reference

The core of awk. More...

#include <vul_awk.h>

List of all members.

Public Types

enum  ModeFlags { none = 0x00, verbose = 0x01, strip_comments = 0x02, backslash_continuations = 0x04 }

Public Member Functions

 vul_awk (vcl_istream &s, ModeFlags mode=none)
 Construct from input stream.
 ~vul_awk ()
char const * operator[] (unsigned i) const
 Return field i. Counting starts at 0.
int NR () const
 Return the current "record number", i.e. line number.
int NF () const
 Return the number of fields on this line.
char const * line () const
 Return the entire line.
char const * line_from (int field_number) const
 Return the remainder of the line, starting from field_number.
 operator safe_bool () const
 Return true if this line is not the last.
bool operator! () const
 Return false if this line is not the last.
vul_awkoperator++ ()
 Advance to the next line.
void error (vcl_ostream &, char const *message, int field=-1, int char_within_field=0)
 Display error message, line number.

Protected Member Functions

void next ()
 vul_awk (const vul_awk &that)
vul_awkoperator= (const vul_awk &that)

Protected Attributes

vcl_istream & fd_
ModeFlags mode_
vcl_string line_
char * split_line_
vcl_vector< char * > fields_
int line_number_
bool done_

Private Attributes

 VCL_SAFE_BOOL_DEFINE

Detailed Description

The core of awk.

vul_awk reads lines from a vcl_istream and breaks them into whitespace-separated fields. Its primary advantage is that its name defines the semantics of its methods---except that this C++ version uses zero-based fields. The usage is exemplified in this example, to print the second field in every line:

    for (vul_awk awk=cin; awk; ++awk)
      vcl_cout << awk[2] << vcl_endl;

The constructor takes an integer mode-flag variable. Right now, only the strip_comments flag has any effect, though the ModeFlags enumeration contains other potential flags.

When the strip_comments flag is set then everything from the first '#' character to the end of the line is replaced with a single space. As a special feature, lines that contain an # as the first character are skipped entirely by the next() routine, no attempt will be made to extract fields from them. They will be counted in the line numbering so that error messages can easily refer to the correct line in the file. To extend the above example to handle comments in the file, write:

    for (vul_awk awk(cin, vul_awk::strip_comments); awk; ++awk)
      vcl_cout << awk[2] << vcl_endl;

Definition at line 56 of file vul_awk.h.


Member Enumeration Documentation

Enumerator:
none 
verbose 
strip_comments 
backslash_continuations 

Definition at line 61 of file vul_awk.h.


Constructor & Destructor Documentation

vul_awk::vul_awk ( vcl_istream &  s,
ModeFlags  mode = none 
)

Construct from input stream.

Definition at line 24 of file vul_awk.cxx.

vul_awk::~vul_awk ( )

Definition at line 35 of file vul_awk.cxx.

vul_awk::vul_awk ( const vul_awk that) [protected]

Member Function Documentation

void vul_awk::error ( vcl_ostream &  ,
char const *  message,
int  field = -1,
int  char_within_field = 0 
)

Display error message, line number.

Also display optional field number and char within field.

char const* vul_awk::line ( ) const [inline]

Return the entire line.

Definition at line 88 of file vul_awk.h.

char const * vul_awk::line_from ( int  field_number) const

Return the remainder of the line, starting from field_number.

(0 is from the first non-whitespace character)

Definition at line 123 of file vul_awk.cxx.

void vul_awk::next ( ) [protected]

Definition at line 40 of file vul_awk.cxx.

int vul_awk::NF ( ) const [inline]

Return the number of fields on this line.

Definition at line 85 of file vul_awk.h.

int vul_awk::NR ( ) const [inline]

Return the current "record number", i.e. line number.

Definition at line 82 of file vul_awk.h.

vul_awk::operator safe_bool ( ) const [inline]

Return true if this line is not the last.

Definition at line 95 of file vul_awk.h.

bool vul_awk::operator! ( ) const [inline]

Return false if this line is not the last.

Definition at line 99 of file vul_awk.h.

vul_awk& vul_awk::operator++ ( ) [inline]

Advance to the next line.

Definition at line 103 of file vul_awk.h.

vul_awk& vul_awk::operator= ( const vul_awk that) [protected]
char const* vul_awk::operator[] ( unsigned  i) const [inline]

Return field i. Counting starts at 0.

Definition at line 74 of file vul_awk.h.


Member Data Documentation

bool vul_awk::done_ [protected]

Definition at line 129 of file vul_awk.h.

vcl_istream& vul_awk::fd_ [protected]

Definition at line 113 of file vul_awk.h.

vcl_vector<char *> vul_awk::fields_ [protected]

Definition at line 123 of file vul_awk.h.

vcl_string vul_awk::line_ [protected]

Definition at line 118 of file vul_awk.h.

int vul_awk::line_number_ [protected]

Definition at line 126 of file vul_awk.h.

Definition at line 115 of file vul_awk.h.

char* vul_awk::split_line_ [protected]

Definition at line 121 of file vul_awk.h.

Definition at line 58 of file vul_awk.h.


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