MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / beforeStructureField

Method beforeStructureField

src/simulate/json_print.cpp:33–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31 }
32 }
33 virtual void beforeStructureField ( char * /*ps*/, StructInfo *si, char * pf, VarInfo * vi, bool ) override {
34 enumAsInt = false;
35 unescape = false;
36 embed = false;
37 optional = false;
38 string name = vi->name ? vi->name : "";
39 if ( vi->annotation_arguments ) {
40 auto aa = (AnnotationArguments *) vi->annotation_arguments;
41 for ( auto arg : *aa ) {
42 if ( arg.name=="enum_as_int" && arg.type==Type::tBool ) {
43 enumAsInt = arg.bValue;
44 } else if ( arg.name=="unescape" && arg.type==Type::tBool ) {
45 unescape = arg.bValue;
46 } else if ( arg.name=="embed" && arg.type==Type::tBool ) {
47 embed = arg.bValue;
48 } else if ( arg.name=="optional" && arg.type==Type::tBool ) {
49 optional = arg.bValue;
50 } else if ( arg.name=="rename" ) {
51 if ( arg.type==Type::tString ) {
52 name = arg.sValue;
53 } else if ( arg.type==Type::tBool && !name.empty() && name[0]=='_' ) {
54 name = name.substr(1);
55 }
56 }
57 }
58 }
59 bool ignoreNextField = false;
60 if ( si->flags & StructInfo::flag_class ) {
61 if (name == "__rtti" || name == "__finalize") {
62 ignoreNextField = true;
63 }
64 }
65 if ( optional && !ignoreNextField ) {
66 if ( vi->type==Type::tInt || vi->type==Type::tUInt ) {
67 auto val = *((uint32_t *)pf);
68 ignoreNextField = val == 0;
69 } else if ( vi->type==Type::tInt8 || vi->type==Type::tUInt8 ) {
70 auto val = *((uint8_t *)pf);
71 ignoreNextField = val == 0;
72 } else if ( vi->type==Type::tInt16 || vi->type==Type::tUInt16 ) {
73 auto val = *((uint16_t *)pf);
74 ignoreNextField = val == 0;
75 } else if ( vi->type==Type::tInt64 || vi->type==Type::tUInt64 ) {
76 auto val = *((uint64_t *)pf);
77 ignoreNextField = val == 0;
78 } else if ( vi->type==Type::tFloat ) {
79 auto val = *((float *)pf);
80 ignoreNextField = val == 0.f;
81 } else if ( vi->type==Type::tDouble ) {
82 auto val = *((double *)pf);
83 ignoreNextField = val == 0.0;
84 } else if ( vi->type==Type::tBool ) {
85 auto val = *((bool *)pf);
86 ignoreNextField = !val;
87 } else if ( vi->type==Type::tString && vi->dimSize==0 ) {
88 auto st = *((char **) pf);
89 ignoreNextField = st==nullptr || strlen(st)==0;
90 } else if ( vi->type==Type::tPointer ) {

Callers

nothing calls this directly

Calls 2

emptyMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected