Commit 9f649c90 authored by Jordan Lack's avatar Jordan Lack

Merge branch 'feature/RDL-118' into 'develop'

Feature/rdl 118

See merge request !62
parents ce3a2e1a e1e2cc48
Pipeline #60854814 canceled with stages
in 48 minutes and 33 seconds
...@@ -47,4 +47,7 @@ Added Model::mass variable where you can get the mass of the model ...@@ -47,4 +47,7 @@ Added Model::mass variable where you can get the mass of the model
--- 05-11-2019 --- --- 05-11-2019 ---
Remove the use of raw pointers and replace them with typedef'd std::shared_ptr's Remove the use of raw pointers and replace them with typedef'd std::shared_ptr's
Remove ReferenceFrameHolder Remove ReferenceFrameHolder
Minor rework to ReferenceFrame internal functionality to improve efficiency Minor rework to ReferenceFrame internal functionality to improve efficiency
\ No newline at end of file
--- 05-11-2019 ---
Create types.hpp file that auto generates shared_ptr typedef's
\ No newline at end of file
<?xml version="1.0"?> <?xml version="1.0"?>
<package format="2"> <package format="2">
<name>rdl</name> <name>rdl</name>
<version>3.0.0</version> <version>3.1.0</version>
<description>The rdl meta-package</description> <description>The rdl meta-package</description>
<maintainer email="jlack1987@gmail.com">jordan</maintainer> <maintainer email="jlack1987@gmail.com">jordan</maintainer>
......
#ifndef _HUMAN36MODEL_H #ifndef _HUMAN36MODEL_H
#define _HUMAN36MODEL_H #define _HUMAN36MODEL_H
#include "rdl_dynamics/types.hpp"
namespace RobotDynamics namespace RobotDynamics
{ {
class Model; class Model;
} }
void generate_human36model(RobotDynamics::Model *model); void generate_human36model(RobotDynamics::ModelPtr model);
/* _HUMAN36MODEL_H */ /* _HUMAN36MODEL_H */
#endif #endif
#ifndef _SAMPLE_DATA_H #ifndef _RDL_BENCHMARK_SAMPLE_DATA_H__
#define _SAMPLE_DATA_H #define _RDL_BENCHMARK_SAMPLE_DATA_H__
#include "rdl_dynamics/rdl_eigenmath.h"
struct SampleData struct SampleData
{ {
......
#ifndef _MODEL_GENERATOR_H #ifndef _MODEL_GENERATOR_H
#define _MODEL_GENERATOR_H #define _MODEL_GENERATOR_H
#include "rdl_dynamics/types.hpp"
namespace RobotDynamics namespace RobotDynamics
{ {
class Model; class Model;
} }
void generate_planar_tree(RobotDynamics::Model *model, int depth); void generate_planar_tree(RobotDynamics::ModelPtr model, int depth);
/* _MODEL_GENERATOR_H */ /* _MODEL_GENERATOR_H */
#endif #endif
<?xml version="1.0"?> <?xml version="1.0"?>
<package format="2"> <package format="2">
<name>rdl_benchmark</name> <name>rdl_benchmark</name>
<version>3.0.0</version> <version>3.1.0</version>
<description>The rdl_benchmark package</description> <description>The rdl_benchmark package</description>
<maintainer email="jlack1987@gmail.com">jordan</maintainer> <maintainer email="jlack1987@gmail.com">jordan</maintainer>
......
...@@ -27,7 +27,7 @@ Body create_body(SegmentName segment) ...@@ -27,7 +27,7 @@ Body create_body(SegmentName segment)
return RobotDynamics::Body(SegmentMass[segment], RobotDynamics::Math::Vector3d(SegmentCOM[segment][0], SegmentCOM[segment][1], SegmentCOM[segment][2]), inertia_C); return RobotDynamics::Body(SegmentMass[segment], RobotDynamics::Math::Vector3d(SegmentCOM[segment][0], SegmentCOM[segment][1], SegmentCOM[segment][2]), inertia_C);
} }
void generate_human36model(RobotDynamics::Model *model) void generate_human36model(RobotDynamics::ModelPtr model)
{ {
Body pelvis_body = create_body(SegmentPelvis); Body pelvis_body = create_body(SegmentPelvis);
Body thigh_body = create_body(SegmentThigh); Body thigh_body = create_body(SegmentThigh);
......
...@@ -7,13 +7,14 @@ ...@@ -7,13 +7,14 @@
#include <iomanip> #include <iomanip>
#include <sstream> #include <sstream>
#include "rdl_dynamics/Contacts.h"
#include "rdl_dynamics/Dynamics.h"
#include "rdl_dynamics/Model.h"
#include "rdl_benchmark/model_generator.h" #include "rdl_benchmark/model_generator.h"
#include "rdl_benchmark/Human36Model.h" #include "rdl_benchmark/Human36Model.h"
#include "rdl_benchmark/SampleData.h" #include "rdl_benchmark/SampleData.h"
#include "rdl_benchmark/Timer.h" #include "rdl_benchmark/Timer.h"
#include "rdl_dynamics/Contacts.h"
#include "rdl_dynamics/Dynamics.h"
#include "rdl_dynamics/Model.h"
#include "rdl_dynamics/types.hpp"
#include "rdl_urdfreader/urdfreader.h" #include "rdl_urdfreader/urdfreader.h"
bool have_urdfreader = true; bool have_urdfreader = true;
...@@ -41,7 +42,7 @@ enum ContactsMethod ...@@ -41,7 +42,7 @@ enum ContactsMethod
ContactsMethodLagrangian = 0, ContactsMethodRangeSpaceSparse, ContactsMethodNullSpace, ContactsMethodKokkevis ContactsMethodLagrangian = 0, ContactsMethodRangeSpaceSparse, ContactsMethodNullSpace, ContactsMethodKokkevis
}; };
double run_forward_dynamics_ABA_benchmark(Model *model, int sample_count) double run_forward_dynamics_ABA_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -61,7 +62,7 @@ double run_forward_dynamics_ABA_benchmark(Model *model, int sample_count) ...@@ -61,7 +62,7 @@ double run_forward_dynamics_ABA_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_forward_dynamics_lagrangian_benchmark(Model *model, int sample_count) double run_forward_dynamics_lagrangian_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -84,7 +85,7 @@ double run_forward_dynamics_lagrangian_benchmark(Model *model, int sample_count) ...@@ -84,7 +85,7 @@ double run_forward_dynamics_lagrangian_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_inverse_dynamics_RNEA_benchmark(Model *model, int sample_count) double run_inverse_dynamics_RNEA_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -104,7 +105,7 @@ double run_inverse_dynamics_RNEA_benchmark(Model *model, int sample_count) ...@@ -104,7 +105,7 @@ double run_inverse_dynamics_RNEA_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_CRBA_benchmark(Model *model, int sample_count) double run_CRBA_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -128,7 +129,7 @@ double run_CRBA_benchmark(Model *model, int sample_count) ...@@ -128,7 +129,7 @@ double run_CRBA_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_nle_benchmark(Model *model, int sample_count) double run_nle_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -148,7 +149,7 @@ double run_nle_benchmark(Model *model, int sample_count) ...@@ -148,7 +149,7 @@ double run_nle_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_calc_minv_times_tau_benchmark(Model *model, int sample_count) double run_calc_minv_times_tau_benchmark(ModelPtr model, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -170,7 +171,7 @@ double run_calc_minv_times_tau_benchmark(Model *model, int sample_count) ...@@ -170,7 +171,7 @@ double run_calc_minv_times_tau_benchmark(Model *model, int sample_count)
return duration; return duration;
} }
double run_contacts_lagrangian_benchmark(Model *model, ConstraintSet *constraint_set, int sample_count) double run_contacts_lagrangian_benchmark(ModelPtr model, ConstraintSet *constraint_set, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -188,7 +189,7 @@ double run_contacts_lagrangian_benchmark(Model *model, ConstraintSet *constraint ...@@ -188,7 +189,7 @@ double run_contacts_lagrangian_benchmark(Model *model, ConstraintSet *constraint
return duration; return duration;
} }
double run_contacts_lagrangian_sparse_benchmark(Model *model, ConstraintSet *constraint_set, int sample_count) double run_contacts_lagrangian_sparse_benchmark(ModelPtr model, ConstraintSet *constraint_set, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -206,7 +207,7 @@ double run_contacts_lagrangian_sparse_benchmark(Model *model, ConstraintSet *con ...@@ -206,7 +207,7 @@ double run_contacts_lagrangian_sparse_benchmark(Model *model, ConstraintSet *con
return duration; return duration;
} }
double run_contacts_null_space(Model *model, ConstraintSet *constraint_set, int sample_count) double run_contacts_null_space(ModelPtr model, ConstraintSet *constraint_set, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -224,7 +225,7 @@ double run_contacts_null_space(Model *model, ConstraintSet *constraint_set, int ...@@ -224,7 +225,7 @@ double run_contacts_null_space(Model *model, ConstraintSet *constraint_set, int
return duration; return duration;
} }
double run_contacts_kokkevis_benchmark(Model *model, ConstraintSet *constraint_set, int sample_count) double run_contacts_kokkevis_benchmark(ModelPtr model, ConstraintSet *constraint_set, int sample_count)
{ {
SampleData sample_data; SampleData sample_data;
sample_data.fillRandom(model->dof_count, sample_count); sample_data.fillRandom(model->dof_count, sample_count);
...@@ -245,7 +246,7 @@ double run_contacts_kokkevis_benchmark(Model *model, ConstraintSet *constraint_s ...@@ -245,7 +246,7 @@ double run_contacts_kokkevis_benchmark(Model *model, ConstraintSet *constraint_s
double contacts_benchmark(int sample_count, ContactsMethod contacts_method) double contacts_benchmark(int sample_count, ContactsMethod contacts_method)
{ {
// initialize the human model // initialize the human model
Model *model = new Model(); ModelPtr model(new Model());
generate_human36model(model); generate_human36model(model);
// initialize the constraint sets // initialize the constraint sets
...@@ -459,8 +460,6 @@ double contacts_benchmark(int sample_count, ContactsMethod contacts_method) ...@@ -459,8 +460,6 @@ double contacts_benchmark(int sample_count, ContactsMethod contacts_method)
cout << "ConstraintSet: 4 Bodies 4 Constraints: " << " duration = " << setw(10) << duration << "(s)" << " (~" << setw(10) << duration / sample_count << "(s) per call)" << endl; cout << "ConstraintSet: 4 Bodies 4 Constraints: " << " duration = " << setw(10) << duration << "(s)" << " (~" << setw(10) << duration / sample_count << "(s) per call)" << endl;
delete model;
return duration; return duration;
} }
...@@ -599,9 +598,7 @@ int main(int argc, char *argv[]) ...@@ -599,9 +598,7 @@ int main(int argc, char *argv[])
{ {
parse_args(argc, argv); parse_args(argc, argv);
Model *model = NULL; ModelPtr model(new Model());
model = new Model();
if(model_file != "") if(model_file != "")
{ {
...@@ -637,8 +634,6 @@ int main(int argc, char *argv[]) ...@@ -637,8 +634,6 @@ int main(int argc, char *argv[])
run_nle_benchmark(model, benchmark_sample_count); run_nle_benchmark(model, benchmark_sample_count);
} }
delete model;
return 0; return 0;
} }
...@@ -649,14 +644,12 @@ int main(int argc, char *argv[]) ...@@ -649,14 +644,12 @@ int main(int argc, char *argv[])
cout << "= Forward Dynamics: ABA =" << endl; cout << "= Forward Dynamics: ABA =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_forward_dynamics_ABA_benchmark(model, benchmark_sample_count); run_forward_dynamics_ABA_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
...@@ -666,14 +659,12 @@ int main(int argc, char *argv[]) ...@@ -666,14 +659,12 @@ int main(int argc, char *argv[])
cout << "= Forward Dynamics: Lagrangian (Piv. LU decomposition) =" << endl; cout << "= Forward Dynamics: Lagrangian (Piv. LU decomposition) =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_forward_dynamics_lagrangian_benchmark(model, benchmark_sample_count); run_forward_dynamics_lagrangian_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
...@@ -683,14 +674,12 @@ int main(int argc, char *argv[]) ...@@ -683,14 +674,12 @@ int main(int argc, char *argv[])
cout << "= Inverse Dynamics: RNEA =" << endl; cout << "= Inverse Dynamics: RNEA =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_inverse_dynamics_RNEA_benchmark(model, benchmark_sample_count); run_inverse_dynamics_RNEA_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
...@@ -700,14 +689,12 @@ int main(int argc, char *argv[]) ...@@ -700,14 +689,12 @@ int main(int argc, char *argv[])
cout << "= Joint Space Inertia Matrix: CRBA =" << endl; cout << "= Joint Space Inertia Matrix: CRBA =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_CRBA_benchmark(model, benchmark_sample_count); run_CRBA_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
...@@ -717,14 +704,12 @@ int main(int argc, char *argv[]) ...@@ -717,14 +704,12 @@ int main(int argc, char *argv[])
cout << "= Nonlinear Effects =" << endl; cout << "= Nonlinear Effects =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_nle_benchmark(model, benchmark_sample_count); run_nle_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
...@@ -734,14 +719,12 @@ int main(int argc, char *argv[]) ...@@ -734,14 +719,12 @@ int main(int argc, char *argv[])
cout << "= CalcMInvTimesTau =" << endl; cout << "= CalcMInvTimesTau =" << endl;
for(int depth = 1; depth <= benchmark_model_max_depth; depth++) for(int depth = 1; depth <= benchmark_model_max_depth; depth++)
{ {
model = new Model(); model.reset(new Model());
model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.); model->gravity = SpatialVector(0., 0., 0., 0., -9.81, 0.);
generate_planar_tree(model, depth); generate_planar_tree(model, depth);
run_calc_minv_times_tau_benchmark(model, benchmark_sample_count); run_calc_minv_times_tau_benchmark(model, benchmark_sample_count);
delete model;
} }
cout << endl; cout << endl;
} }
......
#include "rdl_benchmark/model_generator.h" #include "rdl_benchmark/model_generator.h"
#include "rdl_dynamics/Model.h" #include "rdl_dynamics/Model.h"
#include "rdl_dynamics/types.hpp"
using namespace RobotDynamics; using namespace RobotDynamics;
using namespace RobotDynamics::Math; using namespace RobotDynamics::Math;
void generate_planar_tree_recursive(Model *model, unsigned int parent_body_id, int depth, double length) void generate_planar_tree_recursive(ModelPtr model, unsigned int parent_body_id, int depth, double length)
{ {
if(depth == 0) if(depth == 0)
{ {
...@@ -26,7 +27,7 @@ void generate_planar_tree_recursive(Model *model, unsigned int parent_body_id, i ...@@ -26,7 +27,7 @@ void generate_planar_tree_recursive(Model *model, unsigned int parent_body_id, i
generate_planar_tree_recursive(model, child_right, depth - 1, length * 0.4); generate_planar_tree_recursive(model, child_right, depth - 1, length * 0.4);
} }
void generate_planar_tree(Model *model, int depth) void generate_planar_tree(ModelPtr model, int depth)
{ {
// we first add a single body that is hanging straight down from // we first add a single body that is hanging straight down from
// (0, 0, 0). After that we generate the tree recursively such that each // (0, 0, 0). After that we generate the tree recursively such that each
......
<?xml version="1.0"?> <?xml version="1.0"?>
<package format="2"> <package format="2">
<name>rdl_cmake</name> <name>rdl_cmake</name>
<version>2.0.1</version> <version>3.1.0</version>
<description>The rdl_cmake package</description> <description>The rdl_cmake package</description>
<maintainer email="jlack1987@gmail.com">jordan</maintainer> <maintainer email="jlack1987@gmail.com">jordan</maintainer>
......
indent_align_string=true
indent_braces=false
indent_braces_no_func=false
indent_brace_parent=false
indent_namespace=true
indent_extern=false
indent_class=true
indent_class_colon=true
indent_else_if=false
indent_func_call_param=false
indent_func_def_param=false
indent_func_proto_param=false
indent_func_class_param=false
indent_func_ctor_var_param=false
indent_template_param=false
indent_func_param_double=false
indent_relative_single_line_comments=false
indent_col1_comment=true
indent_access_spec_body=false
indent_paren_nl=false
indent_comma_paren=false
indent_bool_paren=false
indent_square_nl=false
indent_preserve_sql=false
indent_align_assign=true
sp_balance_nested_parens=false
align_keep_tabs=false
align_with_tabs=false
align_on_tabstop=false
align_number_left=true
align_func_params=true
# version 0.59 which is 16.04 default, if the following line is true it will segfault on a list of files
align_same_func_call_params=false
align_var_def_colon=true
align_var_def_attribute=true
align_var_def_inline=true
align_right_cmt_mix=false
align_on_operator=true
align_mix_var_proto=false
align_single_line_func=true
align_single_line_brace=true
align_nl_cont=true
align_left_shift=true
nl_collapse_empty_body=true
nl_assign_leave_one_liners=false
nl_class_leave_one_liners=false
nl_enum_leave_one_liners=false
nl_getset_leave_one_liners=false
nl_func_leave_one_liners=false
nl_if_leave_one_liners=false
nl_multi_line_cond=false
nl_multi_line_define=false
nl_before_case=true
nl_after_case=false
nl_after_return=true
nl_after_semicolon=false
nl_after_brace_open=false
nl_after_brace_open_cmt=false
nl_after_vbrace_open=false
nl_after_brace_close=false
nl_define_macro=true
nl_squeeze_ifdef=false
nl_ds_struct_enum_cmt=true
nl_ds_struct_enum_close_brace=true
nl_create_if_one_liner=true
nl_create_for_one_liner=true
nl_create_while_one_liner=true
ls_for_split_full=false
ls_func_split_full=true
nl_after_multiline_comment=true
eat_blanks_after_open_brace=true
eat_blanks_before_close_brace=true
mod_pawn_semicolon=false
mod_full_paren_if_bool=true
mod_remove_extra_semicolon=true
mod_sort_import=false
mod_sort_using=false
mod_sort_include=false
mod_move_case_break=true
mod_remove_empty_return=true
cmt_indent_multi=true
cmt_c_group=false
cmt_c_nl_start=false
cmt_c_nl_end=false
cmt_cpp_group=false
cmt_cpp_nl_start=false
cmt_cpp_nl_end=false
cmt_cpp_to_c=false
cmt_star_cont=false
cmt_multi_check_last=true
cmt_insert_before_preproc=false
pp_indent_at_level=false
pp_region_indent_code=false
pp_if_indent_code=false
pp_define_at_level=false
indent_columns=4
align_var_def_span=1
align_var_def_star_style=2
align_var_def_amp_style=2
align_var_def_thresh=3
align_var_def_gap=1
align_assign_span=1
align_enum_equ_span=1
align_var_struct_span=1
align_struct_init_span=1
align_typedef_span=1
align_typedef_star_style=2
align_typedef_amp_style=2
align_right_cmt_span=4
align_right_cmt_at_col=1
align_func_proto_span=3
nl_end_of_file_min=1
nl_func_var_def_blk=1
code_width=128
nl_max=3
nl_after_func_proto=0
nl_after_func_body=2
nl_after_func_body_one_liner=2
nl_before_block_comment=2
nl_before_c_comment=2
nl_before_cpp_comment=2
nl_before_access_spec=2
nl_after_access_spec=2
nl_comment_func_def=1
nl_after_try_catch_finally=1
mod_full_brace_nl=1
mod_add_long_ifdef_endif_comment=1
mod_add_long_ifdef_else_comment=1
cmt_width=128
newlines=auto
indent_with_tabs=0
sp_arith=add
sp_assign=add
sp_enum_assign=add
sp_pp_concat=add
sp_pp_stringify=add
sp_bool=add
sp_compare=add
sp_inside_paren=remove
sp_paren_paren=remove
sp_paren_brace=add
sp_before_ptr_star=add
sp_before_unnamed_ptr_star=add
sp_between_ptr_star=remove
sp_after_ptr_star=remove
sp_after_ptr_star_func=add
sp_before_ptr_star_func=remove
sp_before_byref=remove
sp_before_unnamed_byref=remove
sp_after_byref=add
sp_after_byref_func=add
sp_before_byref_func=remove
sp_after_type=add
sp_before_angle=remove
sp_inside_angle=remove
sp_after_angle=remove
sp_angle_paren=remove
sp_angle_word=remove
sp_before_sparen=add
sp_inside_sparen=remove
sp_sparen_brace=add
sp_special_semi=remove
sp_before_semi=remove
sp_before_semi_for=remove
sp_before_semi_for_empty=remove
sp_after_semi_for_empty=remove
sp_before_square=remove
sp_before_squares=remove
sp_inside_square=remove
sp_after_comma=add
sp_before_comma=remove
sp_after_class_colon=add
sp_before_class_colon=add
sp_before_case_colon=remove
sp_after_operator=remove
sp_after_operator_sym=remove
sp_after_cast=remove
sp_inside_paren_cast=remove
sp_cpp_cast_paren=remove
sp_sizeof_paren=remove
sp_inside_braces_enum=add
sp_inside_braces_struct=add
sp_inside_braces=add
sp_inside_braces_empty=remove
sp_type_func=add
sp_func_proto_paren=remove
sp_func_def_paren=remove
sp_inside_fparens=remove
sp_inside_fparen=remove
sp_square_fparen=remove
sp_fparen_brace=add
sp_func_call_paren=remove
sp_func_call_user_paren=remove
sp_func_class_paren=remove
sp_return_paren=add
sp_attribute_paren=remove
sp_defined_paren=remove
sp_throw_paren=remove
sp_macro=add
sp_macro_func=remove
sp_else_brace=add
sp_brace_else=add
sp_brace_typedef=add
sp_catch_brace=add
sp_brace_catch=add
sp_finally_brace=add
sp_brace_finally=add
sp_try_brace=add
sp_getset_brace=add
sp_before_dc=remove
sp_after_dc=remove
sp_not=remove