text: /*-------------------------------------------------------------------------
   *
   * freespace.h
   *	  POSTGRES free space map for quickly finding free space in relations
   *
   *
   * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
   *
   * src/include/storage/freespace.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef FREESPACE_H_
  #define FREESPACE_H_
  
  #include "storage/block.h"
  #include "storage/relfilenode.h"
  #include "utils/relcache.h"
  
  /* prototypes for public functions in freespace.c */
  extern Size GetRecordedFreeSpace(Relation rel, BlockNumber heapBlk);
  extern BlockNumber GetPageWithFreeSpace(Relation rel, Size spaceNeeded);
  extern BlockNumber RecordAndGetPageWithFreeSpace(Relation rel,
  												 BlockNumber oldPage,
  												 Size oldSpaceAvail,
  												 Size spaceNeeded);
  extern void RecordPageWithFreeSpace(Relation rel, BlockNumber heapBlk,
  									Size spaceAvail);
  extern void XLogRecordPageWithFreeSpace(RelFileNode rnode, BlockNumber heapBlk,
  										Size spaceAvail);
  
  extern BlockNumber FreeSpaceMapPrepareTruncateRel(Relation rel,
  												  BlockNumber nblocks);
  extern void FreeSpaceMapVacuum(Relation rel);
  extern void FreeSpaceMapVacuumRange(Relation rel, BlockNumber start,
  									BlockNumber end);
  
  #endif							/* FREESPACE_H_ */
  