EUI64.cc
Go to the documentation of this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #include "EUI64.hh"
00027
00028
00029
00030 #include <boost/io/ios_state.hpp>
00031 #include <iomanip>
00032 #include "ParseString.hh"
00033
00034
00035 #define prefix_
00036
00037
00038 senf::EUI64 const senf::EUI64::None;
00039
00040 prefix_ senf::EUI64 senf::EUI64::from_string(std::string const & s)
00041 {
00042 EUI64 eui (senf::noinit);
00043 detail::parseHexString(s, ":-", eui.begin(), eui.end());
00044 return eui;
00045 }
00046
00047 prefix_ std::ostream & senf::operator<<(std::ostream & os, EUI64 const & eui)
00048 {
00049 boost::io::ios_all_saver ias(os);
00050 os << std::hex << std::setfill('0') << std::right
00051 << std::setw(2) << unsigned(eui[0]) << ":"
00052 << std::setw(2) << unsigned(eui[1]) << ":"
00053 << std::setw(2) << unsigned(eui[2]) << ":"
00054 << std::setw(2) << unsigned(eui[3]) << "-"
00055 << std::setw(2) << unsigned(eui[4]) << ":"
00056 << std::setw(2) << unsigned(eui[5]) << ":"
00057 << std::setw(2) << unsigned(eui[6]) << ":"
00058 << std::setw(2) << unsigned(eui[7]);
00059 return os;
00060 }
00061
00062 prefix_ std::istream & senf::operator>>(std::istream & is, EUI64 & eui)
00063 {
00064 std::string s;
00065 if (!(is >> s))
00066 return is;
00067 try {
00068 eui = EUI64::from_string(s);
00069 }
00070 catch (AddressException &) {
00071 is.setstate(std::ios::failbit);
00072 }
00073 return is;
00074 }
00075
00076
00077 #undef prefix_
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089