vil_nitf2_field_formatter.cxx
Go to the documentation of this file.
1 // vil_nitf2: Written by Harry Voorhees (hlv@) and Rob Radtke (rob@) of
2 // Stellar Science Ltd. Co. (stellarscience.com) for
3 // Air Force Research Laboratory, 2005.
4 
5 #include <iomanip>
6 #include <iostream>
7 #include <cstring>
9 #include "vil_nitf2_field.h"
10 
11 // not used? #include <vcl_compiler.h>
12 
13 //==============================================================================
14 // Class vil_nitf2_field_formatter
15 
16 char* vil_nitf2_field_formatter::read_char_array(std::istream& input, int size)
17 {
18  char* char_array = new char[size+1];
19  input.read(char_array, size);
20  char_array[input.gcount()]='\0';
21  return char_array;
22 }
23 
24 std::string vil_nitf2_field_formatter::read_string(std::istream& input, int size)
25 {
26  char* cstr = read_char_array(input, size);
27  std::string str = std::string(cstr);
28  delete[] cstr;
29  return str;
30 }
31 
33 {
34  char* char_array = new char[size+1];
35  vil_streampos pos = input.read(char_array, size);
36  char_array[pos]='\0';
37  std::string retVal(char_array);
38  delete[] char_array;
39  return retVal;
40 }
41 
42 bool vil_nitf2_field_formatter::read_c_str(std::istream& input, int length,
43  char*& out_cstr, bool& all_blank)
44 {
45  out_cstr = read_char_array(input, length);
46  all_blank = is_all_blank(out_cstr);
47  return int(std::strlen(out_cstr)) == length;
48 }
49 
50 bool vil_nitf2_field_formatter::write_blank(std::ostream& output)
51 {
52  std::string str(field_width,' ');
53  output << str;
54  return !output.fail();
55 }
56 
58 {
59  std::string str(field_width, ' ');
60  output.write(str.c_str(), field_width);
61  return output.ok();
62 }
63 
65 {
66  while (*cstr != '\0') {
67  if (*cstr != ' ') return false;
68  ++cstr;
69  }
70  return true;
71 }
72 
73 bool vil_nitf2_field_formatter::check_sign(const char* cstr, bool show_sign)
74 {
75  return
76  cstr &&
77  ((!show_sign && cstr[0] != '+' && cstr[0] != '-') ||
78  (show_sign && (cstr[0] == '+' || cstr[0] == '-')) );
79 }
static bool is_all_blank(const char *cstr)
static std::string read_string(std::istream &input, int length)
virtual vil_streampos write(void const *buf, vil_streampos n)=0
Write n bytes from buf. Returns number of bytes written.
virtual vil_streampos read(void *buf, vil_streampos n)=0
Read n bytes into buf. Returns number of bytes read.
static bool check_sign(const char *cstr, bool show_sign)
static char * read_char_array(std::istream &input, int length)
Stream interface for VIL image loaders.
Definition: vil_stream.h:21
bool write_blank(std::ostream &output)
static bool read_c_str(std::istream &input, int length, char *&out_cstr, bool &all_blank)
virtual bool ok() const =0
Return false if the stream is broken.
vxl_int_32 vil_streampos
Definition: vil_stream.h:16