home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / a-string.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  4KB  |  79 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*                         GNAT COMPILER COMPONENTS                         */
  4. /*                                                                          */
  5. /*                             A - S T R I N G                              */
  6. /*                                                                          */
  7. /*                              C Header File                               */
  8. /*                                                                          */
  9. /*                            $Revision: 1.7 $                              */
  10. /*                                                                          */
  11. /*           Copyright (c) 1992,1993,1994 NYU, All Rights Reserved          */
  12. /*                                                                          */
  13. /* GNAT is free software;  you can  redistribute it  and/or modify it under */
  14. /* terms of the  GNU General Public License as published  by the Free Soft- */
  15. /* ware  Foundation;  either version 2,  or (at your option) any later ver- */
  16. /* sion.  GNAT is distributed in the hope that it will be useful, but WITH- */
  17. /* OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY */
  18. /* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License */
  19. /* for  more details.  You should have  received  a copy of the GNU General */
  20. /* Public License  distributed with GNAT;  see file COPYING.  If not, write */
  21. /* to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  22. /*                                                                          */
  23. /****************************************************************************/
  24.  
  25. /* This file is the C file that corresponds to the Ada package spec         */
  26. /* Stringt. It was created manually from stringt.ads and stringt.adb         */
  27.  
  28. /* Note: only the access functions are provided, since the tree transformer  */
  29. /* is not allowed to modify the tree or its auxiliary structures.         */
  30.  
  31. /* This package contains routines for handling the strings table which is    */
  32. /* used to store string constants encountered in the source, and also those  */
  33. /* additional string constants generated by compile time concatenation and   */
  34. /* other similar processing.                             */
  35.  
  36. /* A string constant in this table consists of a series of Char_Code values, */
  37. /* so that 16-bit character codes can be properly handled if this feature    */
  38. /* is implemented in the scanner.                         */
  39.  
  40. /* There is no guarantee that hashing is used in the implementation. This    */
  41. /* means that the caller cannot count on having the same Id value for two    */
  42. /* identical strings stored separately.                      */
  43.  
  44.    /* The String_Id values reference entries in the Strings table, which     */
  45.    /* contains String_Entry records that record the length of each stored    */
  46.    /* string and its starting location in the String_Chars table.         */
  47.  
  48.    struct String_Entry {
  49.       Int String_Index;
  50.       Int Length;
  51.    };
  52.  
  53.    extern struct String_Entry *Strings_Ptr;
  54.    /* Pointer to string entry vector. This pointer is passed to the tree     */
  55.    /* transformer and stored in a global location for access from here         */
  56.    /* after subtracting String_First_Entry, so that String_Id values can be  */
  57.    /* used as subscripts into the vector.                     */
  58.  
  59.    extern Char_Code *String_Chars_Ptr;
  60.    /* Pointer to name characters table. This pointer is passed to the tree   */
  61.    /* transformer and stored in a global location for access from here. The  */
  62.    /* String_Index values are subscripts into this array.             */
  63.  
  64.  
  65.    /* String_Length returns the length of the specified string             */
  66.  
  67.    INLINE Int String_Length (String_Id Id)
  68.       { return Strings_Ptr [Id].Length; }
  69.  
  70.  
  71.    /* Get_String_Char obtains the specified character from a stored string.  */
  72.    /* The lower bound of stored strings is always 1, so the range of values  */
  73.    /* is 1 to String_Length (Id).                         */
  74.  
  75.    INLINE Char_Code Get_String_Char (String_Id Id, Int Index)
  76.       { return String_Chars_Ptr [Strings_Ptr [Id].String_Index + Index - 1]; }
  77.  
  78. /* End of a-string.h (C version of Stringt package spec and body) */
  79.