Go to the documentation of this file. 1 #ifndef _SHARED_VARIABLE_HPP_
2 #define _SHARED_VARIABLE_HPP_ "$Id: shared_variable.hpp 456 2020-07-23 20:25:49Z geoff $"
32 #define SMV_MAGIC_NUMBER "SHMVAR01"
35 #pragma GCC diagnostic push
36 #pragma GCC diagnostic ignored "-Wsuggest-final-types"
93 char *
formatAsText(
char *bfr, uint_fast32_t bfrLen, uint_fast32_t displayMode,
94 const char *pathPrefix=
nullptr,
bool isNative=
true)
const;
97 int getPathPrefix(
char *bfr, uint_fast32_t bfrLen,
unsigned char *base,
bool isNative=
true)
const;
137 if (retNameLen !=
nullptr) {
142 if (retNameLen !=
nullptr) {
159 uint_fast32_t
getFullName(
char *bfr, uint_fast32_t bfrLen)
const;
165 const char *varName,
int varType,
size_t length);
168 const char *varName,
int varType,
size_t length);
183 #pragma GCC diagnostic pop
238 size_t segmentLength);
258 const char *componentName);
275 size_t *segmentLength);
293 size_t result =
reinterpret_cast<const unsigned char *
>(rec) -
370 return (*
reinterpret_cast<const NUMTYPE *
>(
dataPointer));
380 return (
reinterpret_cast<const NUMTYPE *
>(
dataPointer));
385 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) = arg);
390 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) += arg);
395 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) -= arg);
400 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) *= arg);
405 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) /= arg);
410 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) += 1);
414 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) -= 1);
419 NUMTYPE result = *
reinterpret_cast<NUMTYPE *
>(
dataPointer);
425 NUMTYPE result = *
reinterpret_cast<NUMTYPE *
>(
dataPointer);
486 return (*
reinterpret_cast<const NUMTYPE *
>(
dataPointer));
496 return (
reinterpret_cast<const NUMTYPE *
>(
dataPointer));
501 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) = arg);
506 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) += arg);
511 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) -= arg);
516 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) *= arg);
521 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) /= arg);
526 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) += 1);
530 return (*
reinterpret_cast<NUMTYPE *
>(
dataPointer) -= 1);
535 NUMTYPE result = *
reinterpret_cast<NUMTYPE *
>(
dataPointer);
541 NUMTYPE result = *
reinterpret_cast<NUMTYPE *
>(
dataPointer);
548 *
reinterpret_cast<NUMTYPE *
>(newArea) =
587 char *n = (
char *) memccpy(d, val,
'\0', avail);
659 char *n = (
char *) memccpy(d, val,
'\0', avail);
677 char *n = (
char *) memccpy(d,
s,
'\0', avail);
724 #define DECLARE_SMV_COUNTER(name) SMV_Numeric<uint32_t> name(#name)
SharedMemoryVariable::SharedMemoryVariable_Record unallocated_data
Definition: shared_variable.cpp:37
Impose a fixed-size buffer on a BufferRegion.
Definition: circular_bfr.hpp:356
~SharedMemoryVariableManager()
Definition: shared_variable.cpp:329
#define safe_strcpy(d, s, l)
Safe strcpy() routine that will not copy more than l bytes and always ensures that a null is present ...
Definition: compiler_hints.h:696
SMV_StandaloneNumeric(const char *varName, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager, NUMTYPE initVal=0) NONNULL_CLASS_PARAMETERS(2)
Definition: shared_variable.hpp:442
#define MAP_FILE_RESET
Definition: mapped_file.h:68
float f
Definition: shared_variable.hpp:81
#define Maj(x, y, z)
Definition: sha256.cpp:41
const char * getName(uint_fast32_t *retNameLen=nullptr) const OME_ALWAYS_INLINE
Get variable name.
Definition: shared_variable.hpp:135
bool sharedBufferSegmentIsInNativeByteOrder(const void *segment)
Indicates if segment uses native byte order.
Definition: circular_bfr.hpp:90
void allocateDeferredVariables()
Internal routine to allocate previously registered SharedMemoryVariables within a newly allocated seg...
Definition: shared_variable.cpp:390
Ïúíþ ð Ø ˜ ˜ __text __TEXT € __apple_names __DWARF __apple_objc __DWARF __apple_namespac__DWARF H X __apple_types __DWARF l
Definition: tmp3.o.cpp:1
SharedMemoryVariableManager DEFAULT_sharedMemoryVariableManager OME_INIT_PRIORITY(105)(true)
SharedMemoryVariable::SharedMemoryVariable_Record * iterateOver64BitSegment(SharedBufferAllocRecord_64 **iterator)
Definition: shared_variable.cpp:540
int64_t i64
Definition: shared_variable.hpp:78
SMV_StandaloneNode(const char *varName, SharedMemoryVariableNode *parentNode)
Definition: shared_variable.hpp:710
const char s[]
Definition: t.cpp:4
#define Ch(x, y, z)
Definition: sha256.cpp:40
bool registerVariable(SharedMemoryVariable &var)
Register a single variable with the segment manager.
Definition: shared_variable.cpp:600
HIDE_FUNCTION void sha_init(sha_state *md)
Definition: sha256.cpp:90
SharedMemoryVariable::SharedMemoryVariable_Record initialCopy
Definition: shared_variable.hpp:613
bool initialized() const OME_ALWAYS_INLINE
Definition: shared_variable.hpp:298
Allocation record for chains in a 32-bit shared memory buffer.
Definition: circular_bfr.hpp:103
uint32_t usedLength
used length, always <= allocated length
Definition: shared_variable.hpp:87
union SharedMemoryVariable::SharedMemoryVariable_Record::@22 numericValue
NUMTYPE & operator*=(const NUMTYPE arg) OME_ALWAYS_INLINE
Multiplication operator for a numeric shared memory variable.
Definition: shared_variable.hpp:515
OME string implementation.
@ SMV_TYPE_INT64
Definition: shared_variable.hpp:49
virtual ~SharedMemoryVariable()
Definition: shared_variable.cpp:281
union SMV_StandaloneString::@23 space
int main(int argc, const char *argv[])
Definition: s.cpp:18
Convenience template for creating shared memory variables of one of the supported numeric types....
Definition: shared_variable.hpp:436
Convenience class for string variables.
Definition: shared_variable.hpp:556
SharedMemoryVariableNode * getParentNode() const
Definition: shared_variable.hpp:113
Implements text and binary string storage.
Definition: OMEstring.h:305
NUMTYPE & operator/=(const NUMTYPE arg) OME_ALWAYS_INLINE
Division operator for a numeric shared memory variable.
Definition: shared_variable.hpp:520
@ SMV_TYPE_DOUBLE
Definition: shared_variable.hpp:52
uint32_t allocatedLength
allocated length
Definition: shared_variable.hpp:86
double d
Definition: shared_variable.hpp:82
NUMTYPE & operator++() OME_ALWAYS_INLINE
Prefix increment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:525
void registerVariables(int count, SharedMemoryVariable *vars[])
Register an array of variables with the segment manager.
Definition: shared_variable.cpp:621
void initializeSegment(unsigned char *segment, size_t segmentLength, const char *componentName)
Initialize a memory segment for use as variable storage.
Definition: shared_variable.cpp:406
virtual void noteNowRegistered(SharedMemoryVariable_Record *newArea) override
Extension mechanism to allow derived classes to be informed when they are about to be assigned storag...
Definition: shared_variable.hpp:546
HIDE_FUNCTION void sha_process(sha_state *md, const unsigned char *buf, size_t len)
Definition: sha256.cpp:103
#define MAP_FILE_INIT
Definition: mapped_file.h:69
Intermediate naming node for supporting variable naming hierarchies.
Definition: shared_variable.hpp:318
smv_list_t * deferredList
Definition: shared_variable.hpp:197
uint16_t our_swap16(const void *byteData)
Definition: shared_variable.cpp:43
static const char * typeName(unsigned int t) OME_CONST_FUNCTION
Return type as text string.
Definition: shared_variable.cpp:93
NUMTYPE & operator--() OME_ALWAYS_INLINE
Prefix decrement operator for a numeric shared memory variable.
Definition: shared_variable.hpp:413
unsigned char * getBufferBase() const OME_ALWAYS_INLINE
Return the address of the buffer region.
Definition: circular_bfr.hpp:253
uint16_t recordType
type of record, see SharedMemoryVariableType
Definition: shared_variable.hpp:88
class SharedMemoryVariableNode * parentNodeRecord
Definition: shared_variable.hpp:104
SharedMemoryVariable::SharedMemoryVariable_Record * iterateOver32BitSegment(SharedBufferAllocRecord_32 **iterator)
Definition: shared_variable.cpp:514
#define NONNULL_CLASS_PARAMETERS(...)
Mark a function as never returning a null pointer.
Definition: compiler_hints.h:337
@ SMV_TYPE_STRING
Definition: shared_variable.hpp:56
size_t getRegionLength() const OME_ALWAYS_INLINE
Return the number of bytes in the region.
Definition: circular_bfr.hpp:243
void makeAliasFor(SharedMemoryVariable *v)
Definition: shared_variable.hpp:178
SharedMemoryVariable::SharedMemoryVariable_Record initialCopy
Definition: shared_variable.hpp:440
NUMTYPE & operator-=(const NUMTYPE arg) OME_ALWAYS_INLINE
Subtraction operator for a numeric shared memory variable.
Definition: shared_variable.hpp:394
NUMTYPE & operator=(const NUMTYPE arg) OME_ALWAYS_INLINE
Assignment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:500
uint64_t u64
Definition: shared_variable.hpp:77
#define HIDE_FUNCTION
Definition: sha256.cpp:1
unsigned char dataType
Definition: shared_variable.hpp:108
Convenience class for string variables that can be also be used if a shared memory segment is never a...
Definition: shared_variable.hpp:608
int takeDeferredRegistrations(SharedMemoryVariableManager *otherMgr)
Definition: shared_variable.cpp:565
unsigned int getMinLength() const OME_ALWAYS_INLINE
Return minimum number of bytes required for variable record.
Definition: shared_variable.hpp:130
SMV_StandaloneString(const char *varName, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager)
Definition: shared_variable.hpp:617
char tinyString[8]
Definition: shared_variable.hpp:83
#define S(x, n)
Definition: sha256.cpp:42
HIDE_FUNCTION void sha_done(sha_state *md, unsigned char hash[32])
Definition: sha256.cpp:118
#define Sigma1(x)
Definition: sha256.cpp:45
uint64_t offset_nextInChain
Definition: circular_bfr.hpp:117
char reservedSpace[MAXLEN+sizeof(SharedMemoryVariable::SharedMemoryVariable_Record)]
Definition: shared_variable.hpp:614
uint32_t u32
Definition: shared_variable.hpp:80
NUMTYPE & operator+=(const NUMTYPE arg) OME_ALWAYS_INLINE
Addition operator for a numeric shared memory variable.
Definition: shared_variable.hpp:505
SharedMemoryVariable_Record * dataPointer
Definition: shared_variable.hpp:103
SMV_StandaloneString(const char *varName, SharedMemoryVariableNode *parentNode)
Definition: shared_variable.hpp:630
SMV_String(const char *varName, size_t reservedLength, SharedMemoryVariableNode *parentNode) NONNULL_CLASS_PARAMETERS(2)
Definition: shared_variable.hpp:564
SharedMemoryVariableNode(const char *varName, SharedMemoryVariableNode *parentNode)
Definition: shared_variable.hpp:326
OMEstring * OMEmakeSHA256hash(const OMEstring &message)
Compute Secure Hash Algorithm 256 over an OMEstring.
Definition: sha256.cpp:169
@ SMV_TYPE_FLOAT
Definition: shared_variable.hpp:51
const char srcID[]
Definition: catSym.c:17
SharedMemoryVariableManager(bool inDataSegment=true)
Constructor for a shared memory variable manager.
Definition: shared_variable.cpp:317
NUMTYPE operator--(int) OME_ALWAYS_INLINE
Postfix decrement operator for a numeric shared memory variable.
Definition: shared_variable.hpp:424
unsigned int getType() const OME_ALWAYS_INLINE
Return type of variable, see SharedMemoryVariableType.
Definition: shared_variable.hpp:125
#define Gamma0(x)
Definition: sha256.cpp:46
NUMTYPE & operator++() OME_ALWAYS_INLINE
Prefix increment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:409
SMV_StandaloneNumeric(const char *varName, SharedMemoryVariableNode *parentNode, NUMTYPE initVal=0)
Definition: shared_variable.hpp:463
BufferRegion * bfrMgr
Definition: shared_variable.hpp:198
NUMTYPE & operator--() OME_ALWAYS_INLINE
Prefix decrement operator for a numeric shared memory variable.
Definition: shared_variable.hpp:529
SharedMemoryVariableManager DEFAULT_sharedMemoryVariableManager
Default shared memory variable manager.
@ SMV_DISPLAY_NAME
Definition: shared_variable.hpp:62
unsigned char * createAndAttachStandardSegment(const char *componentName, size_t *segmentLength)
Convenience function to create a file and map it to segment for variable storage. The filename will i...
Definition: shared_variable.cpp:426
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
SMV_StandaloneNode(const char *varName, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager)
Definition: shared_variable.hpp:702
SMV_Numeric(const char *varName, SharedMemoryVariableNode *parentNode) NONNULL_CLASS_PARAMETERS(2)
Definition: shared_variable.hpp:353
NUMTYPE & operator-=(const NUMTYPE arg) OME_ALWAYS_INLINE
Subtraction operator for a numeric shared memory variable.
Definition: shared_variable.hpp:510
unsigned char registered
Definition: shared_variable.hpp:109
Convenience template for creating shared memory variables of one of the supported numeric types.
Definition: shared_variable.hpp:337
@ SMV_TYPE_BINARY_STRING
Definition: shared_variable.hpp:57
void allocateVariable(SharedMemoryVariable *var)
Internal routine to allocate storage within the segment for a shared memory variable.
Definition: shared_variable.cpp:475
@ SMV_DISPLAY_TYPE
Definition: shared_variable.hpp:64
char reservedSpace[MAXLEN]
Definition: shared_variable.hpp:699
uint32_t offset_nextInChain
Definition: circular_bfr.hpp:108
HIDE_FUNCTION void sha_memory(const unsigned char *buf, size_t len, unsigned char hash[32])
Definition: sha256.cpp:158
#define GET32_NATIVE(fieldName, isNative)
Definition: shared_variable.cpp:25
SharedMemoryVariableType
Definition: shared_variable.hpp:43
static SharedMemoryVariable_Record unallocated_data
Definition: shared_variable.hpp:101
@ SMV_TYPE_NAME_NODE
Definition: shared_variable.hpp:58
NUMTYPE * getAddress() const OME_ALWAYS_INLINE
Get address of shared memory variable.
Definition: shared_variable.hpp:374
@ SMV_TYPE_FIXED
Definition: shared_variable.hpp:53
std::list< SharedMemoryVariable * > smv_list_t
Definition: shared_variable.hpp:195
int createMappedFile(unsigned char **segment, const char *fileName, size_t *segmentLenPtr, uint_fast32_t doInit)
Create or open a mapped file with the specified file name.
Definition: mapped_file.cpp:207
@ SMV_TYPE_INT32
Definition: shared_variable.hpp:47
NUMTYPE & operator*=(const NUMTYPE arg) OME_ALWAYS_INLINE
Multiplication operator for a numeric shared memory variable.
Definition: shared_variable.hpp:399
size_t length() const
Definition: OMEstring.h:401
NUMTYPE & operator=(const NUMTYPE arg) OME_ALWAYS_INLINE
Assignment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:384
FARGOS Shared Memory Variable routines.
SharedMemoryVariableNode(const char *varName, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager)
Definition: shared_variable.hpp:321
const char srcID[] OME_USED
Definition: tick_time.cpp:24
virtual void noteNowRegistered(SharedMemoryVariable_Record *newArea) override
Extension mechanism to allow derived classes to be informed when they are about to be assigned storag...
Definition: shared_variable.hpp:668
#define SMV_MAGIC_NUMBER
Magic number used for Shared Memory Variable segments.
Definition: shared_variable.hpp:33
uint32_t minLength
Definition: shared_variable.hpp:107
const char * variableName
Definition: shared_variable.hpp:106
#define OME_CONST_FUNCTION
Mark as an idempotent function that only accesses arguments – no global data.
Definition: compiler_hints.h:390
#define Gamma1(x)
Definition: sha256.cpp:47
Manager for collection of shared memory variables.
Definition: shared_variable.hpp:193
Subclass of SharedMemoryVariableNode that reserves heap space to hold data when a shared memory segme...
Definition: shared_variable.hpp:695
Storage layout for shared memory variable record within a memory mapped segment.
Definition: shared_variable.hpp:74
@ SMV_DISPLAY_VALUE
Definition: shared_variable.hpp:63
uint64_t parentNodeOffset
Definition: shared_variable.hpp:85
@ SMV_TYPE_UNSIGNED
Definition: shared_variable.hpp:45
char * operator=(const char *val) OME_ALWAYS_INLINE
Assignment operator into a shared memory string variable.
Definition: shared_variable.hpp:575
void attachExistingSegment(unsigned char *segment, size_t segmentLength)
Use an existing, already initialized, memory segment for variable storage.
Definition: shared_variable.cpp:375
@ SMV_DISPLAY_EQUALS
Definition: shared_variable.hpp:65
Compiler-specific macros to provide performance-related hints.
#define OME_EXPECT_FALSE(expr)
Annotation macro for conditional expression expected to be false.
Definition: compiler_hints.h:540
int getPathPrefix(char *bfr, uint_fast32_t bfrLen, unsigned char *base, bool isNative=true) const
Get parent path name of variable.
Definition: shared_variable.cpp:195
#define OME_ALWAYS_INLINE
Tell the compiler to alway inline a function, regardless of optimization level.
Definition: compiler_hints.h:364
SharedMemoryVariableManager * getVariableManager() const
Definition: shared_variable.hpp:117
uint32_t blockLen
Definition: circular_bfr.hpp:106
@ SMV_TYPE_UINT32
Definition: shared_variable.hpp:48
#define Sigma0(x)
Definition: sha256.cpp:44
uint_fast32_t getFullName(char *bfr, uint_fast32_t bfrLen) const
Get full path name of variable.
Definition: shared_variable.cpp:285
#define GET64_NATIVE(fieldName, isNative)
Definition: shared_variable.cpp:27
@ SMV_TYPE_TINY_BINARY_STRING
Definition: shared_variable.hpp:55
virtual void noteNowRegistered(SharedMemoryVariable_Record *newArea)
Extension mechanism to allow derived classes to be informed when they are about to be assigned storag...
Definition: shared_variable.hpp:176
NUMTYPE & operator/=(const NUMTYPE arg) OME_ALWAYS_INLINE
Division operator for a numeric shared memory variable.
Definition: shared_variable.hpp:404
Shared memory variable which allows statistics and operational controls to be exposed to other proces...
Definition: shared_variable.hpp:40
NUMTYPE * getAddress() const OME_ALWAYS_INLINE
Get address of shared memory variable.
Definition: shared_variable.hpp:490
uint_fast32_t makeQualifiedFileName(char *fileName, uint_fast32_t fileNameLen, const char *componentName, const char *suffix, const char *dirName, uint_fast32_t flags)
Create a filename and optionally qualify with the current date and process Id.
Definition: mapped_file.cpp:98
size_t offsetInSegment(const SharedMemoryVariable::SharedMemoryVariable_Record *rec) const
Definition: shared_variable.hpp:292
SMV_Numeric(const char *varName, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager) NONNULL_CLASS_PARAMETERS(2)
Definition: shared_variable.hpp:341
SharedBufferAllocRecord_32 SharedBufferAllocRecord
Default SharedBufferAllocRecord.
Definition: circular_bfr.hpp:133
uint16_t varNameLength
strlen() + 1; includes null in count
Definition: shared_variable.hpp:89
Interface to a buffer region. This is an abstract class.
Definition: circular_bfr.hpp:177
#define FILENAME_WITH_EVERYTHING
Definition: mapped_file.h:38
int length(OMEthread *thread, OMEtype &result, const OMEtype &arg)
Definition: OILtypeFuncs.cpp:19
#define GET16_NATIVE(fieldName, isNative)
Definition: shared_variable.cpp:23
class SharedMemoryVariableManager * variableManager
Definition: shared_variable.hpp:105
@ SMV_TYPE_UINT64
Definition: shared_variable.hpp:50
@ SMV_TYPE_NONE
Definition: shared_variable.hpp:44
static unsigned char * createSegment(const char *fileName, size_t *segmentLengthPtr, int initMode=MAP_FILE_INIT, const char *desiredMagicNumber=SMV_MAGIC_NUMBER)
Open a file and map it to a memory segment for variable storage.
Definition: shared_variable.cpp:342
NUMTYPE & operator+=(const NUMTYPE arg) OME_ALWAYS_INLINE
Addition operator for a numeric shared memory variable.
Definition: shared_variable.hpp:389
NUMTYPE operator++(int) OME_ALWAYS_INLINE
Postfix increment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:418
#define htonl(x)
Definition: tmp.o.cpp:3098
unsigned char * regionBase
Definition: shared_variable.hpp:199
char varName[12+sizeof(SharedBufferAllocRecord)]
variable name
Definition: shared_variable.hpp:90
NUMTYPE operator--(int) OME_ALWAYS_INLINE
Postfix decrement operator for a numeric shared memory variable.
Definition: shared_variable.hpp:540
@ SMV_TYPE_TINY_STRING
Definition: shared_variable.hpp:54
unsigned char _pad1[2]
Definition: shared_variable.hpp:110
@ SMV_TYPE_LARGE
Definition: shared_variable.hpp:46
int32_t i32
Definition: shared_variable.hpp:79
int setName(const char *newName)
Set new variable name.
Definition: shared_variable.hpp:150
Allocation record for chains in a 64-bit shared memory buffer.
Definition: circular_bfr.hpp:112
char * operator=(const char *val) OME_ALWAYS_INLINE
Assignment operator into a shared memory string variable.
Definition: shared_variable.hpp:647
SharedMemoryVariable(class SharedMemoryVariableManager *mgr, const char *varName, int varType, size_t length)
Construct an shared memory variable and attach to the indicated manager for the collection of variabl...
Definition: shared_variable.cpp:230
SMV_String(const char *varName, size_t reservedLength, SharedMemoryVariableManager *mgr=&DEFAULT_sharedMemoryVariableManager) NONNULL_CLASS_PARAMETERS(2)
Definition: shared_variable.hpp:560
char * formatAsText(char *bfr, uint_fast32_t bfrLen, uint_fast32_t displayMode, const char *pathPrefix=nullptr, bool isNative=true) const
Format variable into text buffer.
Definition: shared_variable.cpp:118
size_t regionLength
Definition: shared_variable.hpp:200
NUMTYPE operator++(int) OME_ALWAYS_INLINE
Postfix increment operator for a numeric shared memory variable.
Definition: shared_variable.hpp:534