1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
/*
* Copyright (c) 2004, 2005 Tama Communications Corporation
*
* This file is part of GNU GLOBAL.
*
* GNU GLOBAL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* GNU GLOBAL 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#ifdef HAVE_STRING_H
#include <string.h>
#else
#include <strings.h>
#endif
#include <errno.h>
#include "global.h"
#include "assoc.h"
#include "htags.h"
#include "cache.h"
static ASSOC *assoc[GTAGLIM];
/*
* Cache file is used for duplicate object entry.
*
* If function 'func()' is defined more than once then the cache record
* of GTAGS has (1) the frequency and the name of duplicate object entry file,
* else it has (2) the tag definition.
* It can be distinguished the first character of the cache record.
* If it is a blank then it is the former else the latter.
*
* (1) The frequency and the id of duplicate object entry file (=fid).
* +----------------------+
* |' '<fid>' '<frequency>|
* +----------------------+
* The duplicate object entry file can be referred to as 'D/<fid>.html'.
*
* (2) The tag definition.
* +---------------------------+
* |<line number>' '<file name>|
* +---------------------------+
* The tag entry is referred to as 'S/<fid>.html#<line number>'.
* The <fid> can be calculated by path2fid(<file name>).
*/
/*
* cache_open: open cache file.
*/
void
cache_open(void)
{
assoc[GTAGS] = assoc_open('d');
assoc[GRTAGS] = assoc_open('r');
if (symbol)
assoc[GSYMS] = assoc_open('y');
}
/*
* cache_put: put tag line.
*
* i) db db type
* i) tag tag name
* i) line tag line
*/
void
cache_put(db, tag, line)
int db;
const char *tag;
const char *line;
{
if (db >= GTAGLIM)
die("I don't know such tag file.");
assoc_put(assoc[db], tag, line);
}
/*
* cache_get: get tag line.
*
* i) db db type
* i) tag tag name
* r) tag line
*/
const char *
cache_get(db, tag)
int db;
const char *tag;
{
if (db >= GTAGLIM)
die("I don't know such tag file.");
return assoc_get(assoc[db], tag);
}
/*
* cache_close: close cache file.
*/
void
cache_close(void)
{
int i;
for (i = GTAGS; i < GTAGLIM; i++) {
if (assoc[i]) {
assoc_close(assoc[i]);
assoc[i] = NULL;
}
}
}
|