home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Utilities / Ghostscript / src / inameidx.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-01  |  3.4 KB  |  86 lines

  1. /* Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of AFPL Ghostscript.
  4.   
  5.   AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author or
  6.   distributor accepts any responsibility for the consequences of using it, or
  7.   for whether it serves any particular purpose or works at all, unless he or
  8.   she says so in writing.  Refer to the Aladdin Free Public License (the
  9.   "License") for full details.
  10.   
  11.   Every copy of AFPL Ghostscript must include a copy of the License, normally
  12.   in a plain ASCII text file named PUBLIC.  The License grants you the right
  13.   to copy, modify and redistribute AFPL Ghostscript, but only under certain
  14.   conditions described in the License.  Among other things, the License
  15.   requires that the copyright notice and this notice be preserved on all
  16.   copies.
  17. */
  18.  
  19. /*$Id: inameidx.h,v 1.2 2000/09/19 19:00:45 lpd Exp $ */
  20. /* Name index definitions */
  21.  
  22. #ifndef inameidx_INCLUDED
  23. #  define inameidx_INCLUDED
  24.  
  25. #include "gconfigv.h"        /* defines EXTEND_NAMES */
  26.  
  27. /*
  28.  * The name table machinery has two slightly different configurations:
  29.  * a faster one that limits the total number of names to 64K and allows
  30.  * names up to 16K in size, and a slightly slower one that limits
  31.  * the total to 4M and restricts names to 256 characters.
  32.  */
  33. #ifndef EXTEND_NAMES        /* # of bits beyond 16 */
  34. #  define EXTEND_NAMES 0
  35. #endif
  36.  
  37. /* Define the size of a name sub-table. */
  38. #define NT_LOG2_SUB_SIZE (8 + (EXTEND_NAMES / 2))
  39. # define NT_SUB_SIZE (1 << NT_LOG2_SUB_SIZE)
  40. # define NT_SUB_INDEX_MASK (NT_SUB_SIZE - 1)
  41.  
  42. /*
  43.  * Define the first few entries of the name table.  Entry 0 is left unused.
  44.  * The entry with count = 1 is the entry for the 0-length name.
  45.  * The next NT_1CHAR_SIZE entries (in count order) are 1-character names.
  46.  */
  47. #define NT_1CHAR_SIZE 128
  48. #define NT_1CHAR_FIRST 2
  49. #define NT_1CHAR_NAMES_DATA\
  50.    0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\
  51.   16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\
  52.   32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\
  53.   48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\
  54.   64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\
  55.   80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\
  56.   96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,\
  57.  112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
  58.  
  59. /* ---------------- Name count/index mapping ---------------- */
  60.  
  61. /*
  62.  * We scramble the assignment order within a sub-table, so that
  63.  * dictionary lookup doesn't have to scramble the index.
  64.  * The scrambling algorithm must have three properties:
  65.  *      - It must map 0 to 0;
  66.  *      - It must only scramble the sub-table index;
  67.  *      - It must be a permutation on the sub-table index.
  68.  * Something very simple works just fine.
  69.  */
  70. #define NAME_COUNT_TO_INDEX_FACTOR 23
  71. #define name_count_to_index(cnt)\
  72.   (((cnt) & (-NT_SUB_SIZE)) +\
  73.    (((cnt) * NAME_COUNT_TO_INDEX_FACTOR) & NT_SUB_INDEX_MASK))
  74. /*
  75.  * The reverse permutation requires finding a number R such that
  76.  * NAME_COUNT_TO_INDEX_FACTOR * R = 1 mod NT_SUB_SIZE.
  77.  * The value given below works for NT_SUB_SIZE any power of 2 up to 4096.
  78.  * This is not currently used anywhere.
  79.  */
  80. #define NAME_INDEX_TO_COUNT_FACTOR 1959
  81. #define name_index_to_count(nidx)\
  82.   (((nidx) & (-NT_SUB_SIZE)) +\
  83.    (((nidx) * NAME_INDEX_TO_COUNT_FACTOR) & NT_SUB_INDEX_MASK))
  84.  
  85. #endif /* inameidx_INCLUDED */
  86.