interface_stream.h
1//-*-C++-*-
2/***************************************************************************
3 *
4 * Copyright (C) 2012 by Willem van Straten
5 * Licensed under the Academic Free License version 2.1
6 *
7 ***************************************************************************/
8
9// psrchive/Util/units/interface_stream.h
10
11#ifndef __interface_stream_h
12#define __interface_stream_h
13
15
17template<class T>
18std::ostream& interface_insertion (std::ostream& ostr, const T* e) try
19{
20 if (!e)
21 return ostr;
22
24 = const_cast<T*>(e)->get_interface();
25
26 ostr << interface->get_interface_name ();
27
28 if (interface->get_nvalue() == 0)
29 return ostr;
30
31 ostr << ":{";
32
33 for (unsigned i=0; i<interface->get_nvalue(); i++)
34 {
35 if (i > 0)
36 ostr << ",";
37
38 ostr << interface->get_name(i) << "=" << interface->get_value(i);
39 }
40
41 return ostr << "}";
42}
43catch (Error& error)
44{
45 ostr.setstate (std::ios::failbit);
46 return ostr;
47}
48
49template<class T>
50std::ostream&
51interface_insertion (std::ostream& ostr, const Reference::To<T>& e)
52{
53 return interface_insertion (ostr, e.get());
54}
55
57
59
60template<typename T>
61std::istream& interface_extraction (std::istream& istr, T* &e) try
62{
63 std::string parse;
64 istr >> parse;
65
66 e = T::factory (parse);
67 return istr;
68}
69catch (Error& error)
70{
71 if (error.get_code() == HelpMessage)
72 {
73 // std::cerr << "interface_extraction throw HelpMessage" << std::endl;
74 throw error;
75 }
76
77 istr.setstate (std::ios::failbit);
78 return istr;
79}
80
81template<typename T>
82std::istream& interface_extraction (std::istream& istr, Reference::To<T>& e)
83{
84 T* ptr = 0;
85 interface_extraction (istr, ptr);
86 e = ptr;
87 return istr;
88}
89
90//
91//
92//
93
94namespace Reference
95{
96 template<typename T>
97 std::ostream& operator<< (std::ostream& ostr, const To<T>& e)
98 {
99 return interface_insertion (ostr, e);
100 }
101
102 template<typename T>
103 std::istream& operator >> (std::istream& istr, To<T>& e)
104 {
105 return interface_extraction (istr, e);
106 }
107}
108
109#endif
A convenient exception handling class.
Definition Error.h:54
ErrorCode get_code() const
Get the error code.
Definition Error.h:92
Template class manages Reference::Able objects.
Definition ReferenceTo.h:25
Type * get() const
Return the pointer.
Definition ReferenceTo.h:251
Contains two basic classes that simplify dynamic memory management.
Definition HeapTracked.h:17

Generated using doxygen 1.14.0