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_awk & | operator++ () |
| 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_awk & | operator= (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 |
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:
Definition at line 56 of file vul_awk.h.