summaryrefslogtreecommitdiff
path: root/src/mongo/db/dbmessage.cpp
diff options
context:
space:
mode:
authorJason Carey <hanumantmk@gmail.com>2014-08-11 10:36:30 -0400
committerJason Carey <hanumantmk@gmail.com>2014-08-12 10:18:42 -0400
commitdc9e090dba1f17467520eca13571512c621d503f (patch)
tree575799136ac83833680036491ae972e02bdb83fe /src/mongo/db/dbmessage.cpp
parent8d0bf7dfbfafd09b9465feec3651cdd31aeb0dcc (diff)
downloadmongo-dc9e090dba1f17467520eca13571512c621d503f.tar.gz
SERVER-14853 Port networking library to AAE
Use the alignment, aliasing and endian primitives in the networking layer
Diffstat (limited to 'src/mongo/db/dbmessage.cpp')
-rw-r--r--src/mongo/db/dbmessage.cpp58
1 files changed, 29 insertions, 29 deletions
diff --git a/src/mongo/db/dbmessage.cpp b/src/mongo/db/dbmessage.cpp
index a3b06058547..1b0f3ae3a82 100644
--- a/src/mongo/db/dbmessage.cpp
+++ b/src/mongo/db/dbmessage.cpp
@@ -67,8 +67,8 @@ namespace mongo {
DbMessage::DbMessage(const Message& msg) : _msg(msg), _nsStart(NULL), _mark(NULL), _nsLen(0) {
// for received messages, Message has only one buffer
- _theEnd = _msg.singleData()->_data + _msg.singleData()->dataLen();
- _nextjsobj = _msg.singleData()->_data;
+ _theEnd = _msg.singleData().data() + _msg.singleData().dataLen();
+ _nextjsobj = _msg.singleData().data();
_reserved = readAndAdvance<int>();
@@ -77,7 +77,7 @@ namespace mongo {
// Limit = buffer size of message -
// (first int4 in message which is either flags or a zero constant)
- size_t limit = _msg.singleData()->dataLen() - sizeof(int);
+ size_t limit = _msg.singleData().dataLen() - sizeof(int);
_nsStart = _nextjsobj;
_nsLen = strnlen(_nsStart, limit);
@@ -100,20 +100,20 @@ namespace mongo {
const char* p = _nsStart + _nsLen + 1;
checkRead<int>(p, 2);
- return ((reinterpret_cast<const int*>(p)))[1];
+ return ConstDataView(p).readLE<int32_t>(sizeof(int32_t));
}
int DbMessage::pullInt() {
- return readAndAdvance<int>();
+ return readAndAdvance<int32_t>();
}
long long DbMessage::pullInt64() {
- return readAndAdvance<long long>();
+ return readAndAdvance<int64_t>();
}
- const long long* DbMessage::getArray(size_t count) const {
+ const char* DbMessage::getArray(size_t count) const {
checkRead<long long>(_nextjsobj, count);
- return reinterpret_cast<const long long*>(_nextjsobj);
+ return _nextjsobj;
}
BSONObj DbMessage::nextJsObj() {
@@ -158,7 +158,7 @@ namespace mongo {
T DbMessage::read() const {
checkRead<T>(_nextjsobj, 1);
- return *(reinterpret_cast<const T*>(_nextjsobj));
+ return ConstDataView(_nextjsobj).readLE<T>();
}
template<typename T> T DbMessage::readAndAdvance() {
@@ -174,18 +174,18 @@ namespace mongo {
long long cursorId
) {
BufBuilder b(32768);
- b.skip(sizeof(QueryResult));
+ b.skip(sizeof(QueryResult::Value));
b.appendBuf(data, size);
- QueryResult *qr = (QueryResult *) b.buf();
- qr->_resultFlags() = queryResultFlags;
- qr->len = b.len();
- qr->setOperation(opReply);
- qr->cursorId = cursorId;
- qr->startingFrom = startingFrom;
- qr->nReturned = nReturned;
+ QueryResult::View qr = b.buf();
+ qr.setResultFlags(queryResultFlags);
+ qr.msgdata().setLen(b.len());
+ qr.msgdata().setOperation(opReply);
+ qr.setCursorId(cursorId);
+ qr.setStartingFrom(startingFrom);
+ qr.setNReturned(nReturned);
b.decouple();
- Message resp(qr, true);
- p->reply(requestMsg, resp, requestMsg.header()->id);
+ Message resp(qr.view2ptr(), true);
+ p->reply(requestMsg, resp, requestMsg.header().getId());
}
void replyToQuery(int queryResultFlags,
@@ -200,26 +200,26 @@ namespace mongo {
Message *resp = new Message();
replyToQuery( queryResultFlags, *resp, obj );
dbresponse.response = resp;
- dbresponse.responseTo = m.header()->id;
+ dbresponse.responseTo = m.header().getId();
}
void replyToQuery( int queryResultFlags, Message& response, const BSONObj& resultObj ) {
BufBuilder bufBuilder;
- bufBuilder.skip( sizeof( QueryResult ));
+ bufBuilder.skip( sizeof( QueryResult::Value ));
bufBuilder.appendBuf( reinterpret_cast< void *>(
const_cast< char* >( resultObj.objdata() )), resultObj.objsize() );
- QueryResult* queryResult = reinterpret_cast< QueryResult* >( bufBuilder.buf() );
+ QueryResult::View queryResult = bufBuilder.buf();
bufBuilder.decouple();
- queryResult->_resultFlags() = queryResultFlags;
- queryResult->len = bufBuilder.len();
- queryResult->setOperation( opReply );
- queryResult->cursorId = 0;
- queryResult->startingFrom = 0;
- queryResult->nReturned = 1;
+ queryResult.setResultFlags(queryResultFlags);
+ queryResult.msgdata().setLen(bufBuilder.len());
+ queryResult.msgdata().setOperation( opReply );
+ queryResult.setCursorId(0);
+ queryResult.setStartingFrom(0);
+ queryResult.setNReturned(1);
- response.setData( queryResult, true ); // transport will free
+ response.setData( queryResult.view2ptr(), true ); // transport will free
}
}