OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimRpfBoundaryRectRecord.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Garrett Potts (gpotts@imagelinks.com)
6 // Description: Rpf support class
7 //
8 //********************************************************************
9 // $Id: ossimRpfBoundaryRectRecord.cpp 17815 2010-08-03 13:23:14Z dburken $
10 
11 #include <cstring> /* for memset/memcpy */
12 #include <iomanip>
13 #include <istream>
14 #include <ostream>
16 #include <ossim/base/ossimCommon.h> /* ossim::byteOrder() */
17 #include <ossim/base/ossimEndian.h>
19 
21 {
22  return data.print( out, std::string() );
23 }
24 
26  :
27  m_zone(),
28  m_coverage(),
29  m_numberOfFramesNorthSouth(0),
30  m_numberOfFramesEastWest(0)
31 {
32  clearFields();
33 }
34 
36  :
37  m_zone(obj.m_zone),
38  m_coverage(obj.m_coverage),
39  m_numberOfFramesNorthSouth(obj.m_numberOfFramesNorthSouth),
40  m_numberOfFramesEastWest(obj.m_numberOfFramesEastWest)
41 {
42  memcpy(m_productDataType, obj.m_productDataType, 6);
43  memcpy(m_compressionRatio, obj.m_compressionRatio, 6);
44  memcpy(m_scale, obj.m_scale, 13);
45  memcpy(m_producer, obj.m_producer, 6);
46 }
47 
49  const ossimRpfBoundaryRectRecord& rhs)
50 {
51  if ( this != & rhs )
52  {
53  memcpy(m_productDataType, rhs.m_productDataType, 6);
54  memcpy(m_compressionRatio, rhs.m_compressionRatio, 6);
55  memcpy(m_scale, rhs.m_scale, 13);
56  memcpy(m_producer, rhs.m_producer, 6);
57  m_coverage = rhs.m_coverage;
60  }
61  return *this;
62 }
63 
65 {
66 }
67 
69 {
70  if(in)
71  {
72  clearFields();
73 
74  in.read((char*)&m_productDataType, 5);
75  in.read((char*)&m_compressionRatio, 5);
76  in.read((char*)&m_scale, 12);
77  in.read((char*)&m_zone, 1);
78  in.read((char*)&m_producer, 5);
79 
80  ossimString tmpScale(m_scale);
81  tmpScale.trim();
82  if (!tmpScale.empty())
83  {
84  if (tmpScale.beforePos(2) != "1:")
85  {
86  if (tmpScale.afterPos(tmpScale.size()-2)!="M" &&
87  tmpScale.afterPos(tmpScale.size()-2)!="K")
88  {
89  int tmpScaleValue = tmpScale.toInt();
90  if (tmpScaleValue > 0)
91  {
92  tmpScale = ossimString("1:" + tmpScale);
93  memset(m_scale, ' ', 12);
94  memcpy(m_scale, tmpScale.c_str(), 12);
95  }
96  }
97  }
98  }
99 
101 
102  in.read((char*)&m_numberOfFramesNorthSouth, 4);
103  in.read((char*)&m_numberOfFramesEastWest, 4);
104 
105  if( ossim::byteOrder() != byteOrder )
106  {
107  ossimEndian anEndian;
109  anEndian.swap(m_numberOfFramesEastWest);
110  }
111  }
112  else
113  {
115  }
116 
118 }
119 
121 {
122  ossimEndian anEndian;
123  if( anEndian.getSystemEndianType() != OSSIM_BIG_ENDIAN )
124  {
125  // Always write out big endian.
127  anEndian.swap(m_numberOfFramesEastWest);
128  }
129 
130  out.write((char*)&m_productDataType, 5);
131  out.write((char*)&m_compressionRatio, 5);
132  out.write((char*)&m_scale, 12);
133  out.write((char*)&m_zone, 1);
134  out.write((char*)&m_producer, 5);
135 
136  m_coverage.writeStream(out);
137 
138  out.write((char*)&m_numberOfFramesNorthSouth, 4);
139  out.write((char*)&m_numberOfFramesEastWest, 4);
140 
141  if( anEndian.getSystemEndianType() != OSSIM_BIG_ENDIAN )
142  {
143  // Swap back to native byte order.
145  anEndian.swap(m_numberOfFramesEastWest);
146  }
147 }
148 
150 {
151  memset(m_productDataType, ' ', 5);
152  memset(m_compressionRatio, ' ', 5);
153  memset(m_scale, ' ', 12);
154  memset(m_producer, ' ', 5);
158 
159  m_productDataType[5] = '\0';
160  m_compressionRatio[5] = '\0';
161  m_scale[12] = '\0';
162  m_producer[5] = '\0';
163  m_zone = ' ';
164 }
165 
167 {
168  m_coverage = coverage;
169 }
170 
172 {
173  // Capture the original flags.
174  std::ios_base::fmtflags f = out.flags();
175 
176  out << std::setiosflags(std::ios_base::fixed)
177  << std::setprecision(12)
178  << prefix << "ProductDataType: "
179  << m_productDataType << "\n"
180  << prefix << "CompressionRatio: "
181  << m_compressionRatio << "\n"
182  << prefix << "Scale: "
183  << m_scale << "\n"
184  << prefix << "Zone: "
185  << m_zone << "\n"
186  << prefix << "Producer: "
187  << m_producer << "\n";
188 
189  m_coverage.print(out, prefix);
190 
191  out << prefix << "NumberOfFramesNorthSouth: "
192  << m_numberOfFramesNorthSouth << "\n"
193  << prefix << "NumberOfFramesEastWest: "
195  << "\n";
196 
197  // Reset flags.
198  out.setf(f);
199 
200  return out;
201 }
ossim_int32 ossimErrorCode
const ossimRpfBoundaryRectRecord & operator=(const ossimRpfBoundaryRectRecord &rhs)
assignment operator
ossimRpfCoverageSection m_coverage
ossimErrorCode parseStream(std::istream &in, ossimByteOrder byteOrder)
ossimErrorCode parseStream(std::istream &in, ossimByteOrder byteOrder)
std::ostream & print(std::ostream &out, const std::string &prefix=std::string()) const
print method that outputs a key/value type format adding prefix to keys.
static const ossimErrorCode OSSIM_OK
ossimString afterPos(std::string::size_type pos) const
ossimRpfBoundaryRectRecord()
default constructor
OSSIM_DLL ossimByteOrder byteOrder()
Definition: ossimCommon.cpp:54
static const ossimErrorCode OSSIM_ERROR
std::ostream & operator<<(std::ostream &out, const ossimRpfBoundaryRectRecord &data)
void setCoverage(const ossimRpfCoverageSection &coverage)
std::string::size_type size() const
Definition: ossimString.h:405
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
ossimByteOrder
ossimByteOrder getSystemEndianType() const
Definition: ossimEndian.h:78
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
void writeStream(std::ostream &out)
Write method.
void writeStream(std::ostream &out)
Write method.
ossimString beforePos(std::string::size_type pos) const
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396
bool empty() const
Definition: ossimString.h:411
void swap(ossim_sint8 &)
Definition: ossimEndian.h:26
int toInt() const
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
std::ostream & print(std::ostream &out, ossimString prefix) const
prints to out.