/** Prints attributes for a field */ void PrintFileContents10::print_field_attr(std::ostream & ostream , FieldDescription & fdes ) { int array_dim ; ostream << "{\"" << fdes.getName() << "\"" // name << ", \"" << fdes.getFullyQualifiedMangledTypeName("__") << "\"" // type_name << ", \"" << fdes.getUnits() << "\"" // units << ", \"\", \"\"," << std::endl // alias, user_defined << " \"" << fdes.getDescription() << "\"," << std::endl // description << " " << fdes.getIO() // io << "," << fdes.getEnumString() ; // type // There are several cases when printing the size of a variable. if ( fdes.isBitField() ) { // bitfields are handled in 4 byte (32 bit) chunks ostream << ", 4" ; } else if ( fdes.isRecord() or fdes.isEnum() or fdes.getTypeName().empty() ) { // records enums use io_src_get_size. The sentinel has no typename ostream << ", 0" ; } else { // print size of the underlying type ostream << ", sizeof(" << fdes.getTypeName() << ")" ; } ostream << ", 0, 0, Language_CPP" ; // range_min, range_max, language ostream << ", " << (fdes.isStatic() << 1) + (fdes.isDashDashUnits() << 2) << "," << std::endl ; // mods if ( fdes.isBitField() ) { // For bitfields we need the offset to start on 4 byte boundaries because that is what our // insert and extract bitfield routines work with. ostream << " " << (fdes.getFieldOffset() - (fdes.getFieldOffset() % 32)) / 8 ; // offset } else { ostream << " " << (fdes.getFieldOffset() / 8) ; // offset } ostream << ", NULL" ; // attr ostream << ", " << fdes.getNumDims() ; // num_index ostream << ", {" ; if ( fdes.isBitField() ) { ostream << "{" << fdes.getBitFieldWidth() ; // size of bitfield ostream << ", " << 32 - (fdes.getFieldOffset() % 32) - fdes.getBitFieldWidth() << "}" ; // start bit } else { array_dim = fdes.getArrayDim(0) ; if ( array_dim < 0 ) array_dim = 0 ; ostream << "{" << array_dim << ", 0}" ; // index 0 } unsigned int ii ; for ( ii = 1 ; ii < 8 ; ii++ ) { array_dim = fdes.getArrayDim(ii) ; if ( array_dim < 0 ) array_dim = 0 ; ostream << ", {" << array_dim << ", 0}" ; // indexes 1 through 7 } ostream << "}," << std::endl ; ostream << " NULL, NULL, NULL, NULL" ; ostream << "}" ; }
void PrintFileContents10::printStlFunction(const std::string& name, const std::string& parameters, const std::string& call, std::ostream& ostream, FieldDescription& fieldDescription, ClassValues& classValues) { const std::string typeName = fieldDescription.getTypeName(); const std::string functionName = name + "_stl"; ostream << "void " << functionName << "_" << classValues.getFullyQualifiedMangledTypeName("__") << "_" << sanitize(fieldDescription.getName()) << "(" << parameters << ") {" << std::endl << " " << typeName << "* stl = reinterpret_cast<" << typeName << "*>(start_address);" << std::endl << " " << call << ";" << std::endl << "}" << std::endl ; }