view: move ostream operator into header
This commit is contained in:
parent
dc51fa2ed0
commit
a67069a333
32
view.cpp
32
view.cpp
@ -11,37 +11,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*
|
*
|
||||||
* Copyright 2016-2017 Danny Robson <danny@nerdcruft.net>
|
* Copyright 2017 Danny Robson <danny@nerdcruft.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "view.hpp"
|
#include "view.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <iterator>
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
namespace util {
|
|
||||||
#define OSTREAM(A) \
|
|
||||||
template <> \
|
|
||||||
std::ostream& \
|
|
||||||
operator<< (std::ostream &os, view<A> a) { \
|
|
||||||
std::copy (a.cbegin (), \
|
|
||||||
std::find (a.cbegin (), a.cend (), '\0'), \
|
|
||||||
std::ostream_iterator<decltype(a)::value_type> (os)); \
|
|
||||||
\
|
|
||||||
return os; \
|
|
||||||
}
|
|
||||||
|
|
||||||
OSTREAM(const char*)
|
|
||||||
OSTREAM(char*)
|
|
||||||
OSTREAM( signed char*)
|
|
||||||
OSTREAM(unsigned char*)
|
|
||||||
OSTREAM(const signed char*)
|
|
||||||
OSTREAM(const unsigned char*)
|
|
||||||
OSTREAM(std::string::const_iterator)
|
|
||||||
OSTREAM(std::string::iterator)
|
|
||||||
|
|
||||||
#undef OSTREAM
|
|
||||||
}
|
|
||||||
|
|
||||||
|
20
view.hpp
20
view.hpp
@ -27,6 +27,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
namespace util {
|
namespace util {
|
||||||
template <typename IteratorA, typename IteratorB = IteratorA>
|
template <typename IteratorA, typename IteratorB = IteratorA>
|
||||||
@ -356,6 +357,21 @@ namespace util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename IteratorT>
|
||||||
|
std::ostream&
|
||||||
|
operator<< (std::ostream &os, view<IteratorT> val)
|
||||||
|
{
|
||||||
|
std::copy (
|
||||||
|
std::cbegin (val),
|
||||||
|
std::cend (val),
|
||||||
|
std::ostream_iterator<typename decltype(val)::value_type> (os)
|
||||||
|
);
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
/// a basic stringlike comparison operator that behaves as
|
/// a basic stringlike comparison operator that behaves as
|
||||||
/// std::string::compare would.
|
/// std::string::compare would.
|
||||||
@ -378,10 +394,6 @@ namespace util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename IteratorT>
|
|
||||||
std::ostream&
|
|
||||||
operator<< (std::ostream&, view<IteratorT>);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user