22 while(start!=end&&((*start)!=
'*'))
24 sum ^= ((*start)%128);
63 m_validCheckSum =
false;
65 if(!isValidStartChar(static_cast<char>(in.peek())))
68 m_startChars +
" but found " +
72 char c =
static_cast<char>(in.get());
73 while(((c!=
'\n')&&(c!=
'\r'))&&
77 c =
static_cast<char>(in.get());
79 std::string::iterator iter = std::find(m_message.begin(), m_message.end(),
'*');
81 if(iter != m_message.end())
83 setFields(m_message.begin()+1, m_message.end());
84 ossim_uint32 check = checksum(m_message.begin()+1, iter);
86 out << std::setw(2) << std::setfill(
'0') << std::hex << check;
87 std::string::iterator endChecksumIter = iter+1;
88 while((endChecksumIter!= m_message.end())&&(*endChecksumIter!=
',')) ++endChecksumIter;
91 m_validCheckSum =
true;
96 throw ossimException(
"Terminating * indicator for cbecksum not found in NMEA message format");
static ossim_uint32 checksum(std::string::const_iterator start, std::string::const_iterator end)
bool isValidStartChar(char c) const
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
virtual void parseMessage(std::istream &in)
Parses a standard formatted NMEA message.
OSSIM_DLL std::istream & skipws(std::istream &in)
unsigned int ossim_uint32
static ossimString downcase(const ossimString &aString)
std::basic_istream< char > istream
Base class for char input streams.
virtual void setFields(std::string::const_iterator start, std::string::const_iterator end)