Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/gs/src/gxbcache.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1995, 1996 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gxbcache.h,v 1.5 2002/06/16 08:45:43 lpd Exp $ */
18
/* Bitmap cache structures */
19
 
20
#ifndef gxbcache_INCLUDED
21
#  define gxbcache_INCLUDED
22
 
23
#include "gxbitmap.h"
24
 
25
/*
26
 * These structures are superclasses for a cache in which the 'value' is
27
 * a bitmap.  The structures defined here don't take any position about
28
 * the nature of the 'key'.
29
 */
30
 
31
/* ---------------- Bitmap cache entry ---------------- */
32
 
33
/*
34
 * The cache may contain both used and free blocks.
35
 * All blocks have a common header; free blocks have ONLY the header.
36
 */
37
typedef struct gx_cached_bits_head_s {
38
    uint size;			/* total block size in bytes */
39
    uint depth;			/* bits per pixel, free block if 0 */
40
} gx_cached_bits_head;
41
 
42
#define cb_head_is_free(cbh) ((cbh)->depth == 0)
43
#define cb_head_set_free(cbh) ((cbh)->depth = 0)
44
#define gx_cached_bits_common\
45
	gx_cached_bits_head head;	/* must be first */\
46
		/* The rest of the entry is an abbreviation of */\
47
		/* gx_strip_bitmap, sans data. */\
48
	ushort width, height, shift;\
49
	ushort raster;\
50
	gx_bitmap_id id
51
/* Define aliases for head members. */
52
#define cb_depth head.depth
53
/* Define aliases for common members formerly in the head. */
54
#define cb_raster raster
55
typedef struct gx_cached_bits_s {
56
    gx_cached_bits_common;
57
} gx_cached_bits;
58
 
59
#define cb_is_free(cb) cb_head_is_free(&(cb)->head)
60
/*
61
 * Define the alignment of the gx_cached_bits structure.  We must ensure
62
 * that an immediately following bitmap will be properly aligned.
63
 */
64
#define align_cached_bits_mod\
65
  (max(align_bitmap_mod, max(arch_align_ptr_mod, arch_align_long_mod)))
66
 
67
/*
68
 * We may allocate a bitmap cache in chunks, so as not to tie up memory
69
 * prematurely if it isn't needed (or something else needs it more).
70
 * Thus there is a structure for managing an entire cache, and another
71
 * structure for managing each chunk.
72
 */
73
typedef struct gx_bits_cache_chunk_s gx_bits_cache_chunk;
74
struct gx_bits_cache_chunk_s {
75
    gx_bits_cache_chunk *next;
76
    byte *data;			/* gx_cached_bits_head * */
77
    uint size;
78
    uint allocated;		/* amount of allocated data */
79
};
80
 
81
/* ---------------- Bitmap cache ---------------- */
82
 
83
#define gx_bits_cache_common\
84
	gx_bits_cache_chunk *chunks;	/* current chunk in circular list */\
85
	uint cnext;			/* rover for allocating entries */\
86
					/* in current chunk */\
87
	uint bsize;			/* total # of bytes for all entries */\
88
	uint csize		/* # of entries */
89
typedef struct gx_bits_cache_s {
90
    gx_bits_cache_common;
91
} gx_bits_cache;
92
 
93
/* ---------------- Procedural interface ---------------- */
94
 
95
/* ------ Entire cache ------ */
96
 
97
/* Initialize a cache.  The caller must allocate and initialize */
98
/* the first chunk. */
99
void gx_bits_cache_init(gx_bits_cache *, gx_bits_cache_chunk *);
100
 
101
/* ------ Chunks ------ */
102
 
103
/* Initialize a chunk.  The caller must allocate it and its data. */
104
void gx_bits_cache_chunk_init(gx_bits_cache_chunk *, byte *, uint);
105
 
106
/* ------ Individual entries ------ */
107
 
108
/* Attempt to allocate an entry.  If successful, set *pcbh and return 0. */
109
/* If there isn't enough room, set *pcbh to an entry requiring freeing, */
110
/* or to 0 if we are at the end of the chunk, and return -1. */
111
int gx_bits_cache_alloc(gx_bits_cache *, ulong, gx_cached_bits_head **);
112
 
113
/* Shorten an entry by a given amount. */
114
void gx_bits_cache_shorten(gx_bits_cache *, gx_cached_bits_head *,
115
			   uint, gx_bits_cache_chunk *);
116
 
117
/* Free an entry.  The caller is responsible for removing the entry */
118
/* from any other structures (like a hash table). */
119
void gx_bits_cache_free(gx_bits_cache *, gx_cached_bits_head *,
120
			gx_bits_cache_chunk *);
121
 
122
#endif /* gxbcache_INCLUDED */