File: IndexDataStoreUtils.h

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (115 lines) | stat: -rw-r--r-- 3,252 bytes parent folder | download
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
//===--- IndexDataStoreUtils.h - Functions/constants for the data store ---===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_LIB_INDEX_INDEXDATASTOREUTILS_H
#define LLVM_CLANG_LIB_INDEX_INDEXDATASTOREUTILS_H

#include "llvm/Bitstream/BitCodes.h"
#include "clang/Basic/LLVM.h"

namespace llvm {
  class BitstreamWriter;
}

namespace clang {
namespace index {
namespace store {

static const unsigned STORE_FORMAT_VERSION = 5;

void appendUnitSubDir(SmallVectorImpl<char> &StorePathBuf);
void appendInteriorUnitPath(StringRef UnitName,
                            SmallVectorImpl<char> &PathBuf);
void appendRecordSubDir(SmallVectorImpl<char> &StorePathBuf);
void appendInteriorRecordPath(StringRef RecordName,
                              SmallVectorImpl<char> &PathBuf);

enum RecordBitRecord {
  REC_VERSION         = 0,
  REC_DECLINFO        = 1,
  REC_DECLOFFSETS     = 2,
  REC_DECLOCCURRENCE  = 3,
};

enum RecordBitBlock {
  REC_VERSION_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
  REC_DECLS_BLOCK_ID,
  REC_DECLOFFSETS_BLOCK_ID,
  REC_DECLOCCURRENCES_BLOCK_ID,
};

enum UnitBitRecord {
  UNIT_VERSION        = 0,
  UNIT_INFO           = 1,
  UNIT_DEPENDENCY     = 2,
  UNIT_INCLUDE        = 3,
  UNIT_PATH           = 4,
  UNIT_PATH_BUFFER    = 5,
  UNIT_MODULE         = 6,
  UNIT_MODULE_BUFFER  = 7,
};

enum UnitBitBlock {
  UNIT_VERSION_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
  UNIT_INFO_BLOCK_ID,
  UNIT_DEPENDENCIES_BLOCK_ID,
  UNIT_INCLUDES_BLOCK_ID,
  UNIT_PATHS_BLOCK_ID,
  UNIT_MODULES_BLOCK_ID,
};

enum UnitDependencyKind {
  UNIT_DEPEND_KIND_FILE = 0,
  UNIT_DEPEND_KIND_RECORD = 1,
  UNIT_DEPEND_KIND_UNIT = 2,
};
static const unsigned UnitDependencyKindBitNum = 2;

enum UnitFilePathPrefixKind {
  UNIT_PATH_PREFIX_NONE = 0,
  UNIT_PATH_PREFIX_WORKDIR = 1,
  UNIT_PATH_PREFIX_SYSROOT = 2,
};
static const unsigned UnitFilePathPrefixKindBitNum = 2;

typedef SmallVector<uint64_t, 64> RecordData;
typedef SmallVectorImpl<uint64_t> RecordDataImpl;

struct BitPathComponent {
  size_t Offset = 0;
  size_t Size = 0;
  BitPathComponent(size_t Offset, size_t Size) : Offset(Offset), Size(Size) {}
  BitPathComponent() = default;
};

struct DirBitPath {
  UnitFilePathPrefixKind PrefixKind = UNIT_PATH_PREFIX_NONE;
  BitPathComponent Dir;
  DirBitPath(UnitFilePathPrefixKind Kind,
             BitPathComponent Dir) : PrefixKind(Kind), Dir(Dir) {}
  DirBitPath() = default;
};

struct FileBitPath : DirBitPath {
  BitPathComponent Filename;
  FileBitPath(UnitFilePathPrefixKind Kind, BitPathComponent Dir,
              BitPathComponent Filename) : DirBitPath(Kind, Dir), Filename(Filename) {}
  FileBitPath() = default;
};

void emitBlockID(unsigned ID, const char *Name,
                 llvm::BitstreamWriter &Stream, RecordDataImpl &Record);

void emitRecordID(unsigned ID, const char *Name,
                  llvm::BitstreamWriter &Stream, RecordDataImpl &Record);

} // end namespace store
} // end namespace index
} // end namespace clang

#endif