Annotation of parser3/src/types/pa_vfile.h, revision 1.43
1.4 paf 1: /** @file
1.18 paf 2: Parser: @b file parser type decl.
1.4 paf 3:
1.39 paf 4: Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)
1.40 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
8: #ifndef PA_VFILE_H
9: #define PA_VFILE_H
1.43 ! paf 10:
! 11: static const char* IDENT_VFILE_H="$Id: zzz $";
1.1 paf 12:
1.25 paf 13: #include "classes.h"
1.1 paf 14: #include "pa_common.h"
15: #include "pa_globals.h"
1.3 paf 16: #include "pa_vstateless_object.h"
1.23 paf 17:
18: extern Methoded *file_class;
1.1 paf 19:
1.22 paf 20: /** holds received from user or read from disk file.
1.1 paf 21:
1.4 paf 22: @see VForm
23: */
1.3 paf 24: class VFile : public VStateless_object {
1.1 paf 25: public: // Value
26:
27: const char *type() const { return "file"; }
1.42 paf 28: VStateless_class *get_class() { return file_class; }
1.11 paf 29:
1.2 paf 30: /// VFile: true
1.33 parser 31: bool as_bool() const { return true; }
1.35 parser 32:
33: /// VFile: true
34: Value *as_expr_result(bool return_string_as_is=false) { return NEW VBool(pool(), as_bool()); }
1.2 paf 35:
1.16 paf 36: /// VFile: this
1.27 parser 37: VFile *as_vfile(String::Untaint_lang lang=String::UL_UNSPECIFIED,
38: bool origins_mode=false) {
1.19 paf 39: return this;
40: }
1.16 paf 41:
1.28 parser 42: /// VFile: CLASS,method,field
1.1 paf 43: Value *VFile::get_element(const String& aname) {
1.28 parser 44: // $CLASS,$method
1.3 paf 45: if(Value *result=VStateless_object::get_element(aname))
1.1 paf 46: return result;
47:
1.12 paf 48: // $name, $size, $text
1.16 paf 49: return static_cast<Value *>(ffields.get(aname));
1.1 paf 50: }
1.7 paf 51:
52: protected: // VAliased
53:
1.10 paf 54: /// disable .CLASS element. @see VAliased::get_element
1.15 paf 55: bool hide_class() { return true; }
1.1 paf 56:
57: public: // usage
58:
1.42 paf 59: VFile::VFile(Pool& apool) : VStateless_object(apool),
1.13 paf 60: fvalue_ptr(0),
61: fvalue_size(0),
1.16 paf 62: ffields(apool) {
1.13 paf 63: }
1.1 paf 64:
1.17 paf 65: void set(bool tainted,
66: const void *avalue_ptr, size_t avalue_size, const char *afile_name=0,
1.31 parser 67: Value *amime_type=0);
1.13 paf 68:
1.29 parser 69: void save(const String& file_spec, bool is_text) {
1.13 paf 70: if(fvalue_ptr)
1.38 paf 71: file_write(file_spec, fvalue_ptr, fvalue_size, is_text);
1.13 paf 72: else
1.41 paf 73: throw Exception("parser.runtime",
1.13 paf 74: &file_spec,
1.18 paf 75: "saving stat-ed file");
1.1 paf 76: }
77:
1.18 paf 78: const void *value_ptr() const {
79: if(!fvalue_ptr)
1.41 paf 80: throw Exception("parser.runtime",
1.18 paf 81: 0,
82: "getting value of stat-ed file");
83:
84: return fvalue_ptr;
85: }
1.16 paf 86: size_t value_size() const { return fvalue_size; }
1.21 paf 87: Hash& fields() { return ffields; }
88: const Hash& fields() const { return ffields; }
1.30 parser 89:
90: private:
91:
92: Value *fields_element();
1.16 paf 93:
1.1 paf 94: private:
95:
1.12 paf 96: const void *fvalue_ptr;
1.1 paf 97: size_t fvalue_size;
1.16 paf 98: Hash ffields;
1.1 paf 99:
100: };
101:
102: #endif
E-mail: