summaryrefslogtreecommitdiff
path: root/core/variant/variant_parser.h
diff options
context:
space:
mode:
authorlawnjelly <lawnjelly@gmail.com>2022-12-12 15:14:39 +0000
committerlawnjelly <lawnjelly@gmail.com>2022-12-12 15:14:39 +0000
commit491594ef0f56dcafd9a1aaba7b66ec23c9f18af4 (patch)
tree8f0b408b29a1d3c5cb9820b9d84d9096305a2894 /core/variant/variant_parser.h
parentbc5d67c61345758741fe087c6b5282402b0b2465 (diff)
VariantParser make readahead optional
It turns out some areas are independently moving / reading filepointers outside of the VariantParser, which can cause the readahead caching to get out of sync. This PR makes the VariantParser readahead to be optional to allow for these use cases.
Diffstat (limited to 'core/variant/variant_parser.h')
-rw-r--r--core/variant/variant_parser.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/core/variant/variant_parser.h b/core/variant/variant_parser.h
index 6b1d095ab5..fdea355c4b 100644
--- a/core/variant/variant_parser.h
+++ b/core/variant/variant_parser.h
@@ -46,14 +46,16 @@ public:
bool eof = false;
protected:
+ bool readahead_enabled = true;
virtual uint32_t _read_buffer(char32_t *p_buffer, uint32_t p_num_chars) = 0;
+ virtual bool _is_eof() const = 0;
public:
char32_t saved = 0;
char32_t get_char();
virtual bool is_utf8() const = 0;
- bool is_eof() const { return eof; }
+ bool is_eof() const;
Stream() {}
virtual ~Stream() {}
@@ -62,13 +64,14 @@ public:
struct StreamFile : public Stream {
protected:
virtual uint32_t _read_buffer(char32_t *p_buffer, uint32_t p_num_chars) override;
+ virtual bool _is_eof() const override;
public:
Ref<FileAccess> f;
virtual bool is_utf8() const override;
- StreamFile() {}
+ StreamFile(bool p_readahead_enabled = true) { readahead_enabled = p_readahead_enabled; }
};
struct StreamString : public Stream {
@@ -79,10 +82,11 @@ public:
protected:
virtual uint32_t _read_buffer(char32_t *p_buffer, uint32_t p_num_chars) override;
+ virtual bool _is_eof() const override;
public:
virtual bool is_utf8() const override;
- StreamString() {}
+ StreamString(bool p_readahead_enabled = true) { readahead_enabled = p_readahead_enabled; }
};
typedef Error (*ParseResourceFunc)(void *p_self, Stream *p_stream, Ref<Resource> &r_res, int &line, String &r_err_str);