[Bf-blender-cvs] [7206226ee0c] soc-2020-io-performance: Importer: Use switch-case instead of else-if chain in main code.
Ankit Meel
noreply at git.blender.org
Fri Dec 4 19:57:27 CET 2020
Commit: 7206226ee0cc328ba3a0d3443e23f4d4e4e754c7
Author: Ankit Meel
Date: Tue Dec 1 22:46:56 2020 +0530
Branches: soc-2020-io-performance
https://developer.blender.org/rB7206226ee0cc328ba3a0d3443e23f4d4e4e754c7
Importer: Use switch-case instead of else-if chain in main code.
===================================================================
M source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
M source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
===================================================================
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
index 2af5c1a612b..9a909504b50 100644
--- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
+++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.cc
@@ -328,69 +328,89 @@ void OBJParser::parse(Vector<std::unique_ptr<Geometry>> &r_all_geometries,
continue;
}
- if (line_key == "v") {
- OBJStorer storer(*current_geometry);
- storer.add_vertex(rest_line, r_global_vertices);
- }
- else if (line_key == "vn") {
- OBJStorer storer(*current_geometry);
- storer.add_vertex_normal(rest_line, r_global_vertices);
- }
- else if (line_key == "vt") {
- OBJStorer storer(*current_geometry);
- storer.add_uv_vertex(rest_line, r_global_vertices);
- }
- else if (line_key == "f") {
- OBJStorer storer(*current_geometry);
- storer.add_polygon(rest_line,
- offsets,
- r_global_vertices,
- state_material_name,
- state_material_name,
- state_shaded_smooth);
- }
- else if (line_key == "l") {
- OBJStorer storer(*current_geometry);
- storer.add_edge(rest_line, offsets, r_global_vertices);
- }
- else if (line_key == "mtllib") {
- mtl_libraries_.append(string(rest_line));
- }
- else if (line_key == "o") {
- state_shaded_smooth = false;
- state_object_group = "";
- state_material_name = "";
- current_geometry = create_geometry(
- current_geometry, GEOM_MESH, rest_line, r_global_vertices, r_all_geometries, offsets);
- }
- else if (line_key == "cstype") {
- OBJStorer storer(*current_geometry);
- storer.set_curve_type(
- rest_line, r_global_vertices, state_object_group, offsets, r_all_geometries);
- }
- else if (line_key == "deg") {
- OBJStorer storer(*current_geometry);
- storer.set_curve_degree(rest_line);
- }
- else if (line_key == "curv") {
- OBJStorer storer(*current_geometry);
- storer.add_curve_vertex_indices(rest_line, r_global_vertices);
- }
- else if (line_key == "parm") {
- OBJStorer storer(*current_geometry);
- storer.add_curve_parameters(rest_line);
- }
- else if (line_key == "g") {
- OBJStorer storer(*current_geometry);
- storer.update_object_group(rest_line, state_object_group);
- }
- else if (line_key == "s") {
- OBJStorer storer(*current_geometry);
- storer.update_smooth_group(rest_line, state_shaded_smooth);
- }
- else if (line_key == "usemtl") {
- OBJStorer storer(*current_geometry);
- storer.update_polygon_material(rest_line, state_material_name);
+ switch (line_key_str_to_enum(line_key)) {
+ case eOBJLineKey::V: {
+ OBJStorer storer(*current_geometry);
+ storer.add_vertex(rest_line, r_global_vertices);
+ break;
+ }
+ case eOBJLineKey::VN: {
+ OBJStorer storer(*current_geometry);
+ storer.add_vertex_normal(rest_line, r_global_vertices);
+ break;
+ }
+ case eOBJLineKey::VT: {
+ OBJStorer storer(*current_geometry);
+ storer.add_uv_vertex(rest_line, r_global_vertices);
+ break;
+ }
+ case eOBJLineKey::F: {
+ OBJStorer storer(*current_geometry);
+ storer.add_polygon(rest_line,
+ offsets,
+ r_global_vertices,
+ state_material_name,
+ state_material_name,
+ state_shaded_smooth);
+ break;
+ }
+ case eOBJLineKey::L: {
+ OBJStorer storer(*current_geometry);
+ storer.add_edge(rest_line, offsets, r_global_vertices);
+ break;
+ }
+ case eOBJLineKey::CSTYPE: {
+ OBJStorer storer(*current_geometry);
+ storer.set_curve_type(
+ rest_line, r_global_vertices, state_object_group, offsets, r_all_geometries);
+ break;
+ }
+ case eOBJLineKey::DEG: {
+ OBJStorer storer(*current_geometry);
+ storer.set_curve_degree(rest_line);
+ break;
+ }
+ case eOBJLineKey::CURV: {
+ OBJStorer storer(*current_geometry);
+ storer.add_curve_vertex_indices(rest_line, r_global_vertices);
+ break;
+ }
+ case eOBJLineKey::PARM: {
+ OBJStorer storer(*current_geometry);
+ storer.add_curve_parameters(rest_line);
+ break;
+ }
+ case eOBJLineKey::O: {
+ state_shaded_smooth = false;
+ state_object_group = "";
+ state_material_name = "";
+ current_geometry = create_geometry(
+ current_geometry, GEOM_MESH, rest_line, r_global_vertices, r_all_geometries, offsets);
+ break;
+ }
+ case eOBJLineKey::G: {
+ OBJStorer storer(*current_geometry);
+ storer.update_object_group(rest_line, state_object_group);
+ break;
+ }
+ case eOBJLineKey::S: {
+ OBJStorer storer(*current_geometry);
+ storer.update_smooth_group(rest_line, state_shaded_smooth);
+ break;
+ }
+ case eOBJLineKey::USEMTL: {
+ OBJStorer storer(*current_geometry);
+ storer.update_polygon_material(rest_line, state_material_name);
+ break;
+ }
+ case eOBJLineKey::MTLLIB: {
+ mtl_libraries_.append(string(rest_line));
+ break;
+ }
+ case eOBJLineKey::COMMENT:
+ ATTR_FALLTHROUGH;
+ default:
+ break;
}
}
}
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
index 48fa2df6096..359aa93f06f 100644
--- a/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
+++ b/source/blender/io/wavefront_obj/importer/obj_import_file_reader.hh
@@ -80,6 +80,75 @@ class OBJStorer {
std::string &r_state_material_name) const;
void update_smooth_group(const StringRef rest_line, bool &r_state_shaded_smooth) const;
};
+
+enum class eOBJLineKey {
+ V,
+ VN,
+ VT,
+ F,
+ L,
+ CSTYPE,
+ DEG,
+ CURV,
+ PARM,
+ O,
+ G,
+ S,
+ USEMTL,
+ MTLLIB,
+ COMMENT
+};
+
+constexpr eOBJLineKey line_key_str_to_enum(const std::string_view key_str)
+{
+ if (key_str == "v" || key_str == "V") {
+ return eOBJLineKey::V;
+ }
+ if (key_str == "vn" || key_str == "VN") {
+ return eOBJLineKey::VN;
+ }
+ if (key_str == "vt" || key_str == "VT") {
+ return eOBJLineKey::VT;
+ }
+ if (key_str == "f" || key_str == "F") {
+ return eOBJLineKey::F;
+ }
+ if (key_str == "l" || key_str == "L") {
+ return eOBJLineKey::L;
+ }
+ if (key_str == "cstype" || key_str == "CSTYPE") {
+ return eOBJLineKey::CSTYPE;
+ }
+ if (key_str == "deg" || key_str == "DEG") {
+ return eOBJLineKey::DEG;
+ }
+ if (key_str == "curv" || key_str == "CURV") {
+ return eOBJLineKey::CURV;
+ }
+ if (key_str == "parm" || key_str == "PARM") {
+ return eOBJLineKey::PARM;
+ }
+ if (key_str == "o" || key_str == "O") {
+ return eOBJLineKey::O;
+ }
+ if (key_str == "g" || key_str == "G") {
+ return eOBJLineKey::G;
+ }
+ if (key_str == "s" || key_str == "S") {
+ return eOBJLineKey::S;
+ }
+ if (key_str == "usemtl" || key_str == "USEMTL") {
+ return eOBJLineKey::USEMTL;
+ }
+ if (key_str == "mtllib" || key_str == "MTLLIB") {
+ return eOBJLineKey::MTLLIB;
+ }
+ if (key_str == "#") {
+ return eOBJLineKey::COMMENT;
+ }
+ return eOBJLineKey::COMMENT;
+}
+
/**
* All texture map options with number of arguments they accept.
*/
More information about the Bf-blender-cvs
mailing list