tlds
Transactional Operations for Linked Data Structures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
stm::ByteLoggingUndoLogEntry Struct Reference

#include <UndoLog.hpp>

Collaboration diagram for stm::ByteLoggingUndoLogEntry:

Public Member Functions

 ByteLoggingUndoLogEntry (void **paddr, void *pval, uintptr_t pmask)
 
void undo () const
 
bool filter (void **lower, void **upper)
 

Static Public Member Functions

static void DoMaskedWrite (void **addr, void *val, uintptr_t mask)
 

Public Attributes

union {
   void **   addr
 
   uint8_t *   byte_addr
 
}; 
 
union {
   void *   val
 
   uint8_t   byte_val [sizeof(void *)]
 
}; 
 
union {
   uintptr_t   mask
 
   uint8_t   byte_mask [sizeof(uintptr_t)]
 
}; 
 

Private Member Functions

bool filterSlow (void **, void **)
 

Constructor & Destructor Documentation

stm::ByteLoggingUndoLogEntry::ByteLoggingUndoLogEntry ( void **  paddr,
void *  pval,
uintptr_t  pmask 
)
inline

Member Function Documentation

static void stm::ByteLoggingUndoLogEntry::DoMaskedWrite ( void **  addr,
void *  val,
uintptr_t  mask 
)
inlinestatic

Here is the caller graph for this function:

bool stm::ByteLoggingUndoLogEntry::filter ( void **  lower,
void **  upper 
)
inline

The bytelog implementation of the filter operation support any sort of intersection possible.

Here is the call graph for this function:

bool stm::ByteLoggingUndoLogEntry::filterSlow ( void **  lower,
void **  upper 
)
private

We outline the slowpath filter. If this /ever/ happens it will be such a corner case that it just doesn't matter. Plus this is an abort path anyway.

We outline the slowpath filter. If this /ever/ happens it will be such a corner case that it just doesn't matter. Plus this is an abort path anyway... consider it a contention management technique.

Here is the caller graph for this function:

void stm::ByteLoggingUndoLogEntry::undo ( ) const
inline

Here is the call graph for this function:

Member Data Documentation

union { ... }
union { ... }
union { ... }
void** stm::ByteLoggingUndoLogEntry::addr
uint8_t* stm::ByteLoggingUndoLogEntry::byte_addr
uint8_t stm::ByteLoggingUndoLogEntry::byte_mask[sizeof(uintptr_t)]
uint8_t stm::ByteLoggingUndoLogEntry::byte_val[sizeof(void *)]
uintptr_t stm::ByteLoggingUndoLogEntry::mask
void* stm::ByteLoggingUndoLogEntry::val

The documentation for this struct was generated from the following files: