ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/libobjects-0.1.19.tgz#/libobjects-0.1.19/src/Foundation/NSZone.h

This is NSZone.h in view mode; [Download] [Up]

/* NSZone memory management.
   Copyright (C) 1995 Free Software Foundation, Inc.

   Written by: Mark Lakata <lakata@sseos.lbl.gov>
   Date: January 1995
 
   This file is part of the GNU Objective C Class Library.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.
   
   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

   See NSZone.c for additional information. */

#ifndef h_zone_NS_h
#define h_zone_NS_h

#if NeXT_runtime
#import <objc/zone.h>
#define NSZone NXZone
#else
#include <stdio.h>
#include <stdlib.h>

/*
 * This the NeXTStep zone typedef.   It is nothing like the implementation
 * below.
 */
/*
typedef struct _NSZone {
    void *(*realloc)(struct _NSZone *zonep, void *ptr, size_t size);
    void *(*malloc)(struct _NSZone *zonep, size_t size);
    void (*free)(struct _NSZone *zonep, void *ptr);
    void (*destroy)(struct _NSZone *zonep);
} NSZone;
*/

#define MAXZONENAMELENGTH 20

typedef struct _llist {
    int Count,Size;
    int ElementSize;
    void *LList;
} llist;

typedef struct _NSZone {
    void *base;
    size_t size;
    size_t granularity;
    int canFree;
    char name[MAXZONENAMELENGTH+1];
    llist heap;
    struct _NSZone *parent;
} NSZone;

/* 
 * try to find the page size.   If these fail on your system,
 * consider some other methods used by Emacs.   See the file
 * getpagesize.h of the Emacs source code
 */
#ifndef vm_page_size
# include <unistd.h>
# ifdef _SC_PAGESIZE
#  define vm_page_size sysconf(_SC_PAGESIZE)
# else
#  ifdef _SC_PAGE_SIZE
#   define vm_page_size sysconf(_SC_PAGE_SIZE)
#  else
/* #   ifndef HAVE_LIBC_H */
/* suggested change by Gregor Hoffleit <flight@mathi.uni-heidelberg.DE> */
#   if !defined(HAVE_LIBC_H) && !defined(linux)
     int getpagesize(void);
#   endif /* not HAVE_LIBC_H */
#   define vm_page_size getpagesize()
#  endif /* _SC_PAGE_SIZE */
# endif /* _SC_PAGESIZE */
#endif /* vm_page_size */

#define NS_NOZONE  ((NSZone *)0)

/*
 * Returns the default zone used by the malloc(3) calls.
 */
extern NSZone *NSDefaultMallocZone(void);

/* 
 * Create a new zone with its own memory pool.
 * If canfree is 0 the allocator will never free memory and mallocing will be fast
 */
extern NSZone *NSCreateZone(size_t startSize, size_t granularity, int canFree);

/*
 * Create a new zone who obtains memory from another zone.
 * Returns NS_NOZONE if the passed zone is already a child.
 */
extern NSZone  *NSCreateChildZone(NSZone *parentZone, size_t startSize,
                                  size_t granularity, int canFree);

/*
 * The zone is destroyed and all memory reclaimed.
 */
extern void NSDestroyZone(NSZone *zonep);
        
/*
 * Will merge zone with the parent zone. Malloced areas are still valid.
 * Must be an child zone.
 */
extern void NSMergeZone(NSZone *zonep);

extern void *NSZoneMalloc(NSZone *zonep, size_t size);

extern void *NSZoneRealloc(NSZone *zonep, void *ptr, size_t size);
extern void NSZoneFree(NSZone *zonep, void *ptr);

/*
 * Calls NSZoneMalloc and then bzero.
 */
extern void *NSZoneCalloc(NSZone *zonep, size_t numElems, size_t byteSize);

/*
 * Returns the zone for a pointer.
 * NS_NOZONE if not in any zone.
 * The ptr must have been returned from a malloc or realloc call.
 */
extern NSZone *NSZoneFromPtr(void *ptr);

/*
 * Debugging Helpers.
 */
 
 /*  
  * Will print to stdout if this pointer is in the malloc heap, free status, and size.
  */
extern void NSZonePtrInfo(void *ptr);

/*
 * Will verify all internal malloc information.
 * This is what malloc_debug calls.
 */
extern int NSMallocCheck(void);

/*
 * Give a zone a name.
 *
 * The string will be copied.
 */
extern void NSNameZone(NSZone *z, const char *name);

#endif /* __NeXT__ */
#endif /* h_zone_NS_h */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.