Skip to content

Commit 50f49a7

Browse files
committed
std'ification of <thread> and internal API changes
This change should get the message implementations to a state where it should be buildling.
1 parent fdc7d28 commit 50f49a7

File tree

6 files changed

+26
-45
lines changed

6 files changed

+26
-45
lines changed

include/network/protocol/http/request/request.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ namespace network { namespace http {
2525
request(request const &);
2626
request& operator=(request);
2727

28+
// Then we lift the swap and equals implementation.
29+
using request_base::swap;
30+
using request_base::equals;
31+
2832
// From message_base...
2933
// Mutators
3034
virtual void set_destination(std::string const & destination);

include/network/protocol/http/request/request.ipp

+4-24
Original file line numberDiff line numberDiff line change
@@ -184,16 +184,6 @@ request& request::operator=(request rhs) {
184184
return *this;
185185
}
186186

187-
bool request::equals(request const &other) const {
188-
return pimpl_->equals(*other.pimpl_) &&
189-
request_storage_base::equals(other);
190-
}
191-
192-
void request::swap(request & other) {
193-
std::swap(this->pimpl_, other.pimpl_);
194-
request_storage_base::swap(other);
195-
}
196-
197187
// From message_base...
198188
// Mutators
199189
void request::set_destination(std::string const & destination) {
@@ -249,15 +239,11 @@ void request::get_body(std::string & body) const {
249239
this->flatten(body);
250240
}
251241

252-
void request::get_body(std::function<void(boost::iterator_range<char const *>)> chunk_reader, size_t size) const {
253-
boost::scoped_array<char> local_buffer(new (std::nothrow) char[size]);
254-
size_t bytes_read = this->read(local_buffer.get(),
255-
pimpl_->read_offset(),
256-
size);
242+
void request::get_body(std::function<void(std::string::const_iterator, size_t)> chunk_reader, size_t size) const {
243+
std::string local_buffer;
244+
size_t bytes_read = this->read(local_buffer, pimpl_->read_offset(), size);
257245
pimpl_->advance_read_offset(bytes_read);
258-
char const * begin = local_buffer.get();
259-
char const * end = local_buffer.get() + bytes_read;
260-
chunk_reader(boost::make_iterator_range(begin, end));
246+
chunk_reader(local_buffer.cbegin(), bytes_read);
261247
}
262248

263249
// From request_base...
@@ -316,12 +302,6 @@ void request::get_status(std::string & status) const {
316302
void request::get_status_message(std::string & status_message) const {
317303
}
318304

319-
void request::get_body(std::function<void(char*, size_t)> chunk_reader) const {
320-
}
321-
322-
void request::get_body(std::string const & body) const {
323-
}
324-
325305
} // namespace http
326306

327307
} // namespace network

include/network/protocol/http/request/request_base.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
namespace network { namespace http {
1818

1919
struct body_source {
20-
virtual std::streamsize read(char * buffer, std::streamsize size);
20+
virtual std::streamsize read(std::string&, std::streamsize size);
2121
virtual ~body_source();
2222
};
2323

@@ -28,7 +28,7 @@ struct request_storage_base {
2828
request_storage_base(size_t chunk_size = NETWORK_BUFFER_CHUNK);
2929
request_storage_base(request_storage_base const &other);
3030
virtual void append(char const *data, size_t size);
31-
virtual size_t read(char *destination, size_t offset, size_t size) const;
31+
virtual size_t read(std::string &destination, size_t offset, size_t size) const;
3232
virtual void flatten(std::string &destination) const;
3333
virtual void clear();
3434
virtual bool equals(request_storage_base const &other) const;

include/network/protocol/http/request/request_base.ipp

+14-16
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#define NETWORK_RPTOCOL_HTTP_REQUEST_BASE_IPP_20111102
99

1010
#include <network/protocol/http/request/request_base.hpp>
11-
#include <boost/thread/mutex.hpp>
11+
#include <thread>
1212
#include <cstring>
1313

1414
namespace network { namespace http {
@@ -21,7 +21,7 @@ struct request_storage_base_pimpl {
2121
explicit request_storage_base_pimpl(size_t chunk_size);
2222
request_storage_base_pimpl *clone() const;
2323
void append(char const *data, size_t size);
24-
size_t read(char *destination, size_t offset, size_t size) const;
24+
size_t read(std::string &destination, size_t offset, size_t size) const;
2525
void flatten(std::string &destination) const;
2626
void clear();
2727
bool equals(request_storage_base_pimpl const &other) const;
@@ -32,7 +32,7 @@ struct request_storage_base_pimpl {
3232
size_t chunk_size_;
3333
typedef std::vector<std::pair<char *, size_t> > chunks_vector;
3434
chunks_vector chunks_;
35-
mutable boost::mutex chunk_mutex_;
35+
mutable std::mutex chunk_mutex_;
3636

3737
request_storage_base_pimpl(request_storage_base_pimpl const &other);
3838
};
@@ -53,7 +53,7 @@ void request_storage_base::append(char const *data, size_t size) {
5353
pimpl_->append(data, size);
5454
}
5555

56-
size_t request_storage_base::read(char *destination, size_t offset, size_t size) const {
56+
size_t request_storage_base::read(std::string &destination, size_t offset, size_t size) const {
5757
return pimpl_->read(destination, offset, size);
5858
}
5959

@@ -83,7 +83,7 @@ request_storage_base_pimpl::request_storage_base_pimpl(size_t chunk_size)
8383
request_storage_base_pimpl::request_storage_base_pimpl(request_storage_base_pimpl const &other)
8484
: chunk_size_(other.chunk_size_)
8585
, chunks_(0) {
86-
boost::lock_guard<boost::mutex> scoped_lock(other.chunk_mutex_);
86+
std::lock_guard<std::mutex> scoped_lock(other.chunk_mutex_);
8787
chunks_.reserve(other.chunks_.size());
8888
chunks_vector::const_iterator it = other.chunks_.begin();
8989
for (; it != other.chunks_.end(); ++it) {
@@ -101,7 +101,7 @@ request_storage_base_pimpl * request_storage_base_pimpl::clone() const {
101101
}
102102

103103
void request_storage_base_pimpl::append(char const *data, size_t size) {
104-
boost::lock_guard<boost::mutex> scoped_lock(chunk_mutex_);
104+
std::lock_guard<std::mutex> scoped_lock(chunk_mutex_);
105105
if (chunks_.empty()) {
106106
chunks_.push_back(std::make_pair(
107107
new (std::nothrow) char[chunk_size_], 0));
@@ -127,23 +127,21 @@ void request_storage_base_pimpl::append(char const *data, size_t size) {
127127
}
128128
}
129129

130-
size_t request_storage_base_pimpl::read(char *destination, size_t offset, size_t size) const {
131-
boost::lock_guard<boost::mutex> scoped_lock(chunk_mutex_);
130+
size_t request_storage_base_pimpl::read(std::string &destination, size_t offset, size_t size) const {
131+
std::lock_guard<std::mutex> scoped_lock(chunk_mutex_);
132132
if (chunks_.empty()) return 0;
133133
// First we find which chunk we're going to read from using the provided
134134
// offset and some arithmetic to determine the correct one.
135135
size_t chunk_index = offset / chunk_size_;
136136
offset = offset % chunk_size_;
137137

138138
// Then we start copying up to size data either until we've reached the end
139-
// or we're
140139
size_t chunks_count = chunks_.size();
141140
size_t read_count = 0;
142141
while (size > 0 && chunk_index < chunks_count) {
143142
size_t bytes_to_read = std::min(chunks_[chunk_index].second, size);
144-
std::memcpy(destination + read_count,
145-
chunks_[chunk_index].first + offset,
146-
bytes_to_read);
143+
destination.append(chunks_[chunk_index].first+offset,
144+
chunks_[chunk_index].first+offset+bytes_to_read);
147145
read_count += bytes_to_read;
148146
size -= bytes_to_read;
149147
offset = 0;
@@ -153,15 +151,15 @@ size_t request_storage_base_pimpl::read(char *destination, size_t offset, size_t
153151
}
154152

155153
void request_storage_base_pimpl::flatten(std::string &destination) const {
156-
boost::lock_guard<boost::mutex> scpoped_lock(chunk_mutex_);
154+
std::lock_guard<std::mutex> scpoped_lock(chunk_mutex_);
157155
chunks_vector::const_iterator chunk_iterator = chunks_.begin();
158156
for (; chunk_iterator != chunks_.end(); ++chunk_iterator) {
159157
destination.append(chunk_iterator->first, chunk_iterator->second);
160158
}
161159
}
162160

163161
void request_storage_base_pimpl::clear() {
164-
boost::lock_guard<boost::mutex> scoped_lock(chunk_mutex_);
162+
std::lock_guard<std::mutex> scoped_lock(chunk_mutex_);
165163
chunks_vector::const_iterator chunk_iterator = chunks_.begin();
166164
for (; chunk_iterator != chunks_.end(); ++chunk_iterator) {
167165
delete [] chunk_iterator->first;
@@ -170,7 +168,7 @@ void request_storage_base_pimpl::clear() {
170168
}
171169

172170
bool request_storage_base_pimpl::equals(request_storage_base_pimpl const &other) const {
173-
lock(other.chunk_mutex_, this->chunk_mutex_);
171+
std::lock(other.chunk_mutex_, this->chunk_mutex_);
174172
if (other.chunk_size_ != chunk_size_ || other.chunks_.size() != chunks_.size()) {
175173
other.chunk_mutex_.unlock();
176174
this->chunk_mutex_.unlock();
@@ -193,7 +191,7 @@ bool request_storage_base_pimpl::equals(request_storage_base_pimpl const &other)
193191
}
194192

195193
void request_storage_base_pimpl::swap(request_storage_base_pimpl &other) {
196-
lock(other.chunk_mutex_, this->chunk_mutex_);
194+
std::lock(other.chunk_mutex_, this->chunk_mutex_);
197195
std::swap(chunk_size_, other.chunk_size_);
198196
std::swap(chunks_, other.chunks_);
199197
other.chunk_mutex_.unlock();

include/network/protocol/http/response/response.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ namespace network { namespace http {
8686
Directive const & directive
8787
)
8888
{
89-
>>>>>>> master
9089
directive(message);
9190
return message;
9291
}

include/network/protocol/http/response/response.ipp

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ struct response_pimpl {
115115
}
116116

117117
void get_body(
118-
std::function<void(boost::iterator_range<char const *>)> chunk_reader,
118+
std::function<void(std::string::const_iterator, size_t)> chunk_reader,
119119
size_t size) { /* FIXME: Do something! */ }
120120

121121
void set_status(boost::uint16_t status) {
@@ -369,7 +369,7 @@ void response::get_body(std::string &body) const {
369369
pimpl_->get_body(body);
370370
}
371371

372-
void response::get_body(std::function<void(boost::iterator_range<char const *>)> chunk_reader, size_t size) const {
372+
void response::get_body(std::function<void(std::string::const_iterator, size_t)> chunk_reader, size_t size) const {
373373
pimpl_->get_body(chunk_reader, size);
374374
}
375375

0 commit comments

Comments
 (0)