/**CFile****************************************************************

  FileName    [mem.h]

  SystemName  [ABC: Logic synthesis and verification system.]

  PackageName [Memory management.]

  Synopsis    [External declarations.]

  Author      [Alan Mishchenko]
  
  Affiliation [UC Berkeley]

  Date        [Ver. 1.0. Started - June 20, 2005.]

  Revision    [$Id: mem.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $]

***********************************************************************/

#ifndef ABC__aig__mem__mem_h
#define ABC__aig__mem__mem_h

#include "misc/util/abc_global.h"

ABC_NAMESPACE_HEADER_START


////////////////////////////////////////////////////////////////////////
///                        DECLARATIONS                              ///
////////////////////////////////////////////////////////////////////////

typedef struct Mem_Fixed_t_    Mem_Fixed_t;    
typedef struct Mem_Flex_t_     Mem_Flex_t;     
typedef struct Mem_Step_t_     Mem_Step_t;     

////////////////////////////////////////////////////////////////////////
///                     FUNCTION DEFINITIONS                         ///
////////////////////////////////////////////////////////////////////////
 
/*=== mem.c ===========================================================*/
// fixed-size-block memory manager
extern Mem_Fixed_t * Mem_FixedStart( int nEntrySize );
extern void          Mem_FixedStop( Mem_Fixed_t * p, int fVerbose );
extern char *        Mem_FixedEntryFetch( Mem_Fixed_t * p );
extern void          Mem_FixedEntryRecycle( Mem_Fixed_t * p, char * pEntry );
extern void          Mem_FixedRestart( Mem_Fixed_t * p );
extern int           Mem_FixedReadMemUsage( Mem_Fixed_t * p );
extern int           Mem_FixedReadMaxEntriesUsed( Mem_Fixed_t * p );
// flexible-size-block memory manager
extern Mem_Flex_t *  Mem_FlexStart();
extern void          Mem_FlexStop( Mem_Flex_t * p, int fVerbose );
extern char *        Mem_FlexEntryFetch( Mem_Flex_t * p, int nBytes );
extern void          Mem_FlexRestart( Mem_Flex_t * p );
extern int           Mem_FlexReadMemUsage( Mem_Flex_t * p );
// hierarchical memory manager
extern Mem_Step_t *  Mem_StepStart( int nSteps );
extern void          Mem_StepStop( Mem_Step_t * p, int fVerbose );
extern char *        Mem_StepEntryFetch( Mem_Step_t * p, int nBytes );
extern void          Mem_StepEntryRecycle( Mem_Step_t * p, char * pEntry, int nBytes );
extern int           Mem_StepReadMemUsage( Mem_Step_t * p );



ABC_NAMESPACE_HEADER_END



#endif

////////////////////////////////////////////////////////////////////////
///                       END OF FILE                                ///
////////////////////////////////////////////////////////////////////////


