1
0
Fork 0

Implement TRI_EXTRACT_SHAPED_JSON_MARKER as static inline.

Also consider WAL.
This commit is contained in:
Max Neunhoeffer 2014-05-21 08:59:03 +02:00
parent 2cdcd24a59
commit fdba62a957
1 changed files with 29 additions and 18 deletions

View File

@ -34,6 +34,7 @@
#include "VocBase/headers.h" #include "VocBase/headers.h"
#include "VocBase/index.h" #include "VocBase/index.h"
#include "VocBase/voc-types.h" #include "VocBase/voc-types.h"
#include "Wal/Marker.h"
#include <regex.h> #include <regex.h>
@ -149,24 +150,34 @@ struct TRI_json_s;
/// @brief extracts the shaped JSON pointer from a marker /// @brief extracts the shaped JSON pointer from a marker
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define TRI_EXTRACT_SHAPED_JSON_MARKER(dst, src) \ static inline void TRI_EXTRACT_SHAPED_JSON_MARKER (TRI_shaped_json_t& dst,
do { \ void const* src) {
if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_DOCUMENT) { \ if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_DOCUMENT) {
(dst)._sid = ((TRI_doc_document_key_marker_t*) (src))->_shape; \ (dst)._sid = ((TRI_doc_document_key_marker_t*) (src))->_shape;
(dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((TRI_doc_document_key_marker_t*) (src))->_offsetJson; \ (dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((TRI_doc_document_key_marker_t*) (src))->_offsetJson;
(dst)._data.data = (((char*) (src)) + ((TRI_doc_document_key_marker_t*) (src))->_offsetJson); \ (dst)._data.data = (((char*) (src)) + ((TRI_doc_document_key_marker_t*) (src))->_offsetJson);
} \ }
else if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_EDGE) { \ else if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_EDGE) {
(dst)._sid = ((TRI_doc_document_key_marker_t*) (src))->_shape; \ (dst)._sid = ((TRI_doc_document_key_marker_t*) (src))->_shape;
(dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((TRI_doc_document_key_marker_t*) (src))->_offsetJson; \ (dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((TRI_doc_document_key_marker_t*) (src))->_offsetJson;
(dst)._data.data = (((char*) (src)) + ((TRI_doc_document_key_marker_t*) (src))->_offsetJson); \ (dst)._data.data = (((char*) (src)) + ((TRI_doc_document_key_marker_t*) (src))->_offsetJson);
} \ }
else { \ else if (((TRI_df_marker_t const*) (src))->_type == TRI_WAL_MARKER_DOCUMENT) {
(dst)._sid = 0; \ (dst)._sid = ((triagens::wal::document_marker_t*) (src))->_shape;
(dst)._data.length = 0; \ (dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((triagens::wal::document_marker_t*) (src))->_offsetJson;
(dst)._data.data = NULL; \ (dst)._data.data = (((char*) (src)) + ((triagens::wal::document_marker_t*) (src))->_offsetJson);
} \ }
} while (0) else if (((TRI_df_marker_t const*) (src))->_type == TRI_WAL_MARKER_EDGE) {
(dst)._sid = ((triagens::wal::edge_marker_t*) (src))->base._shape;
(dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((triagens::wal::edge_marker_t*) (src))->base._offsetJson;
(dst)._data.data = (((char*) (src)) + ((triagens::wal::edge_marker_t*) (src))->base._offsetJson);
}
else {
(dst)._sid = 0;
(dst)._data.length = 0;
(dst)._data.data = NULL;
}
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @} /// @}