class SomeClass
{
    public:
        // Short parameters
        TYPE_EXPORT method1(int     a,
                                     float      b);

        TYPE_EXPORT method2(int&     d,
                                     float      e);

        TYPE_EXPORT method3(int*     f,
                   float      g);

        // Parameters with '&' and '*'
        TYPE_EXPORT method4(int     a);
        TYPE_EXPORT method5(int         & a);
        TYPE_EXPORT method6(int    *     a);

        TYPE_EXPORT method7(float     a);
        TYPE_EXPORT method8(float         & a);
        TYPE_EXPORT method9(float    * a);

        // Single short and long parameters
        void method10(int     a);
        void method11(float         & a);
        void method12(SomeLongNamespace::SomeLongType       long_parameter_name);
        void method13(double    * a);
        void method14(SomeLongType       long_parameter_name);

        // Long parameters
        void method20(int           * int_param,
                             SomeLongNamespace::SomeLongType       long_parameter_name,
                             float  & float_param);

        // Possible bug: different aligning in method21 and method22
        // align_func_params_span = 1, align_func_params_thresh = 8
        void method21(SomeLoooooooooooooongType long_param_1,
            const string& string_param_1,
                    const TimePoint& time_param,
            double  double_param_1,
                    double    double_param_2,
                const string& string_param_2,
                  SomeLoooooooooooooongType    long_param_2 );
        void method22(SomeLoooooooooooooongType long_param_1,
            const string& string_param_1,
            double  double_param_1,
                    double    double_param_2,
                              const TimePoint& time_param,
                const string& string_param_2,
                  SomeLoooooooooooooongType    long_param_2 );

        void method23(int int_param,
        int * int_ptr_param,
        float float_param,
        float & float_ref_param,
                             SomeLongNamespace::SomeLongType       long_parameter_name,
           int   * other_int_param,
                       SomeLooooongType       long_parameter_name,
                 SomeLoooooooooongType looong_parameter_name,
                      SomeLongNamespace::OtherLongNamespace::SomeLongType very_long_parameter_name,
        int   * int_ptr_param,
        float float_param,
        float & float_ref_param,
        double    & double_param,
                             SomeLongNamespace::SomeLongType       long_parameter_name,
                             int * other_int_param);

        // Don't align several parameters in one line
        void method30(int*     f, char foo,
                   float      g);

        // Short parameters in method definition
        void method40(int     a,
                                     float      b)
                                     {
                                        int c;

                                        if ( true ) callProc;
                                        // do stuff.
                                    }

        // Long parameters in method definition
        void method50(int         int_param,
                             SomeLongNamespace::OtherLongNamespace::SomeLongType       long_parameter_name,
                             float         float_param,
                             double double_param,
                             const string & string_param)
                             {
                             doSomething();
                             }

        void method51(
        int         int_param,
                             SomeLongNamespace::OtherLongNamespace::SomeLongType       long_parameter_name,
                             float         float_param,
                             double double_param,
                             const string & string_param)
                             {
                             doSomething();
                             }
        void increasing_length(
        int         int_param,
                             float         float_param,
                             double double_param,
                             ah_long_t & string_param,
                             very_long_type t_param,
                             even_longer_type l_param)
                             {
                             doSomething();
                             }
};
