Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/shared/Communication.h

Issue 11013110: Cleanup (Closed)
Patch Set: SetPref/GetPref type safety. Comments addressed. Created July 22, 2013, 12:42 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 #ifndef COMMUNICATION_H 1 #ifndef COMMUNICATION_H
2 #define COMMUNICATION_H 2 #define COMMUNICATION_H
3 3
4 #include <memory> 4 #include <memory>
5 #include <sstream> 5 #include <sstream>
6 #include <stdexcept> 6 #include <stdexcept>
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 #include <Windows.h> 10 #include <Windows.h>
(...skipping 18 matching lines...) Expand all
29 }; 29 };
30 enum ValueType : uint32_t { 30 enum ValueType : uint32_t {
31 TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL 31 TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL
32 }; 32 };
33 typedef uint32_t SizeType; 33 typedef uint32_t SizeType;
34 34
35 class InputBuffer 35 class InputBuffer
36 { 36 {
37 public: 37 public:
38 InputBuffer(const std::string& data) : buffer(data), hasType(false) {} 38 InputBuffer(const std::string& data) : buffer(data), hasType(false) {}
39 InputBuffer(const InputBuffer& copy) { hasType = copy.hasType; buffer = std: :istringstream(copy.buffer.str()); currentType = copy.currentType; }
39 InputBuffer& operator>>(ProcType& value) { return Read(value, TYPE_PROC); } 40 InputBuffer& operator>>(ProcType& value) { return Read(value, TYPE_PROC); }
40 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_ STRING); } 41 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_ STRING); }
41 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE _WSTRING); } 42 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE _WSTRING); }
42 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } 43 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); }
43 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } 44 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); }
44 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } 45 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); }
46 ValueType GetType();
47 bool IsEmpty() { return buffer.eof(); }
Wladimir Palant 2013/07/22 06:43:11 This is just wrong :-( eof() doesn't mean that the
Oleksandr 2013/07/22 09:53:31 I guess the name was just wrong. Should've been Is
45 private: 48 private:
46 std::istringstream buffer; 49 std::istringstream buffer;
47 ValueType currentType; 50 ValueType currentType;
48 bool hasType; 51 bool hasType;
49 52
50 void CheckType(ValueType expectedType); 53 void CheckType(ValueType expectedType);
51 54
52 template<class T> 55 template<class T>
53 InputBuffer& ReadString(T& value, ValueType expectedType) 56 InputBuffer& ReadString(T& value, ValueType expectedType)
54 { 57 {
(...skipping 18 matching lines...) Expand all
73 ReadBinary(value); 76 ReadBinary(value);
74 return *this; 77 return *this;
75 } 78 }
76 79
77 template<class T> 80 template<class T>
78 void ReadBinary(T& value) 81 void ReadBinary(T& value)
79 { 82 {
80 buffer.read(reinterpret_cast<char*>(&value), sizeof(T)); 83 buffer.read(reinterpret_cast<char*>(&value), sizeof(T));
81 if (buffer.fail()) 84 if (buffer.fail())
82 throw new std::runtime_error("Unexpected end of input buffer"); 85 throw new std::runtime_error("Unexpected end of input buffer");
86 hasType = false;
83 } 87 }
84 }; 88 };
85 89
86 class OutputBuffer 90 class OutputBuffer
87 { 91 {
88 public: 92 public:
89 OutputBuffer() {} 93 OutputBuffer() {}
90 94
91 // Explicit copy constructor to allow returning OutputBuffer by value 95 // Explicit copy constructor to allow returning OutputBuffer by value
92 OutputBuffer(const OutputBuffer& copy) : buffer(copy.buffer.str()) {} 96 OutputBuffer(const OutputBuffer& copy) : buffer(copy.buffer.str()) {}
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 165
162 InputBuffer ReadMessage(); 166 InputBuffer ReadMessage();
163 void WriteMessage(OutputBuffer& message); 167 void WriteMessage(OutputBuffer& message);
164 168
165 protected: 169 protected:
166 HANDLE pipe; 170 HANDLE pipe;
167 }; 171 };
168 } 172 }
169 173
170 #endif 174 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld