1 #ifndef STATICTYPE_HPP
2 #define STATICTYPE_HPP
3 
4 /*  $Id: statictype.hpp 572331 2018-10-11 15:49:53Z gouriano $
5 * ===========================================================================
6 *
7 *                            PUBLIC DOMAIN NOTICE
8 *               National Center for Biotechnology Information
9 *
10 *  This software/database is a "United States Government Work" under the
11 *  terms of the United States Copyright Act.  It was written as part of
12 *  the author's official duties as a United States Government employee and
13 *  thus cannot be copyrighted.  This software/database is freely available
14 *  to the public for use. The National Library of Medicine and the U.S.
15 *  Government have not placed any restriction on its use or reproduction.
16 *
17 *  Although all reasonable efforts have been taken to ensure the accuracy
18 *  and reliability of the software and data, the NLM and the U.S.
19 *  Government do not and cannot warrant the performance or results that
20 *  may be obtained by using this software or data. The NLM and the U.S.
21 *  Government disclaim all warranties, express or implied, including
22 *  warranties of performance, merchantability or fitness for any particular
23 *  purpose.
24 *
25 *  Please cite the author in any work or product based on this material.
26 *
27 * ===========================================================================
28 *
29 * Author: Eugene Vasilchenko
30 *
31 * File Description:
32 *   Predefined types: INTEGER, BOOLEAN, VisibleString etc.
33 *
34 */
35 
36 #include "type.hpp"
37 
38 BEGIN_NCBI_SCOPE
39 
40 class CStaticDataType : public CDataType {
41     typedef CDataType CParent;
42 public:
43     virtual void PrintASN(CNcbiOstream& out, int indent) const override;
44     virtual void PrintJSONSchema(CNcbiOstream& out, int indent, list<string>& required, bool contents_only=false) const override;
45     virtual void PrintXMLSchema(CNcbiOstream& out, int indent, bool contents_only=false) const override;
46     virtual void PrintDTDElement(CNcbiOstream& out, bool contents_only=false) const override;
47 
48     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
49 
50     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
51     //virtual string GetDefaultCType(void) const;
52     virtual const char* GetDefaultCType(void) const = 0;
53     virtual const char* GetXMLContents(void) const = 0;
54     virtual bool PrintXMLSchemaContents(CNcbiOstream& out, int indent, const CDataMember* mem) const;
55 };
56 
57 class CNullDataType : public CStaticDataType {
58     typedef CStaticDataType CParent;
59 public:
60     virtual bool CheckValue(const CDataValue& value) const override;
61     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
62 
63     virtual CTypeRef GetTypeInfo(void) override;
64     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
65     virtual const char* GetDefaultCType(void) const override;
66     virtual const char* GetASNKeyword(void) const override;
67     virtual const char* GetDEFKeyword(void) const override;
68     virtual const char* GetXMLContents(void) const override;
69     virtual bool PrintXMLSchemaContents(CNcbiOstream& out, int indent, const CDataMember* mem) const override;
70 };
71 
72 class CBoolDataType : public CStaticDataType {
73     typedef CStaticDataType CParent;
74 public:
75     virtual bool CheckValue(const CDataValue& value) const override;
76     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
77     virtual string GetDefaultString(const CDataValue& value) const override;
78 
79     virtual CTypeRef GetTypeInfo(void) override;
80     virtual const char* GetDefaultCType(void) const override;
81     virtual const char* GetASNKeyword(void) const override;
82     virtual const char* GetDEFKeyword(void) const override;
83     virtual const char* GetXMLContents(void) const override;
84     virtual string GetSchemaTypeString(void) const override;
85     virtual bool PrintXMLSchemaContents(CNcbiOstream& out, int indent, const CDataMember* mem) const override;
86 
87     virtual void PrintDTDExtra(CNcbiOstream& out) const override;
88 };
89 
90 class CRealDataType : public CStaticDataType {
91     typedef CStaticDataType CParent;
92 public:
93     CRealDataType(void);
94     virtual bool CheckValue(const CDataValue& value) const override;
95     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
96     virtual string GetDefaultString(const CDataValue& value) const override;
97 
98     virtual const CTypeInfo* GetRealTypeInfo(void) override;
99     virtual const char* GetDefaultCType(void) const override;
100     virtual const char* GetASNKeyword(void) const override;
101     virtual const char* GetDEFKeyword(void) const override;
102     virtual const char* GetXMLContents(void) const override;
103     virtual string GetSchemaTypeString(void) const override;
104 };
105 
106 class CStringDataType : public CStaticDataType {
107     typedef CStaticDataType CParent;
108 public:
109     enum EType {
110         eStringTypeVisible,
111         eStringTypeUTF8
112     };
113 
114     CStringDataType(EType type = eStringTypeVisible);
115 
116     virtual bool CheckValue(const CDataValue& value) const override;
117     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
118     virtual string GetDefaultString(const CDataValue& value) const override;
119 
120     virtual const CTypeInfo* GetRealTypeInfo(void) override;
121     virtual bool NeedAutoPointer(const CTypeInfo* typeInfo) const override;
122     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
123     virtual const char* GetDefaultCType(void) const override;
124     virtual const char* GetASNKeyword(void) const override;
125     virtual const char* GetDEFKeyword(void) const override;
126     virtual const char* GetXMLContents(void) const override;
127     virtual string GetSchemaTypeString(void) const override;
128 
GetStringType(void) const129     EType GetStringType(void) const
130     {
131         return m_Type;
132     }
133 protected:
134     EType m_Type;
135 };
136 
137 class CStringStoreDataType : public CStringDataType {
138     typedef CStringDataType CParent;
139 public:
140     CStringStoreDataType(void);
141 
142     virtual const CTypeInfo* GetRealTypeInfo(void) override;
143     virtual bool NeedAutoPointer(const CTypeInfo* typeInfo) const override;
144     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
145     virtual const char* GetASNKeyword(void) const override;
146     virtual const char* GetDEFKeyword(void) const override;
147 };
148 
149 class CBitStringDataType : public CStaticDataType {
150     typedef CStaticDataType CParent;
151 public:
152     CBitStringDataType(CDataType* bitenum = nullptr);
153     virtual void FixTypeTree(void) const override;
154     virtual bool CheckValue(const CDataValue& value) const override;
155     virtual const CTypeInfo* GetRealTypeInfo(void) override;
156     virtual bool NeedAutoPointer(const CTypeInfo* typeInfo) const override;
157     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
158     virtual const char* GetDefaultCType(void) const override;
159     virtual const char* GetASNKeyword(void) const override;
160     virtual const char* GetDEFKeyword(void) const override;
161     virtual const char* GetXMLContents(void) const override;
162     virtual bool PrintXMLSchemaContents(CNcbiOstream& out, int indent, const CDataMember* mem) const override;
163 private:
164     CDataType* m_BitStringEnum;
165 };
166 
167 class COctetStringDataType : public CBitStringDataType {
168     typedef CBitStringDataType CParent;
169 public:
170     virtual bool CheckValue(const CDataValue& value) const override;
171     virtual const CTypeInfo* GetRealTypeInfo(void) override;
172     virtual bool NeedAutoPointer(const CTypeInfo* typeInfo) const override;
173     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
174     virtual const char* GetDefaultCType(void) const override;
175     virtual const char* GetASNKeyword(void) const override;
176     virtual const char* GetDEFKeyword(void) const override;
177     virtual const char* GetXMLContents(void) const override;
178     virtual string GetSchemaTypeString(void) const override;
179     virtual bool IsCompressed(void) const;
180 protected:
181     virtual bool x_AsBitString(void) const;
182 };
183 
184 class CBase64BinaryDataType : public COctetStringDataType {
185     typedef COctetStringDataType CParent;
186 public:
187     virtual string GetSchemaTypeString(void) const override;
188     virtual bool IsCompressed(void) const override;
189 protected:
190     virtual bool x_AsBitString(void) const override;
191 };
192 
193 class CIntDataType : public CStaticDataType {
194     typedef CStaticDataType CParent;
195 public:
196     CIntDataType(void);
197     virtual bool CheckValue(const CDataValue& value) const override;
198     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
199     virtual string GetDefaultString(const CDataValue& value) const override;
200 
201     virtual CTypeRef GetTypeInfo(void) override;
202     virtual const char* GetDefaultCType(void) const override;
203     virtual const char* GetASNKeyword(void) const override;
204     virtual const char* GetDEFKeyword(void) const override;
205     virtual const char* GetXMLContents(void) const override;
206     virtual string GetSchemaTypeString(void) const override;
207 };
208 
209 class CBigIntDataType : public CIntDataType {
210     typedef CIntDataType CParent;
211 public:
CBigIntDataType(bool bAsnBigInt=false)212     CBigIntDataType(bool bAsnBigInt = false) : m_bAsnBigInt(bAsnBigInt) {
213     }
214     virtual bool CheckValue(const CDataValue& value) const override;
215     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
216     virtual string GetDefaultString(const CDataValue& value) const override;
217 
218     virtual CTypeRef GetTypeInfo(void) override;
219     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
220     virtual const char* GetDefaultCType(void) const override;
221     virtual const char* GetASNKeyword(void) const override;
222     virtual const char* GetDEFKeyword(void) const override;
223     virtual const char* GetXMLContents(void) const override;
224     virtual string GetSchemaTypeString(void) const override;
225 protected:
226     bool m_bAsnBigInt;
227 };
228 
229 class CAnyContentDataType : public CStaticDataType {
230 public:
231     virtual bool CheckValue(const CDataValue& value) const override;
232     virtual void PrintASN(CNcbiOstream& out, int indent) const override;
233     virtual void PrintJSONSchema(CNcbiOstream& out, int indent, list<string>& required, bool contents_only=false) const override;
234     virtual void PrintXMLSchema(CNcbiOstream& out, int indent, bool contents_only=false) const override;
235     virtual void PrintDTDElement(CNcbiOstream& out, bool contents_only=false) const override;
236 
237     virtual TObjectPtr CreateDefault(const CDataValue& value) const override;
238 
239     virtual AutoPtr<CTypeStrings> GetFullCType(void) const override;
240     virtual const char* GetDefaultCType(void) const override;
241     virtual const char* GetASNKeyword(void) const override;
242     virtual const char* GetDEFKeyword(void) const override;
243     virtual const char* GetXMLContents(void) const override;
244 };
245 
246 END_NCBI_SCOPE
247 
248 #endif
249