72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Smarty
		
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Smarty
		
	
	
	
|  | #include <algorithm>
 | ||
|  | #include "gen_types.h"
 | ||
|  | 
 | ||
|  | using ByteBuf = bright::serialization::ByteBuf;
 | ||
|  | 
 | ||
|  | namespace {{assembly.top_module}}
 | ||
|  | { | ||
|  |     {{~for type in x.types~}}
 | ||
|  | 
 | ||
|  |     bool {{type.cpp_full_name}}::deserialize(ByteBuf& _buf)
 | ||
|  |     { | ||
|  |         {{~if type.parent_def_type~}}
 | ||
|  |         if (!{{type.parent_def_type.cpp_full_name}}::deserialize(_buf))
 | ||
|  |         { | ||
|  |             return false;
 | ||
|  |         }
 | ||
|  |         {{~end~}}
 | ||
|  | 
 | ||
|  |         {{~ for field in type.export_fields ~}}
 | ||
|  |         {{cpp_deserialize '_buf' field.convention_name field.ctype}}
 | ||
|  |         {{~if field.index_field ~}}
 | ||
|  |         for(auto& _v : this->{{field.convention_name}})
 | ||
|  |         {  | ||
|  |             {{field.convention_name}}_Index.insert({_v->{{field.index_field.convention_name}}, _v});
 | ||
|  |         }
 | ||
|  |         {{~end~}}
 | ||
|  |         {{~end~}}
 | ||
|  | 
 | ||
|  |         return true;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     bool {{type.cpp_full_name}}::deserialize{{type.name}}(ByteBuf& _buf, ::bright::SharedPtr<{{type.cpp_full_name}}>& _out)
 | ||
|  |     { | ||
|  |     {{~if type.is_abstract_type~}}
 | ||
|  |         int id;
 | ||
|  |         if (!_buf.readInt(id)) return false;
 | ||
|  |         switch (id)
 | ||
|  |         { | ||
|  |         {{~for child in type.hierarchy_not_abstract_children~}}
 | ||
|  |             case {{child.cpp_full_name}}::__ID__: { _out.reset(new {{child.cpp_full_name}}()); if (_out->deserialize(_buf)) { return true; } else { _out.reset(); return false;} }
 | ||
|  |         {{~end~}}
 | ||
|  |             default: { _out = nullptr; return false;}
 | ||
|  |         }
 | ||
|  |     {{~else~}}
 | ||
|  |         _out.reset(new {{type.cpp_full_name}}());
 | ||
|  |         if (_out->deserialize(_buf))
 | ||
|  |         { | ||
|  |             return true;
 | ||
|  |         }
 | ||
|  |         else
 | ||
|  |         {  | ||
|  |             _out.reset();
 | ||
|  |             return false;
 | ||
|  |         }
 | ||
|  |     {{~end~}}
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     void {{type.cpp_full_name}}::resolve(::bright::HashMap<::bright::String, void*>& _tables)
 | ||
|  |     { | ||
|  |         {{~if type.parent_def_type~}}
 | ||
|  |         {{type.parent_def_type.name}}::resolve(_tables);
 | ||
|  |         {{~end~}}
 | ||
|  |         {{~ for field in type.export_fields ~}}
 | ||
|  |         {{~if field.gen_ref~}}
 | ||
|  |         {{cpp_ref_validator_resolve field}}
 | ||
|  |         {{~else if field.has_recursive_ref~}}
 | ||
|  |         {{cpp_recursive_resolve field '_tables'}}
 | ||
|  |         {{~end~}}
 | ||
|  |         {{~end~}}
 | ||
|  |     }
 | ||
|  |     {{~end~}}
 | ||
|  | }
 |