1 /*
2  * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
3  *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
4  *
5  * This file is part of lsp-plugins
6  * Created on: 31 авг. 2019 г.
7  *
8  * lsp-plugins is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * any later version.
12  *
13  * lsp-plugins is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef CORE_FILES_JAVA_CONST_H_
23 #define CORE_FILES_JAVA_CONST_H_
24 
25 #include <common/types.h>
26 #include <core/types.h>
27 
28 namespace lsp
29 {
30     namespace java
31     {
32         typedef float               float_t;
33         typedef double              double_t;
34         typedef uint8_t             bool_t;
35         typedef lsp_utf16_t         char_t;
36         typedef int8_t              byte_t;
37         typedef int16_t             short_t;
38         typedef int32_t             int_t;
39         typedef int64_t             long_t;
40 
41         enum stream_token_t
42         {
43             JST_NULL,               ///< Null object reference.
44             JST_REFERENCE,          ///< Reference to an object already written into the stream.
45             JST_CLASS_DESC,         ///< new Class Descriptor.
46             JST_OBJECT,             ///< Object.
47             JST_STRING,             ///< String.
48             JST_ARRAY,              ///< Array.
49             JST_CLASS,              ///< Reference to Class.
50             JST_BLOCK_DATA,         ///< Block of optional data. Byte following tag indicates number of bytes in this block data.
51             JST_END_BLOCK_DATA,     ///< End of block of optional data.
52             JST_RESET,              ///< Reset stream context. All handles written into stream are reset.
53             JST_EXCEPTION,          ///< Exception during write.
54             JST_PROXY_CLASS_DESC,   ///< new Proxy Class Descriptor.
55             JST_ENUM,               ///< new Enum constant, since java 1.5
56 
57             JST_UNDEFINED  = -1
58         };
59 
60         enum cflags_t
61         {
62             JCF_PROXY           = 1 << 0,
63             JCF_WRITE_METHOD    = 1 << 1,
64             JCF_BLOCK_DATA      = 1 << 2,
65             JCF_EXTERNALIZABLE  = 1 << 3,
66             JCF_SERIALIZABLE    = 1 << 4,
67             JCF_ENUM            = 1 << 5
68         };
69 
70         enum ftype_t
71         {
72             JFT_BYTE,
73             JFT_CHAR,
74             JFT_DOUBLE,
75             JFT_FLOAT,
76             JFT_INTEGER,
77             JFT_LONG,
78             JFT_SHORT,
79             JFT_BOOL,
80             JFT_ARRAY,
81             JFT_OBJECT,
82 
83             JFT_TOTAL,
84             JFT_UNKNOWN = -1
85         };
86 
87         /**
88          * Determine size of primitive type
89          * @param type of primitive type
90          * @return size of primitive type
91          */
92         size_t      size_of(ftype_t type);
93 
94         /**
95          * Compute aligned offset of the typed data
96          * @param offset the current offset
97          * @param type data type
98          * @return aligned offset, greater or equal than passed value
99          */
100         size_t      aligned_offset(size_t offset, ftype_t type);
101 
102         /**
103          * Check that type is primitive
104          * @param type type
105          * @return true if type is primitive
106          */
107         bool        is_primitive(ftype_t type);
108 
109         /**
110          * Check that type is reference
111          * @param type type
112          * @return true if type is reference
113          */
114         bool        is_reference(ftype_t type);
115     }
116 }
117 
118 #endif /* INCLUDE_CORE_FILES_JAVA_CONST_H_ */
119