00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00026 #include "vector_util.hpp"
00027 #include <iostream>
00028 #include <string.h>
00029 #include <stdio.h>
00030 
00031 
00032 namespace std {
00033   
00034   ostream & operator << (ostream & os, vector<double> const & rhs)
00035   {
00036     if ( ! rhs.empty()) {    
00037       static int const buflen(32);
00038       char buf[buflen];
00039       memset(buf, 0, sizeof(buf));
00040       for (vector<double>::const_iterator ii(rhs.begin()); ii != rhs.end(); ++ii) {
00041 
00042 #ifndef WIN32
00043 
00044   if (isinf(*ii)) {
00045     snprintf(buf, buflen-1, " inf    ");
00046   }
00047   else if (isnan(*ii)) {
00048     snprintf(buf, buflen-1, " nan    ");
00049   }
00050   else if (fabs(fmod(*ii, 1)) < 1e-6) {
00051     snprintf(buf, buflen-1, "%- 7d  ", static_cast<int>(rint(*ii)));
00052   }
00053   else {
00054     snprintf(buf, buflen-1, "% 6.4f  ", *ii);
00055   }
00056 
00057 #else
00058 
00059   sprintf_s(buf, buflen-1, "% 6.4f  ", *ii);
00060 
00061 #endif // WIN32
00062 
00063   os << buf;
00064       }
00065     }
00066     return os;
00067   }
00068   
00069 }