exip  Alpha 0.5.4
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
bin/headers/procTypes.h
Go to the documentation of this file.
1 /*==================================================================*\
2 | EXIP - Embeddable EXI Processor in C |
3 |--------------------------------------------------------------------|
4 | This work is licensed under BSD 3-Clause License |
5 | The full license terms and conditions are located in LICENSE.txt |
6 \===================================================================*/
7 
18 #ifndef PROCTYPES_H_
19 #define PROCTYPES_H_
20 
21 #include "errorHandle.h"
22 #include <stdint.h>
23 #include <time.h>
24 #include <string.h>
25 #include "exipConfig.h"
26 #include <limits.h>
27 
28 enum boolean
29 {
30  FALSE = 0,
31  TRUE = 1
32 };
33 
34 typedef enum boolean boolean;
35 
36 #ifndef NULL
37 #define NULL ((void *)0)
38 #endif
39 
41 struct stackNode
42 {
43  void* item;
45 };
46 
47 typedef struct stackNode GenericStack;
48 
54 #define REVERSE_BIT_POSITION(p) (7 - p)
55 
65 #define BIT_PACKED 0x00 // 0b00000000
66 #define BYTE_ALIGNMENT 0x40 // 0b01000000
67 #define PRE_COMPRESSION 0x80 // 0b10000000
68 #define ALIGNMENT 0xc0 // 0b11000000
69 
70 #define COMPRESSION 0x01 // 0b00000001
71 #define STRICT 0x02 // 0b00000010
72 #define FRAGMENT 0x04 // 0b00000100
73 #define SELF_CONTAINED 0x08 // 0b00001000
74 
75 #define GET_ALIGNMENT(p) ((p) & ALIGNMENT)
76 #define WITH_COMPRESSION(p) (((p) & COMPRESSION) != 0)
77 #define WITH_STRICT(p) (((p) & STRICT) != 0)
78 #define WITH_FRAGMENT(p) (((p) & FRAGMENT) != 0)
79 #define WITH_SELF_CONTAINED(p) (((p) & SELF_CONTAINED) != 0)
80 
81 #define SET_ALIGNMENT(p, align_const) ((p) = (p) | align_const)
82 #define SET_COMPRESSION(p) ((p) = (p) | COMPRESSION)
83 #define SET_STRICT(p) ((p) = (p) | STRICT)
84 #define SET_FRAGMENT(p) ((p) = (p) | FRAGMENT)
85 #define SET_SELF_CONTAINED(p) ((p) = (p) | SELF_CONTAINED)
86 
105 {
110 };
111 
113 
126 #define PRESERVE_COMMENTS 0x01 // 0b00000001
127 #define PRESERVE_PIS 0x02 // 0b00000010
128 #define PRESERVE_DTD 0x04 // 0b00000100
129 #define PRESERVE_PREFIXES 0x08 // 0b00001000
130 #define PRESERVE_LEXVALUES 0x10 // 0b00010000
131 
132 #define IS_PRESERVED(p, mask) (((p) & (mask)) != 0)
133 #define SET_PRESERVED(p, preserve_const) ((p) = (p) | (preserve_const))
134 
145 {
146  unsigned char offset;
147  unsigned int value;
148 };
149 
151 
156 {
171  struct tm dateTime;
181 
188 };
189 
190 typedef struct EXIPDateTime EXIPDateTime;
191 
201 #define TZONE_PRESENCE 0x01 // 0b00000001
202 #define FRACT_PRESENCE 0x02 // 0b00000010
203 
204 #define IS_PRESENT(p, mask) (((p) & (mask)) != 0)
205 
207 #ifndef EXIP_UNSIGNED_INTEGER
208 # define EXIP_UNSIGNED_INTEGER uint64_t
209 #endif
210 
212 
213 #ifndef EXIP_INTEGER
214 # define EXIP_INTEGER int64_t
215 #endif
216 
218 
227 struct EXIFloat
228 {
231 };
232 
233 #ifndef EXIP_FLOAT
234 # define EXIP_FLOAT struct EXIFloat
235 #endif
236 
238 
252 #ifndef EXIP_DECIMAL
253 # define EXIP_DECIMAL Float
254 #endif
255 
257 
258 #ifndef EXIP_INDEX
259 # define EXIP_INDEX size_t
260 #endif
261 
263 
264 #ifndef EXIP_INDEX_MAX
265 # define EXIP_INDEX_MAX SIZE_MAX
266 #endif
267 
268 #define INDEX_MAX EXIP_INDEX_MAX
269 
270 #ifndef EXIP_SMALL_INDEX
271 # define EXIP_SMALL_INDEX size_t
272 #endif
273 
275 
276 #ifndef EXIP_SMALL_INDEX_MAX
277 # define EXIP_SMALL_INDEX_MAX SIZE_MAX
278 #endif
279 
280 #define SMALL_INDEX_MAX EXIP_SMALL_INDEX_MAX
281 
282 #ifndef EXIP_IMPLICIT_DATA_TYPE_CONVERSION
283 # define EXIP_IMPLICIT_DATA_TYPE_CONVERSION ON
284 #endif
285 
291 #ifndef CHAR_TYPE
292 # define CHAR_TYPE char
293 #endif
294 
296 
297 
298 #ifndef EXIP_STRTOLL
299 
300 # define EXIP_STRTOLL strtoll
301 #endif
302 
307 {
310 };
311 
312 typedef struct StringType String;
313 
317 struct QName {
321  const String* uri;
331  const String* prefix;
332 };
333 
334 typedef struct QName QName;
335 
336 #define URI_MAX SMALL_INDEX_MAX
337 #define LN_MAX INDEX_MAX
338 
342 struct QNameID {
343  SmallIndex uriId; // VOID == URI_MAX
344  Index lnId; // VOID == LN_MAX
345 };
346 
347 typedef struct QNameID QNameID;
348 
355 #define ALLOCATION_ARRAY_SIZE 100
356 
358 struct allocBlock {
361 };
362 
365 struct allocList {
370 };
371 
372 typedef struct allocList AllocList;
373 
386 struct dynArray {
390  size_t entrySize;
391 
399 
404 };
405 
406 typedef struct dynArray DynArray;
407  //End Memory management definitions
409 
410 
480 {
481  EVENT_SD = 0,
482  EVENT_ED = 10,
489  EVENT_EE = 40,
490  EVENT_CH = 50,
491  EVENT_NS = 60,
492  EVENT_CM = 70,
493  EVENT_PI = 80,
494  EVENT_DT = 90,
495  EVENT_ER = 100,
496  EVENT_SC = 110,
499 };
500 
501 typedef enum EventType EventType;
502 
504 {
518 };
519 
521 
522 #define GET_EVENT_CLASS(evnt) (evnt/10)
523 
528 {
550 };
551 
552 typedef enum EXIType EXIType;
553 
558 {
570 };
571 
573 
574 #define GET_VALUE_TYPE_CLASS(value_type) (value_type/10)
575 
576 #define PROD_CONTENT_MASK 0xFFFFFF // 0b00000000111111111111111111111111
577 
578 #define GET_PROD_EXI_EVENT(content) (content>>24)
579 #define GET_PROD_EXI_EVENT_CLASS(content) GET_EVENT_CLASS((content>>24))
580 #define SET_PROD_EXI_EVENT(content, eventType) (content = (content & PROD_CONTENT_MASK) | (((uint32_t) eventType)<<24))
581 #define GET_PROD_NON_TERM(content) (content & PROD_CONTENT_MASK)
582 #define SET_PROD_NON_TERM(content, nt) (content = (content & ~PROD_CONTENT_MASK) | (nt & PROD_CONTENT_MASK))
583 
588 {
595 
606 
612 };
613 
614 typedef struct Production Production;
615 
616 struct EventCode
617 {
620  unsigned char length;
621 };
622 
623 typedef struct EventCode EventCode;
624 
632 #ifndef GR_VOID_NON_TERMINAL
633 # define GR_VOID_NON_TERMINAL SMALL_INDEX_MAX
634 #endif
635 
636 #define GR_DOC_CONTENT 0
637 #define GR_DOC_END 1
638 
639 #define GR_START_TAG_CONTENT 0
640 #define GR_ELEMENT_CONTENT 1
641 #define GR_CONTENT_2 (GR_VOID_NON_TERMINAL-1)
642 
643 #define GR_FRAGMENT_CONTENT 0
644 
650 {
653 
656 
663 };
664 
665 typedef struct GrammarRule GrammarRule;
666 
667 #define RULE_CONTAIN_EE_OR_XSI_TYPE_MASK 0x01 // 0b0000000000000001
668 
669 #define RULE_CONTAIN_EE(meta) ((meta & RULE_CONTAIN_EE_OR_XSI_TYPE_MASK) != 0)
670 #define RULE_SET_CONTAIN_EE(meta) (meta = meta | RULE_CONTAIN_EE_OR_XSI_TYPE_MASK)
671 #define RULE_CONTAIN_XSI_TYPE(meta) ((meta & RULE_CONTAIN_EE_OR_XSI_TYPE_MASK) != 0)
672 #define RULE_SET_CONTAIN_XSI_TYPE(meta) (meta = meta | RULE_CONTAIN_EE_OR_XSI_TYPE_MASK)
673 
674 #define RULE_SET_AT_COUNT(meta, ac) (meta = meta | (ac<<1))
675 #define RULE_GET_AT_COUNT(meta) (meta>>1)
676 
677 #if BUILD_IN_GRAMMARS_USE
678 
683  {
686 
689 
694 
696  Index prodDim; // The size of the productions Dynamic production array /allocated space for Productions in it/
697  };
699 #endif
700 
705 #define IS_NILLABLE(p) ((p & GR_PROP_NILLABLE) != 0)
706 #define IS_BUILT_IN_ELEM(p) ((p & GR_PROP_BUILT_IN_ELEMENT) != 0)
707 #define IS_SCHEMA(p) ((p & GR_PROP_SCHEMA_INFORMED) != 0)
708 #define IS_DOCUMENT(p) ((p & GR_PROP_DOCUMENT) != 0)
709 #define IS_FRAGMENT(p) ((p & GR_PROP_FRAGMENT) != 0)
710 #define HAS_NAMED_SUB_TYPE_OR_UNION(p) ((p & GR_PROP_NAMED_SUB_TYPE_OR_UNION) != 0)
711 #define HAS_CONTENT2(p) ((p & GR_PROP_HAS_CONTENT2) != 0)
712 
713 #define SET_NILLABLE_GR(p) ((p) = (p) | GR_PROP_NILLABLE)
714 #define SET_BUILT_IN_ELEM_GR(p) ((p) = (p) | GR_PROP_BUILT_IN_ELEMENT)
715 #define SET_SCHEMA_GR(p) ((p) = (p) | GR_PROP_SCHEMA_INFORMED)
716 #define SET_DOCUMENT_GR(p) ((p) = (p) | GR_PROP_DOCUMENT)
717 #define SET_FRAGMENT_GR(p) ((p) = (p) | GR_PROP_FRAGMENT)
718 #define SET_NAMED_SUB_TYPE_OR_UNION(p) ((p) = (p) | GR_PROP_NAMED_SUB_TYPE_OR_UNION)
719 #define SET_HAS_CONTENT2(p) ((p) = (p) | GR_PROP_HAS_CONTENT2)
720 
721 #define GR_PROP_BUILT_IN_ELEMENT 0x1000000 // 0b00000001000000000000000000000000
722 #define GR_PROP_SCHEMA_INFORMED 0x2000000 // 0b00000010000000000000000000000000
723 #define GR_PROP_DOCUMENT 0x4000000 // 0b00000100000000000000000000000000
724 #define GR_PROP_FRAGMENT 0x8000000 // 0b00001000000000000000000000000000
725 #define GR_PROP_NILLABLE 0x10000000 // 0b00010000000000000000000000000000
726 #define GR_PROP_NAMED_SUB_TYPE_OR_UNION 0x20000000 // 0b00100000000000000000000000000000
727 /* There is a content2 rule if there are AT productions
728  * that point to the content grammar rule OR the content index is 0. */
729 #define GR_PROP_HAS_CONTENT2 0x40000000 // 0b01000000000000000000000000000000
730 
731 #define GR_CONTENT_INDEX_MASK 0xFFFFFF // 0b00000000111111111111111111111111
732 
733 #define SET_CONTENT_INDEX(props, indx) (props = (props & ~GR_CONTENT_INDEX_MASK) | (indx & GR_CONTENT_INDEX_MASK))
734 #define GET_CONTENT_INDEX(props) (props & GR_CONTENT_INDEX_MASK)
735 
743 {
748 
762 
765 };
766 
767 typedef struct EXIGrammar EXIGrammar;
768 
772 {
774 
783 };
784 
786  // End Grammar Types
788 
789 
793 struct ValueEntry {
794 #if VALUE_CROSSTABLE_USE
795  struct
796  {
799  } locValuePartition; // A reference to the VxEntry for that global value
800 #endif
802 };
803 
804 typedef struct ValueEntry ValueEntry;
805 
806 struct ValueTable {
807 #if DYN_ARRAY_USE == ON
809 #endif
812 #if HASH_TABLE_USE
813 
822 #endif
823 
825 };
826 
827 typedef struct ValueTable ValueTable;
828 
829 #if VALUE_CROSSTABLE_USE
830  struct VxEntry {
832  };
833 
834  typedef struct VxEntry VxEntry;
835 
836  struct VxTable {
837  #if DYN_ARRAY_USE == ON
839  #endif
842  };
843 
844  typedef struct VxTable VxTable;
845 #endif
846 
847 struct PfxTable {
848 #if DYN_ARRAY_USE == ON
850 #endif
853 };
854 
855 typedef struct PfxTable PfxTable;
856 
857 struct LnEntry {
858 #if VALUE_CROSSTABLE_USE
860 #endif
872 };
873 
874 typedef struct LnEntry LnEntry;
875 
876 struct LnTable {
877 #if DYN_ARRAY_USE == ON
879 #endif
882 };
883 
884 typedef struct LnTable LnTable;
885 
886 struct UriEntry {
890 };
891 
892 typedef struct UriEntry UriEntry;
893 
894 struct UriTable {
895 #if DYN_ARRAY_USE == ON
897 #endif
900 };
901 
902 typedef struct UriTable UriTable;
903  // End String Table Types
905 
909 #define TYPE_FACET_LENGTH 0x0001 // 0b0000000000000001
910 #define TYPE_FACET_MIN_LENGTH 0x0002 // 0b0000000000000010
911 #define TYPE_FACET_MAX_LENGTH 0x0004 // 0b0000000000000100
912 #define TYPE_FACET_PATTERN 0x0008 // 0b0000000000001000
913 #define TYPE_FACET_ENUMERATION 0x0010 // 0b0000000000010000
914 #define TYPE_FACET_WHITE_SPACE 0x0020 // 0b0000000000100000
915 #define TYPE_FACET_MAX_INCLUSIVE 0x0040 // 0b0000000001000000
916 #define TYPE_FACET_MAX_EXCLUSIVE 0x0080 // 0b0000000010000000
917 #define TYPE_FACET_MIN_EXCLUSIVE 0x0100 // 0b0000000100000000
918 #define TYPE_FACET_MIN_INCLUSIVE 0x0200 // 0b0000001000000000
919 #define TYPE_FACET_TOTAL_DIGITS 0x0400 // 0b0000010000000000
920 #define TYPE_FACET_FRACTION_DIGITS 0x0800 // 0b0000100000000000
921 #define TYPE_FACET_NAMED_SUBTYPE_UNION 0x1000 // 0b0001000000000000
922 
924 #define ST_CONTENT_MASK 0xFFFFFF // 0b00000000111111111111111111111111
925 
926 #define GET_EXI_TYPE(content) (content>>24)
927 #define SET_EXI_TYPE(content, et) (content = (content & ST_CONTENT_MASK) | (((uint32_t) et)<<24))
928 #define HAS_TYPE_FACET(content, facet) ((content & facet) != 0)
929 #define SET_TYPE_FACET(content, facet) (content = (content | facet))
930 #define REMOVE_TYPE_FACET(content, facet) (content = (content & ~facet))
931 
935 struct SimpleType {
947 
957 };
958 
959 typedef struct SimpleType SimpleType;
960 
963 #if DYN_ARRAY_USE == ON
965 #endif
968 };
969 
971 
974 #define SIMPLE_TYPE_ENTITIES 0
975 #define SIMPLE_TYPE_ENTITY 1
976 #define SIMPLE_TYPE_ID 2
977 #define SIMPLE_TYPE_IDREF 3
978 #define SIMPLE_TYPE_IDREFS 4
979 #define SIMPLE_TYPE_NCNAME 5
980 #define SIMPLE_TYPE_NMTOKEN 6
981 #define SIMPLE_TYPE_NMTOKENS 7
982 #define SIMPLE_TYPE_NOTATION 8
983 #define SIMPLE_TYPE_NAME 9
984 #define SIMPLE_TYPE_QNAME 10
985 #define SIMPLE_TYPE_ANY_SIMPLE_TYPE 11
986 #define SIMPLE_TYPE_ANY_TYPE 12
987 #define SIMPLE_TYPE_ANY_URI 13
988 #define SIMPLE_TYPE_BASE64_BINARY 14
989 #define SIMPLE_TYPE_BOOLEAN 15
990 #define SIMPLE_TYPE_BYTE 16
991 #define SIMPLE_TYPE_DATE 17
992 #define SIMPLE_TYPE_DATE_TIME 18
993 #define SIMPLE_TYPE_DECIMAL 19
994 #define SIMPLE_TYPE_DOUBLE 20
995 #define SIMPLE_TYPE_DURATION 21
996 #define SIMPLE_TYPE_FLOAT 22
997 #define SIMPLE_TYPE_GDAY 23
998 #define SIMPLE_TYPE_GMONTH 24
999 #define SIMPLE_TYPE_GMONTH_DAY 25
1000 #define SIMPLE_TYPE_GYEAR 26
1001 #define SIMPLE_TYPE_GYEAR_MONTH 27
1002 #define SIMPLE_TYPE_HEX_BINARY 28
1003 #define SIMPLE_TYPE_INT 29
1004 #define SIMPLE_TYPE_INTEGER 30
1005 #define SIMPLE_TYPE_LANGUAGE 31
1006 #define SIMPLE_TYPE_LONG 32
1007 #define SIMPLE_TYPE_NEGATIVE_INTEGER 33
1008 #define SIMPLE_TYPE_NON_NEGATIVE_INTEGER 34
1009 #define SIMPLE_TYPE_NON_POSITIVE_INTEGER 35
1010 #define SIMPLE_TYPE_NORMALIZED_STRING 36
1011 #define SIMPLE_TYPE_POSITIVE_INTEGER 37
1012 #define SIMPLE_TYPE_SHORT 38
1013 #define SIMPLE_TYPE_STRING 39
1014 #define SIMPLE_TYPE_TIME 40
1015 #define SIMPLE_TYPE_TOKEN 41
1016 #define SIMPLE_TYPE_UNSIGNED_BYTE 42
1017 #define SIMPLE_TYPE_UNSIGNED_INT 43
1018 #define SIMPLE_TYPE_UNSIGNED_LONG 44
1019 #define SIMPLE_TYPE_UNSIGNED_SHORT 45
1020 
1021 #define SIMPLE_TYPE_COUNT 46
1022 
1024 #define XML_NAMESPACE_ID 1
1025 
1026 #define XML_SCHEMA_INSTANCE_ID 2
1027 #define XML_SCHEMA_INSTANCE_NIL_ID 0
1028 #define XML_SCHEMA_INSTANCE_TYPE_ID 1
1029 
1030 #define XML_SCHEMA_NAMESPACE_ID 3
1031 
1034 #if DYN_ARRAY_USE == ON
1036 #endif
1039 };
1040 
1042 
1043 #if EXI_PROFILE_DEFAULT
1044 // The index of the EXI Profile stub grammar
1045 # define EXI_PROFILE_STUB_GRAMMAR_INDX (INDEX_MAX-1)
1046 #endif
1047 
1051 {
1055  void *values;
1058 };
1059 
1061 
1064 struct EnumTable {
1065 #if DYN_ARRAY_USE == ON
1067 #endif
1070 };
1071 
1072 typedef struct EnumTable EnumTable;
1073 
1080 {
1086 
1091 
1096 
1101 
1106 
1111 
1113 };
1114 
1115 typedef struct EXIPSchema EXIPSchema;
1116 
1118 {
1123 
1128  unsigned char bitPointer;
1129 
1132 
1134  unsigned int expectATData;
1135 
1137  boolean isNilType;
1138 
1141 };
1142 
1144 
1148 struct ioStream
1149 {
1155  size_t (*readWriteToStream)(void* buf, size_t size, void* stream);
1159  void* stream;
1160 };
1161 
1162 typedef struct ioStream IOStream;
1163 
1165 {
1166  void* TODO; //TODO: fill in the information for this structure
1167 };
1168 
1170 
1172 {
1180  unsigned char enumOpt;
1181 
1186  unsigned char preserve;
1187 
1190 
1198 
1203 
1208 
1214 
1220 
1225 };
1226 
1227 typedef struct EXIOptions EXIOptions;
1228 
1233 {
1237  boolean has_cookie;
1238 
1242  boolean has_options;
1243 
1246 
1251 
1253 };
1254 
1255 typedef struct EXIheader EXIheader;
1256 
1258 {
1262  char* buf;
1263 
1268 
1276 
1281 };
1282 
1284 
1289 {
1291 
1297 
1300 
1305 
1310 
1316 
1322 };
1323 
1324 typedef struct EXIStream EXIStream;
1325 
1326 
1327 /**********************Function definitions************************/
1328 
1334 void makeDefaultOpts(EXIOptions* opts);
1335 
1343 
1344 errorCode pushOnStack(GenericStack** stack, void* item);
1345 
1346 void popFromStack(GenericStack** stack, void** item);
1347 
1348 int compareEnumDefs(const void* enum1, const void* enum2);
1349 
1350 #endif /* PROCTYPES_H_ */