1
0
Fork 0

Merge branch 'mjmh' of https://github.com/triAGENS/ArangoDB into mjmh

This commit is contained in:
Jan Steemann 2014-05-22 10:58:14 +02:00
commit 045ed83270
2 changed files with 58 additions and 36 deletions

View File

@ -126,23 +126,6 @@ struct TRI_json_s;
#define TRI_BROADCAST_JOURNAL_ENTRIES_DOC_COLLECTION(a) \
TRI_BroadcastCondition(&(a)->_journalsCondition)
////////////////////////////////////////////////////////////////////////////////
/// @brief extracts the shape identifier pointer from a marker
////////////////////////////////////////////////////////////////////////////////
#define TRI_EXTRACT_SHAPE_IDENTIFIER_MARKER(dst, src) \
do { \
if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_DOCUMENT) { \
(dst) = ((TRI_doc_document_key_marker_t*) (src))->_shape; \
} \
else if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_EDGE) { \
(dst) = ((TRI_doc_edge_key_marker_t*) (src))->base._shape; \
} \
else { \
(dst) = 0; \
} \
} while (0)
////////////////////////////////////////////////////////////////////////////////
/// @}
////////////////////////////////////////////////////////////////////////////////

View File

@ -156,36 +156,75 @@ int TRI_CompareShapeTypes (TRI_doc_mptr_t* leftDocument,
TRI_shaper_t* leftShaper,
TRI_shaper_t* rightShaper);
////////////////////////////////////////////////////////////////////////////////
/// @brief extracts the shape identifier pointer from a marker
////////////////////////////////////////////////////////////////////////////////
static inline void TRI_EXTRACT_SHAPE_IDENTIFIER_MARKER(
TRI_shape_sid_t& dst, void const* src) {
if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_DOC_MARKER_KEY_DOCUMENT) {
dst = static_cast<TRI_doc_document_key_marker_t const*>(src)->_shape;
}
else if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_DOC_MARKER_KEY_EDGE) {
dst = static_cast<TRI_doc_edge_key_marker_t const*>(src)->base._shape;
}
if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_WAL_MARKER_DOCUMENT) {
dst = static_cast<triagens::wal::document_marker_t const*>(src)->_shape;
}
else if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_WAL_MARKER_EDGE) {
dst = static_cast<triagens::wal::edge_marker_t const*>(src)->_shape;
}
else {
dst = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief extracts the shaped JSON pointer from a marker
////////////////////////////////////////////////////////////////////////////////
static inline void TRI_EXTRACT_SHAPED_JSON_MARKER (TRI_shaped_json_t& dst,
void const* src) {
if (((TRI_df_marker_t const*) (src))->_type == TRI_DOC_MARKER_KEY_DOCUMENT) {
(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.data = (((char*) (src)) + ((TRI_doc_document_key_marker_t*) (src))->_offsetJson);
if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_DOC_MARKER_KEY_DOCUMENT) {
dst._sid = static_cast<TRI_doc_document_key_marker_t const*>(src)->_shape;
dst._data.length = static_cast<TRI_df_marker_t const*>(src)->_size
- static_cast<TRI_doc_document_key_marker_t const*>(src)->_offsetJson;
dst._data.data = const_cast<char*>(static_cast<char const*>(src))
+ static_cast<TRI_doc_document_key_marker_t const*>(src)->_offsetJson;
}
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)._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);
else if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_DOC_MARKER_KEY_EDGE) {
dst._sid = static_cast<TRI_doc_document_key_marker_t const*>(src)->_shape;
dst._data.length = static_cast<TRI_df_marker_t const*>(src)->_size
- static_cast<TRI_doc_document_key_marker_t const*>(src)->_offsetJson;
dst._data.data = const_cast<char*>(static_cast<char const*>(src))
+ static_cast<TRI_doc_document_key_marker_t const*>(src)->_offsetJson;
}
else if (((TRI_df_marker_t const*) (src))->_type == TRI_WAL_MARKER_DOCUMENT) {
(dst)._sid = ((triagens::wal::document_marker_t*) (src))->_shape;
(dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((triagens::wal::document_marker_t*) (src))->_offsetJson;
(dst)._data.data = (((char*) (src)) + ((triagens::wal::document_marker_t*) (src))->_offsetJson);
else if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_WAL_MARKER_DOCUMENT) {
dst._sid = static_cast<triagens::wal::document_marker_t const*>(src)->_shape;
dst._data.length = static_cast<TRI_df_marker_t const*>(src)->_size
- static_cast<triagens::wal::document_marker_t const*>(src)->_offsetJson;
dst._data.data = const_cast<char*>(static_cast<char const*>(src))
+ static_cast<triagens::wal::document_marker_t const*>(src)->_offsetJson;
}
else if (((TRI_df_marker_t const*) (src))->_type == TRI_WAL_MARKER_EDGE) {
(dst)._sid = ((triagens::wal::edge_marker_t*) (src))->_shape;
(dst)._data.length = ((TRI_df_marker_t*) (src))->_size - ((triagens::wal::edge_marker_t*) (src))->_offsetJson;
(dst)._data.data = (((char*) (src)) + ((triagens::wal::edge_marker_t*) (src))->_offsetJson);
else if (static_cast<TRI_df_marker_t const*>(src)->_type ==
TRI_WAL_MARKER_EDGE) {
dst._sid = static_cast<triagens::wal::edge_marker_t const*>(src)->_shape;
dst._data.length = static_cast<TRI_df_marker_t const*>(src)->_size
- static_cast<triagens::wal::edge_marker_t const*>(src)->_offsetJson;
dst._data.data = const_cast<char*>(static_cast<char const*>(src))
+ static_cast<triagens::wal::edge_marker_t const*>(src)->_offsetJson;
}
else {
(dst)._sid = 0;
(dst)._data.length = 0;
(dst)._data.data = NULL;
dst._sid = 0;
dst._data.length = 0;
dst._data.data = nullptr;
}
}