Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/include/storage/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 2 kB image not shown  

Quelle  block.h

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * block.h
 *   POSTGRES disk block definitions.
 *
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/storage/block.h
 *
 *-------------------------------------------------------------------------
 */

#ifndef BLOCK_H
#define BLOCK_H

/*
 * BlockNumber:
 *
 * each data file (heap or index) is divided into postgres disk blocks
 * (which may be thought of as the unit of i/o -- a postgres buffer
 * contains exactly one disk block).  the blocks are numbered
 * sequentially, 0 to 0xFFFFFFFE.
 *
 * InvalidBlockNumber is the same thing as P_NEW in bufmgr.h.
 *
 * the access methods, the buffer manager and the storage manager are
 * more or less the only pieces of code that should be accessing disk
 * blocks directly.
 */

typedef uint32 BlockNumber;

#define InvalidBlockNumber  ((BlockNumber) 0xFFFFFFFF)

#define MaxBlockNumber   ((BlockNumber) 0xFFFFFFFE)

/*
 * BlockId:
 *
 * this is a storage type for BlockNumber.  in other words, this type
 * is used for on-disk structures (e.g., in HeapTupleData) whereas
 * BlockNumber is the type on which calculations are performed (e.g.,
 * in access method code).
 *
 * there doesn't appear to be any reason to have separate types except
 * for the fact that BlockIds can be SHORTALIGN'd (and therefore any
 * structures that contains them, such as ItemPointerData, can also be
 * SHORTALIGN'd).  this is an important consideration for reducing the
 * space requirements of the line pointer (ItemIdData) array on each
 * page and the header of each heap or index tuple, so it doesn't seem
 * wise to change this without good reason.
 */

typedef struct BlockIdData
{
 uint16  bi_hi;
 uint16  bi_lo;
} BlockIdData;

typedef BlockIdData *BlockId; /* block identifier */

/* ----------------
 *  support functions
 * ----------------
 */


/*
 * BlockNumberIsValid
 *  True iff blockNumber is valid.
 */

static inline bool
BlockNumberIsValid(BlockNumber blockNumber)
{
 return blockNumber != InvalidBlockNumber;
}

/*
 * BlockIdSet
 *  Sets a block identifier to the specified value.
 */

static inline void
BlockIdSet(BlockIdData *blockId, BlockNumber blockNumber)
{
 blockId->bi_hi = blockNumber >> 16;
 blockId->bi_lo = blockNumber & 0xffff;
}

/*
 * BlockIdEquals
 *  Check for block number equality.
 */

static inline bool
BlockIdEquals(const BlockIdData *blockId1, const BlockIdData *blockId2)
{
 return (blockId1->bi_hi == blockId2->bi_hi &&
   blockId1->bi_lo == blockId2->bi_lo);
}

/*
 * BlockIdGetBlockNumber
 *  Retrieve the block number from a block identifier.
 */

static inline BlockNumber
BlockIdGetBlockNumber(const BlockIdData *blockId)
{
 return (((BlockNumber) blockId->bi_hi) << 16) | ((BlockNumber) blockId->bi_lo);
}

#endif       /* BLOCK_H */

Messung V0.5 in Prozent
C=89 H=98 G=93

¤ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.