Line data Source code
1 :
2 : /* Copyright (c) 2015, Human Brain Project
3 : * Daniel.Nachbaur@epfl.ch
4 : */
5 :
6 : #ifndef ZEROEQ_URI_H
7 : #define ZEROEQ_URI_H
8 :
9 : #include <zeroeq/api.h>
10 :
11 : #include <servus/uri.h> // base class
12 :
13 : namespace zeroeq
14 : {
15 : /**
16 : * Enhances servus::URI to guarantee the existance of a schema and to allow
17 : * construction of [host][:port] URIs from string.
18 : */
19 : class URI : private servus::URI
20 : {
21 : public:
22 : /** Create a default URI in the form "tcp://" */
23 : ZEROEQ_API URI();
24 :
25 : ZEROEQ_API ~URI();
26 :
27 : ZEROEQ_API URI(const URI& from);
28 :
29 : /** Create URI from string, set schema to "tcp" if empty */
30 : ZEROEQ_API explicit URI(const std::string& uri);
31 :
32 : /** Create URI from string, set schema to "tcp" if empty */
33 : ZEROEQ_API explicit URI(const char* uri);
34 :
35 : /** Convert from servus::URI, set schema to "tcp" if empty */
36 : ZEROEQ_API explicit URI(const servus::URI& from);
37 :
38 : ZEROEQ_API URI& operator=(const URI& rhs);
39 :
40 : /* Convert from servus::URI, set schema to "tcp" if empty */
41 : ZEROEQ_API URI& operator=(const servus::URI& rhs);
42 :
43 : ZEROEQ_API bool operator==(const URI& rhs) const;
44 :
45 : ZEROEQ_API bool operator==(const servus::URI& rhs) const;
46 :
47 : ZEROEQ_API bool operator!=(const URI& rhs) const;
48 :
49 : ZEROEQ_API bool operator!=(const servus::URI& rhs) const;
50 :
51 : /** Convert this URI to a servus::URI */
52 47 : const servus::URI& toServusURI() const { return *this; }
53 :
54 : /** @return true if the host and port are given for a tcp URI. */
55 : ZEROEQ_API bool isFullyQualified() const;
56 :
57 : /** @name servus::URI API */
58 : //@{
59 : using servus::URI::getScheme;
60 : using servus::URI::getHost;
61 : using servus::URI::getPort;
62 : using servus::URI::getPath;
63 : using servus::URI::getQuery;
64 : using servus::URI::setHost;
65 : using servus::URI::setPort;
66 : //@}
67 : };
68 :
69 36 : inline std::ostream& operator<<(std::ostream& os, const URI& uri)
70 : {
71 36 : return os << uri.toServusURI();
72 : }
73 :
74 : } // namespace zeroeq
75 :
76 : namespace std
77 : {
78 11 : inline std::string to_string(const zeroeq::URI& uri)
79 : {
80 11 : return to_string(uri.toServusURI());
81 : }
82 : }
83 :
84 : #endif
|