mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
59 lines
2.7 KiB
C++
59 lines
2.7 KiB
C++
/**************** Block H Declares Source Code File (.H) ***************/
|
|
/* Name: BLOCK.H Version 2.0 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 1998 */
|
|
/* */
|
|
/* This file contains the BLOCK pure virtual class definition. */
|
|
/*---------------------------------------------------------------------*/
|
|
/* Note: one of the main purpose of this base class is to take care */
|
|
/* of the very specific way Plug handles memory allocation. */
|
|
/* Instead of allocating small chunks of storage via new or malloc */
|
|
/* Plug works in its private memory pool in which it does the sub- */
|
|
/* allocation using the function PlugSubAlloc. These are never freed */
|
|
/* separately but when a transaction is terminated, the entire pool */
|
|
/* is set to empty, resulting in a very fast and efficient allocate */
|
|
/* process, no garbage collection problem, and an automatic recovery */
|
|
/* procedure (via LongJump) when the memory is exhausted. */
|
|
/* For this to work new must be given two parameters, first the */
|
|
/* global pointer of the Plug application, and an optional pointer to */
|
|
/* the memory pool to use, defaulting to NULL meaning using the Plug */
|
|
/* standard default memory pool, example: */
|
|
/* tabp = new(g) XTAB("EMPLOYEE"); */
|
|
/* allocates a XTAB class object in the standard Plug memory pool. */
|
|
/***********************************************************************/
|
|
#if !defined(BLOCK_DEFINED)
|
|
#define BLOCK_DEFINED
|
|
|
|
#if defined(__WIN__) && !defined(NOEX)
|
|
#define DllExport __declspec( dllexport )
|
|
#else // !__WIN__
|
|
#define DllExport
|
|
#endif // !__WIN__
|
|
|
|
/***********************************************************************/
|
|
/* Definition of class BLOCK with its method function new. */
|
|
/***********************************************************************/
|
|
typedef class BLOCK *PBLOCK;
|
|
|
|
class DllExport BLOCK {
|
|
public:
|
|
void * operator new(size_t size, PGLOBAL g, void *p = NULL) {
|
|
// if (trace > 3)
|
|
// htrc("New BLOCK: size=%d g=%p p=%p\n", size, g, p);
|
|
|
|
return (PlugSubAlloc(g, p, size));
|
|
} // end of new
|
|
|
|
virtual void Print(PGLOBAL, FILE *, uint) {} // Produce file desc
|
|
virtual void Print(PGLOBAL, char *, uint) {} // Produce string desc
|
|
|
|
#if !defined(__BORLANDC__)
|
|
// Avoid warning C4291 by defining a matching dummy delete operator
|
|
void operator delete(void *, PGLOBAL, void *) {}
|
|
void operator delete(void *, size_t) {}
|
|
#endif
|
|
virtual ~BLOCK() {}
|
|
|
|
}; // end of class BLOCK
|
|
|
|
#endif // !BLOCK_DEFINED
|