core/vil/file_formats/vil_nitf2_field_formatter.cxx
Go to the documentation of this file.
00001 // vil_nitf2: Written by Harry Voorhees (hlv@) and Rob Radtke (rob@) of
00002 // Stellar Science Ltd. Co. (stellarscience.com) for
00003 // Air Force Research Laboratory, 2005.
00004 
00005 #include "vil_nitf2_field_formatter.h"
00006 #include "vil_nitf2_field.h"
00007 
00008 // not used? #include <vcl_iomanip.h>
00009 #include <vcl_iostream.h>
00010 #include <vcl_cstring.h> // for std::strlen()
00011 
00012 //==============================================================================
00013 // Class vil_nitf2_field_formatter
00014 
00015 char* vil_nitf2_field_formatter::read_char_array(vcl_istream& input, int size)
00016 {
00017   char* char_array = new char[size+1];
00018   input.read(char_array, size);
00019   char_array[input.gcount()]='\0';
00020   return char_array;
00021 }
00022 
00023 vcl_string vil_nitf2_field_formatter::read_string(vcl_istream& input, int size)
00024 {
00025   char* cstr = read_char_array(input, size);
00026   vcl_string str = vcl_string(cstr);
00027   delete[] cstr;
00028   return str;
00029 }
00030 
00031 vcl_string vil_nitf2_field_formatter::read_string(vil_stream& input, int size)
00032 {
00033   char* char_array = new char[size+1];
00034   vil_streampos pos = input.read(char_array, size);
00035   char_array[pos]='\0';
00036   vcl_string retVal(char_array);
00037   delete[] char_array;
00038   return retVal;
00039 }
00040 
00041 bool vil_nitf2_field_formatter::read_c_str(vcl_istream& input, int length,
00042                                            char*& out_cstr, bool& all_blank)
00043 {
00044   out_cstr = read_char_array(input, length);
00045   all_blank = is_all_blank(out_cstr);
00046   return int(vcl_strlen(out_cstr)) == length;
00047 }
00048 
00049 bool vil_nitf2_field_formatter::write_blank(vcl_ostream& output)
00050 {
00051   vcl_string str(field_width,' ');
00052   output << str;
00053   return !output.fail();
00054 }
00055 
00056 bool vil_nitf2_field_formatter::write_blank(vil_nitf2_ostream& output)
00057 {
00058   vcl_string str(field_width, ' ');
00059   output.write(str.c_str(), field_width);
00060   return output.ok();
00061 }
00062 
00063 bool vil_nitf2_field_formatter::is_all_blank(const char* cstr)
00064 {
00065   while (*cstr != '\0') {
00066     if (*cstr != ' ') return false;
00067     ++cstr;
00068   }
00069   return true;
00070 }
00071 
00072 bool vil_nitf2_field_formatter::check_sign(const char* cstr, bool show_sign)
00073 {
00074  return
00075    cstr &&
00076    ((!show_sign && cstr[0] != '+' && cstr[0] != '-') ||
00077     (show_sign && (cstr[0] == '+' || cstr[0] == '-'))  );
00078 }