8
8
#define NETWORK_RPTOCOL_HTTP_REQUEST_BASE_IPP_20111102
9
9
10
10
#include < network/protocol/http/request/request_base.hpp>
11
- #include < boost/ thread/mutex.hpp >
11
+ #include < thread>
12
12
#include < cstring>
13
13
14
14
namespace network { namespace http {
@@ -21,7 +21,7 @@ struct request_storage_base_pimpl {
21
21
explicit request_storage_base_pimpl (size_t chunk_size);
22
22
request_storage_base_pimpl *clone () const ;
23
23
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 ;
25
25
void flatten (std::string &destination) const ;
26
26
void clear ();
27
27
bool equals (request_storage_base_pimpl const &other) const ;
@@ -32,7 +32,7 @@ struct request_storage_base_pimpl {
32
32
size_t chunk_size_;
33
33
typedef std::vector<std::pair<char *, size_t > > chunks_vector;
34
34
chunks_vector chunks_;
35
- mutable boost ::mutex chunk_mutex_;
35
+ mutable std ::mutex chunk_mutex_;
36
36
37
37
request_storage_base_pimpl (request_storage_base_pimpl const &other);
38
38
};
@@ -53,7 +53,7 @@ void request_storage_base::append(char const *data, size_t size) {
53
53
pimpl_->append (data, size);
54
54
}
55
55
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 {
57
57
return pimpl_->read (destination, offset, size);
58
58
}
59
59
@@ -83,7 +83,7 @@ request_storage_base_pimpl::request_storage_base_pimpl(size_t chunk_size)
83
83
request_storage_base_pimpl::request_storage_base_pimpl (request_storage_base_pimpl const &other)
84
84
: chunk_size_(other.chunk_size_)
85
85
, chunks_(0 ) {
86
- boost ::lock_guard<boost ::mutex> scoped_lock (other.chunk_mutex_ );
86
+ std ::lock_guard<std ::mutex> scoped_lock (other.chunk_mutex_ );
87
87
chunks_.reserve (other.chunks_ .size ());
88
88
chunks_vector::const_iterator it = other.chunks_ .begin ();
89
89
for (; it != other.chunks_ .end (); ++it) {
@@ -101,7 +101,7 @@ request_storage_base_pimpl * request_storage_base_pimpl::clone() const {
101
101
}
102
102
103
103
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_);
105
105
if (chunks_.empty ()) {
106
106
chunks_.push_back (std::make_pair (
107
107
new (std::nothrow) char [chunk_size_], 0 ));
@@ -127,23 +127,21 @@ void request_storage_base_pimpl::append(char const *data, size_t size) {
127
127
}
128
128
}
129
129
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_);
132
132
if (chunks_.empty ()) return 0 ;
133
133
// First we find which chunk we're going to read from using the provided
134
134
// offset and some arithmetic to determine the correct one.
135
135
size_t chunk_index = offset / chunk_size_;
136
136
offset = offset % chunk_size_;
137
137
138
138
// Then we start copying up to size data either until we've reached the end
139
- // or we're
140
139
size_t chunks_count = chunks_.size ();
141
140
size_t read_count = 0 ;
142
141
while (size > 0 && chunk_index < chunks_count) {
143
142
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);
147
145
read_count += bytes_to_read;
148
146
size -= bytes_to_read;
149
147
offset = 0 ;
@@ -153,15 +151,15 @@ size_t request_storage_base_pimpl::read(char *destination, size_t offset, size_t
153
151
}
154
152
155
153
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_);
157
155
chunks_vector::const_iterator chunk_iterator = chunks_.begin ();
158
156
for (; chunk_iterator != chunks_.end (); ++chunk_iterator) {
159
157
destination.append (chunk_iterator->first , chunk_iterator->second );
160
158
}
161
159
}
162
160
163
161
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_);
165
163
chunks_vector::const_iterator chunk_iterator = chunks_.begin ();
166
164
for (; chunk_iterator != chunks_.end (); ++chunk_iterator) {
167
165
delete [] chunk_iterator->first ;
@@ -170,7 +168,7 @@ void request_storage_base_pimpl::clear() {
170
168
}
171
169
172
170
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_ );
174
172
if (other.chunk_size_ != chunk_size_ || other.chunks_ .size () != chunks_.size ()) {
175
173
other.chunk_mutex_ .unlock ();
176
174
this ->chunk_mutex_ .unlock ();
@@ -193,7 +191,7 @@ bool request_storage_base_pimpl::equals(request_storage_base_pimpl const &other)
193
191
}
194
192
195
193
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_ );
197
195
std::swap (chunk_size_, other.chunk_size_ );
198
196
std::swap (chunks_, other.chunks_ );
199
197
other.chunk_mutex_ .unlock ();
0 commit comments