diff options
author | Jason Carey <hanumantmk@gmail.com> | 2014-08-11 10:36:30 -0400 |
---|---|---|
committer | Jason Carey <hanumantmk@gmail.com> | 2014-08-12 10:18:42 -0400 |
commit | dc9e090dba1f17467520eca13571512c621d503f (patch) | |
tree | 575799136ac83833680036491ae972e02bdb83fe /src/mongo/db/dbmessage.cpp | |
parent | 8d0bf7dfbfafd09b9465feec3651cdd31aeb0dcc (diff) | |
download | mongo-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.cpp | 58 |
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 } } |