Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/adlc/filebuff.hpp
41144 views
1
/*
2
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef SHARE_ADLC_FILEBUFF_HPP
26
#define SHARE_ADLC_FILEBUFF_HPP
27
28
// FILEBUFF.HPP - Definitions for parser file buffering routines
29
30
// STRUCTURE FOR HANDLING INPUT AND OUTPUT FILES
31
32
class BufferedFile {
33
public:
34
const char *_name;
35
FILE *_fp;
36
inline BufferedFile() { _name = NULL; _fp = NULL; };
37
inline ~BufferedFile() {};
38
};
39
40
class ArchDesc;
41
42
//------------------------------FileBuff--------------------------------------
43
// This class defines a nicely behaved buffer of text. Entire file of text
44
// is read into buffer at creation, with sentinels at start and end.
45
class FileBuff {
46
private:
47
long _bufferSize; // Size of text holding buffer.
48
long _offset; // Expected filepointer offset.
49
long _bufoff; // Start of buffer file offset
50
51
char *_buf; // The buffer itself.
52
char *_bigbuf; // The buffer plus sentinels; actual heap area
53
char *_bufmax; // A pointer to the buffer end sentinel
54
char *_bufeol; // A pointer to the last complete line end
55
56
int _err; // Error flag for file seek/read operations
57
long _filepos; // Current offset from start of file
58
int _linenum;
59
60
ArchDesc& _AD; // Reference to Architecture Description
61
62
// Error reporting function
63
void file_error(int flag, int linenum, const char *fmt, ...);
64
65
public:
66
const BufferedFile *_fp; // File to be buffered
67
68
FileBuff(BufferedFile *fp, ArchDesc& archDesc); // Constructor
69
~FileBuff(); // Destructor
70
71
// This returns a pointer to the start of the current line in the buffer,
72
// and increments bufeol and filepos to point at the end of that line.
73
char *get_line(void);
74
int linenum() const { return _linenum; }
75
void set_linenum(int line) { _linenum = line; }
76
77
// This converts a pointer into the buffer to a file offset. It only works
78
// when the pointer is valid (i.e. just obtained from getline()).
79
long getoff(const char* s) { return _bufoff + (long)(s - _buf); }
80
};
81
#endif // SHARE_ADLC_FILEBUFF_HPP
82
83