# Global Metrics

path: .metrics.halstead.level
old: 0.1484375
new: 0.03970452446906741
path: .metrics.halstead.time
old: 129.91131233981125
new: 2316.0900516194033
path: .metrics.halstead.n1
old: 8.0
new: 19.0
path: .metrics.halstead.volume
old: 347.1067876579332
new: 1655.2665742875513
path: .metrics.halstead.estimated_program_length
old: 104.71062275542812
new: 314.0400072076183
path: .metrics.halstead.vocabulary
old: 27.0
new: 62.0
path: .metrics.halstead.length
old: 73.0
new: 278.0
path: .metrics.halstead.effort
old: 2338.4036221166025
new: 41689.620929149256
path: .metrics.halstead.purity_ratio
old: 1.4343920925401112
new: 1.1296403136964688
path: .metrics.halstead.n2
old: 19.0
new: 43.0
path: .metrics.halstead.N2
old: 32.0
new: 114.0
path: .metrics.halstead.difficulty
old: 6.7368421052631575
new: 25.186046511627907
path: .metrics.halstead.N1
old: 41.0
new: 164.0
path: .metrics.halstead.bugs
old: 0.058725275379725966
new: 0.40077200391326495
path: .metrics.nexits.sum
old: 0.0
new: 2.0
path: .metrics.nexits.average
old: 0.0
new: 0.4
path: .metrics.nargs.average
old: 14.0
new: 0.6
path: .metrics.nargs.sum
old: 14.0
new: 3.0
path: .metrics.cyclomatic.average
old: 1.0
new: 1.125
path: .metrics.cyclomatic.sum
old: 2.0
new: 9.0
path: .metrics.mi.mi_original
old: 76.42633586418862
new: 54.0946805347691
path: .metrics.mi.mi_sei
old: 81.1471788860995
new: 42.62314287251221
path: .metrics.mi.mi_visual_studio
old: 44.69376366326819
new: 31.63431610220415
path: .metrics.loc.blank
old: 2.0
new: 17.0
path: .metrics.loc.ploc
old: 19.0
new: 56.0
path: .metrics.loc.lloc
old: 3.0
new: 13.0
path: .metrics.loc.sloc
old: 51.0
new: 111.0
path: .metrics.loc.cloc
old: 30.0
new: 38.0
path: .metrics.nom.functions
old: 1.0
new: 5.0
path: .metrics.nom.total
old: 1.0
new: 5.0

# Spaces Data

## Minimal test - lines (24, 66)

path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 0.3333333333333333
path: .spaces[0].metrics.loc.lloc
old: 3.0
new: 1.0
path: .spaces[0].metrics.loc.cloc
old: 10.0
new: 11.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 7.0
path: .spaces[0].metrics.loc.ploc
old: 15.0
new: 25.0
path: .spaces[0].metrics.loc.sloc
old: 23.0
new: 43.0
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 3.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 3.0
path: .spaces[0].metrics.nargs.sum
old: 14.0
new: 1.0
path: .spaces[0].metrics.nargs.average
old: 14.0
new: 0.3333333333333333
path: .spaces[0].metrics.halstead.effort
old: 2330.539119760573
new: 8950.709124378141
path: .spaces[0].metrics.halstead.time
old: 129.47439554225406
new: 497.26161802100785
path: .spaces[0].metrics.halstead.bugs
old: 0.05859353184639198
new: 0.1436978844904874
path: .spaces[0].metrics.halstead.N2
old: 28.0
new: 52.0
path: .spaces[0].metrics.halstead.n1
old: 8.0
new: 13.0
path: .spaces[0].metrics.halstead.volume
old: 312.1257749679339
new: 635.5533106067319
path: .spaces[0].metrics.halstead.vocabulary
old: 23.0
new: 37.0
path: .spaces[0].metrics.halstead.length
old: 69.0
new: 122.0
path: .spaces[0].metrics.halstead.difficulty
old: 7.466666666666667
new: 14.083333333333334
path: .spaces[0].metrics.halstead.n2
old: 15.0
new: 24.0
path: .spaces[0].metrics.halstead.N1
old: 41.0
new: 70.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.1971501294801128
new: 1.2962689865011634
path: .spaces[0].metrics.halstead.estimated_program_length
old: 82.60335893412778
new: 158.14481635314195
path: .spaces[0].metrics.halstead.level
old: 0.13392857142857142
new: 0.07100591715976332
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 4.0
path: .spaces[0].metrics.mi.mi_original
old: 90.10928129828456
new: 75.58517905696422
path: .spaces[0].metrics.mi.mi_visual_studio
old: 52.6954861393477
new: 44.2018590976399
path: .spaces[0].metrics.mi.mi_sei
old: 97.0459913087443
new: 69.04279193526021

### Code

    class nsTLiteralString : public mozilla::detail::nsTStringRepr {
     public:
      typedef nsTLiteralString self_type;

    #ifdef __clang__
      // bindgen w/ clang 3.9 at least chokes on a typedef, but using is okay.
      using typename mozilla::detail::nsTStringRepr::base_string_type;
    #else
      // On the other hand msvc chokes on the using statement. It seems others
      // don't care either way so we lump them in here.
      typedef typename mozilla::detail::nsTStringRepr::base_string_type
          base_string_type;
    #endif

      typedef typename base_string_type::char_type char_type;
      typedef typename base_string_type::size_type size_type;
      typedef typename base_string_type::DataFlags DataFlags;
      typedef typename base_string_type::ClassFlags ClassFlags;

     public:
      /**
       * constructor
       */

      template
      explicit constexpr nsTLiteralString(const char_type (&aStr)[N])
          : nsTLiteralString(aStr, N - 1) {}

      /**
       * For compatibility with existing code that requires const ns[C]String*.
       * Use sparingly. If possible, rewrite code to use const ns[C]String&
       * and the implicit cast will just work.
       */
      MOZ_LIFETIME_BOUND const nsTString& AsString() const {
        return *reinterpret_cast*>(this);
      }

      MOZ_LIFETIME_BOUND operator const nsTString&() const { return AsString(); }

      template
      struct raw_type {
        typedef N* type;
      };