Global Metrics
path: .metrics.loc.cloc
old: 33.0
new: 14.0
path: .metrics.loc.sloc
old: 147.0
new: 111.0
path: .metrics.loc.lloc
old: 48.0
new: 24.0
path: .metrics.loc.blank
old: 12.0
new: 25.0
path: .metrics.loc.ploc
old: 102.0
new: 72.0
path: .metrics.nexits.average
old: 2.3333333333333335
new: 0.375
path: .metrics.nexits.sum
old: 7.0
new: 6.0
path: .metrics.cognitive.sum
old: 51.0
new: 4.0
path: .metrics.cognitive.average
old: 17.0
new: 0.25
path: .metrics.cyclomatic.average
old: 4.666666666666667
new: 1.2
path: .metrics.cyclomatic.sum
old: 28.0
new: 24.0
path: .metrics.nom.functions
old: 3.0
new: 16.0
path: .metrics.nom.total
old: 3.0
new: 16.0
path: .metrics.mi.mi_visual_studio
old: 24.434475708659587
new: 29.388992644632513
path: .metrics.mi.mi_original
old: 41.78295346180789
new: 50.255177422321594
path: .metrics.mi.mi_sei
old: 20.92290670679796
new: 25.38793452300892
path: .metrics.halstead.purity_ratio
old: 0.7240332500883389
new: 0.8394694462854901
path: .metrics.halstead.n1
old: 32.0
new: 19.0
path: .metrics.halstead.N2
old: 201.0
new: 114.0
path: .metrics.halstead.n2
old: 40.0
new: 35.0
path: .metrics.halstead.volume
old: 3177.5113757427907
new: 1784.0151256706752
path: .metrics.halstead.estimated_program_length
old: 372.8771237954945
new: 260.23552834850193
path: .metrics.halstead.vocabulary
old: 72.0
new: 54.0
path: .metrics.halstead.N1
old: 314.0
new: 196.0
path: .metrics.halstead.bugs
old: 1.3420669675018355
new: 0.48326429377850955
path: .metrics.halstead.effort
old: 255471.9146097204
new: 55202.52517432404
path: .metrics.halstead.length
old: 515.0
new: 310.0
path: .metrics.halstead.difficulty
old: 80.4
new: 30.942857142857143
path: .metrics.halstead.time
old: 14192.884144984468
new: 3066.806954129114
path: .metrics.halstead.level
old: 0.01243781094527363
new: 0.032317636195752536
path: .metrics.nargs.sum
old: 12.0
new: 3.0
path: .metrics.nargs.average
old: 4.0
new: 0.1875
Spaces Data
Minimal test - lines (15, 83)
path: .spaces[0].spaces[0].metrics.cognitive.average
old: 10.0
new: 0.4
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 20.0
new: 4.0
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 39.87561706590443
new: 36.44172944670708
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 42.14045137589348
new: 40.89742939918386
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 68.18730518269658
new: 62.3153573538691
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.02364864864864865
new: 0.042042042042042045
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 133.0
new: 134.0
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 45.0
new: 46.0
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 48070.974702615975
new: 27327.428237452354
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.4406908472386488
new: 0.3024205184725387
path: .spaces[0].spaces[0].metrics.halstead.time
old: 2670.6097057008874
new: 1518.190457636242
path: .spaces[0].spaces[0].metrics.halstead.length
old: 207.0
new: 208.0
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 42.285714285714285
new: 23.785714285714285
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 202.27776589566173
new: 209.6645878435745
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 21.0
new: 28.0
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 0.9771872748582692
new: 1.0080028261710312
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 1136.8135909402426
new: 1148.9008868598587
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 24.0
new: 18.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 2.0
new: 10.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 2.0
new: 10.0
path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 3.6666666666666665
new: 1.3636363636363635
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 11.0
new: 15.0
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 3.0
new: 5.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: 1.5
new: 0.5
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 8.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nargs.average
old: 4.0
new: 0.1
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 3.0
new: 8.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 51.0
new: 69.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 43.0
new: 47.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 5.0
new: 14.0
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 21.0
new: 18.0
Code
class MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS StaticMonitor {
public:
// In debug builds, check that mMutex is initialized for us as we expect by
// the compiler. In non-debug builds, don't declare a constructor so that
// the compiler can see that the constructor is trivial.
#ifdef DEBUG
StaticMonitor() { MOZ_ASSERT(!mMutex); }
#endif
void Lock() { Mutex()->Lock(); }
void Unlock() { Mutex()->Unlock(); }
void Wait() { CondVar()->Wait(); }
CVStatus Wait(TimeDuration aDuration) { return CondVar()->Wait(aDuration); }
void Notify() { CondVar()->Notify(); }
void NotifyAll() { CondVar()->NotifyAll(); }
void AssertCurrentThreadOwns() {
#ifdef DEBUG
Mutex()->AssertCurrentThreadOwns();
#endif
}
private:
OffTheBooksMutex* Mutex() {
if (mMutex) {
return mMutex;
}
OffTheBooksMutex* mutex = new OffTheBooksMutex("StaticMutex");
if (!mMutex.compareExchange(nullptr, mutex)) {
delete mutex;
}
return mMutex;
}
OffTheBooksCondVar* CondVar() {
if (mCondVar) {
return mCondVar;
}
OffTheBooksCondVar* condvar =
new OffTheBooksCondVar(*Mutex(), "StaticCondVar");
if (!mCondVar.compareExchange(nullptr, condvar)) {
delete condvar;
}
return mCondVar;
}
Atomic mMutex;
Atomic mCondVar;
// Disallow copy constructor, but only in debug mode. We only define
// a default constructor in debug mode (see above); if we declared
// this constructor always, the compiler wouldn't generate a trivial
// default constructor for us in non-debug mode.
#ifdef DEBUG
StaticMonitor(const StaticMonitor& aOther);
#endif
// Disallow these operators.
StaticMonitor& operator=(const StaticMonitor& aRhs);
static void* operator new(size_t) noexcept(true);
static void operator delete(void*);
};
Minimal test - lines (85, 107)
path: .spaces[0].spaces[1].metrics.cyclomatic.average
old: 15.0
new: 1.0
path: .spaces[0].spaces[1].metrics.cyclomatic.sum
old: 15.0
new: 7.0
path: .spaces[0].spaces[1].metrics.nom.total
old: 1.0
new: 6.0
path: .spaces[0].spaces[1].metrics.nom.functions
old: 1.0
new: 6.0
path: .spaces[0].spaces[1].metrics.loc.sloc
old: 59.0
new: 23.0
path: .spaces[0].spaces[1].metrics.loc.cloc
old: 4.0
new: 0.0
path: .spaces[0].spaces[1].metrics.loc.blank
old: 3.0
new: 5.0
path: .spaces[0].spaces[1].metrics.loc.lloc
old: 27.0
new: 6.0
path: .spaces[0].spaces[1].metrics.loc.ploc
old: 52.0
new: 18.0
path: .spaces[0].spaces[1].metrics.cognitive.average
old: 31.0
new: 0.0
path: .spaces[0].spaces[1].metrics.cognitive.sum
old: 31.0
new: 0.0
path: .spaces[0].spaces[1].metrics.nexits.average
old: 4.0
new: 0.16666666666666666
path: .spaces[0].spaces[1].metrics.nexits.sum
old: 4.0
new: 1.0
path: .spaces[0].spaces[1].metrics.nargs.average
old: 4.0
new: 0.3333333333333333
path: .spaces[0].spaces[1].metrics.nargs.sum
old: 4.0
new: 2.0
path: .spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 269.2118756352258
new: 81.32499728470782
path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.7404778703368656
new: 0.10666308499650824
path: .spaces[0].spaces[1].metrics.halstead.effort
old: 104700.80188977654
new: 5724.045705933682
path: .spaces[0].spaces[1].metrics.halstead.n2
old: 28.0
new: 13.0
path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 0.9033955558229052
new: 0.865159545581998
path: .spaces[0].spaces[1].metrics.halstead.vocabulary
old: 56.0
new: 23.0
path: .spaces[0].spaces[1].metrics.halstead.volume
old: 1730.591766773166
new: 425.2148238693592
path: .spaces[0].spaces[1].metrics.halstead.level
old: 0.01652892561983471
new: 0.07428571428571429
path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 60.5
new: 13.461538461538462
path: .spaces[0].spaces[1].metrics.halstead.length
old: 298.0
new: 94.0
path: .spaces[0].spaces[1].metrics.halstead.n1
old: 28.0
new: 10.0
path: .spaces[0].spaces[1].metrics.halstead.N1
old: 177.0
new: 59.0
path: .spaces[0].spaces[1].metrics.halstead.N2
old: 121.0
new: 35.0
path: .spaces[0].spaces[1].metrics.halstead.time
old: 5816.711216098697
new: 318.0025392185379
path: .spaces[0].spaces[1].metrics.mi.mi_original
old: 62.72155621697999
new: 87.12150225438629
path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 36.67927264150877
new: 50.94824693238965
path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: 35.940785987278275
new: 50.70164628101821
Code
class MOZ_STACK_CLASS StaticMonitorAutoLock {
public:
explicit StaticMonitorAutoLock(StaticMonitor& aMonitor)
: mMonitor(&aMonitor) {
mMonitor->Lock();
}
~StaticMonitorAutoLock() { mMonitor->Unlock(); }
void Wait() { mMonitor->Wait(); }
CVStatus Wait(TimeDuration aDuration) { return mMonitor->Wait(aDuration); }
void Notify() { mMonitor->Notify(); }
void NotifyAll() { mMonitor->NotifyAll(); }
private:
StaticMonitorAutoLock();
StaticMonitorAutoLock(const StaticMonitorAutoLock&);
StaticMonitorAutoLock& operator=(const StaticMonitorAutoLock&);
static void* operator new(size_t) noexcept(true);
StaticMonitor* mMonitor;
};
Minimal test - lines (13, 109)
path: .spaces[0].metrics.cyclomatic.average
old: 5.4
new: 1.2105263157894737
path: .spaces[0].metrics.cyclomatic.sum
old: 27.0
new: 23.0
path: .spaces[0].metrics.nargs.average
old: 4.0
new: 0.1875
path: .spaces[0].metrics.nargs.sum
old: 12.0
new: 3.0
path: .spaces[0].metrics.nom.functions
old: 3.0
new: 16.0
path: .spaces[0].metrics.nom.total
old: 3.0
new: 16.0
path: .spaces[0].metrics.loc.ploc
old: 98.0
new: 67.0
path: .spaces[0].metrics.loc.blank
old: 10.0
new: 22.0
path: .spaces[0].metrics.loc.cloc
old: 26.0
new: 8.0
path: .spaces[0].metrics.loc.lloc
old: 48.0
new: 24.0
path: .spaces[0].metrics.loc.sloc
old: 134.0
new: 97.0
path: .spaces[0].metrics.nexits.average
old: 2.3333333333333335
new: 0.375
path: .spaces[0].metrics.nexits.sum
old: 7.0
new: 6.0
path: .spaces[0].metrics.cognitive.sum
old: 51.0
new: 4.0
path: .spaces[0].metrics.cognitive.average
old: 17.0
new: 0.25
path: .spaces[0].metrics.halstead.N1
old: 314.0
new: 196.0
path: .spaces[0].metrics.halstead.n1
old: 32.0
new: 19.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 359.42124551085624
new: 240.71062275542812
path: .spaces[0].metrics.halstead.vocabulary
old: 70.0
new: 51.0
path: .spaces[0].metrics.halstead.time
old: 14534.788190077494
new: 3149.082381253863
path: .spaces[0].metrics.halstead.length
old: 512.0
new: 306.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 0.7019946201383911
new: 0.7866360220765625
path: .spaces[0].metrics.halstead.effort
old: 261626.1874213949
new: 56683.48286256953
path: .spaces[0].metrics.halstead.difficulty
old: 83.36842105263158
new: 32.65625
path: .spaces[0].metrics.halstead.bugs
old: 1.3635347805527236
new: 0.4918693526448436
path: .spaces[0].metrics.halstead.level
old: 0.011994949494949496
new: 0.03062200956937799
path: .spaces[0].metrics.halstead.n2
old: 38.0
new: 32.0
path: .spaces[0].metrics.halstead.volume
old: 3138.192904675823
new: 1735.7621546432774
path: .spaces[0].metrics.halstead.N2
old: 198.0
new: 110.0
path: .spaces[0].metrics.mi.mi_original
old: 43.57770273391675
new: 52.81183238191761
path: .spaces[0].metrics.mi.mi_sei
old: 21.45054263263197
new: 24.350862563779422
path: .spaces[0].metrics.mi.mi_visual_studio
old: 25.48403668650102
new: 30.884112504045387
Code
namespace mozilla {
class MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS StaticMonitor {
public:
// In debug builds, check that mMutex is initialized for us as we expect by
// the compiler. In non-debug builds, don't declare a constructor so that
// the compiler can see that the constructor is trivial.
#ifdef DEBUG
StaticMonitor() { MOZ_ASSERT(!mMutex); }
#endif
void Lock() { Mutex()->Lock(); }
void Unlock() { Mutex()->Unlock(); }
void Wait() { CondVar()->Wait(); }
CVStatus Wait(TimeDuration aDuration) { return CondVar()->Wait(aDuration); }
void Notify() { CondVar()->Notify(); }
void NotifyAll() { CondVar()->NotifyAll(); }
void AssertCurrentThreadOwns() {
#ifdef DEBUG
Mutex()->AssertCurrentThreadOwns();
#endif
}
private:
OffTheBooksMutex* Mutex() {
if (mMutex) {
return mMutex;
}
OffTheBooksMutex* mutex = new OffTheBooksMutex("StaticMutex");
if (!mMutex.compareExchange(nullptr, mutex)) {
delete mutex;
}
return mMutex;
}
OffTheBooksCondVar* CondVar() {
if (mCondVar) {
return mCondVar;
}
OffTheBooksCondVar* condvar =
new OffTheBooksCondVar(*Mutex(), "StaticCondVar");
if (!mCondVar.compareExchange(nullptr, condvar)) {
delete condvar;
}
return mCondVar;
}
Atomic mMutex;
Atomic mCondVar;
// Disallow copy constructor, but only in debug mode. We only define
// a default constructor in debug mode (see above); if we declared
// this constructor always, the compiler wouldn't generate a trivial
// default constructor for us in non-debug mode.
#ifdef DEBUG
StaticMonitor(const StaticMonitor& aOther);
#endif
// Disallow these operators.
StaticMonitor& operator=(const StaticMonitor& aRhs);
static void* operator new(size_t) noexcept(true);
static void operator delete(void*);
};
class MOZ_STACK_CLASS StaticMonitorAutoLock {
public:
explicit StaticMonitorAutoLock(StaticMonitor& aMonitor)
: mMonitor(&aMonitor) {
mMonitor->Lock();
}
~StaticMonitorAutoLock() { mMonitor->Unlock(); }
void Wait() { mMonitor->Wait(); }
CVStatus Wait(TimeDuration aDuration) { return mMonitor->Wait(aDuration); }
void Notify() { mMonitor->Notify(); }
void NotifyAll() { mMonitor->NotifyAll(); }
private:
StaticMonitorAutoLock();
StaticMonitorAutoLock(const StaticMonitorAutoLock&);
StaticMonitorAutoLock& operator=(const StaticMonitorAutoLock&);
static void* operator new(size_t) noexcept(true);
StaticMonitor* mMonitor;
};
} // namespace mozilla
Minimal test - lines (21, 21)
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N1
old: 27.0
new: 5.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n2
old: 8.0
new: 3.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.52317159110577
new: 1.5943609377704335
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.effort
old: 2424.6016612318103
new: 44.91767875292167
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.N2
old: 17.0
new: 3.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.bugs
old: 0.06015970216882179
new: 0.00421201861424495
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.level
old: 0.0784313725490196
new: 0.5
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.volume
old: 190.16483617504392
new: 22.458839376460833
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 67.01955000865388
new: 12.754887502163468
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.difficulty
old: 12.75
new: 2.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.vocabulary
old: 20.0
new: 7.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.length
old: 44.0
new: 8.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.n1
old: 12.0
new: 4.0
path: .spaces[0].spaces[0].spaces[0].metrics.halstead.time
old: 134.70009229065613
new: 2.495426597384537
path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_sei
old: 85.69109548237262
new: 147.42610035996177
path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_original
old: 111.72722106000656
new: 154.58924178123317
path: .spaces[0].spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 65.33755617544244
new: 90.4030653691422
path: .spaces[0].spaces[0].spaces[0].metrics.loc.sloc
old: 7.0
new: 1.0
path: .spaces[0].spaces[0].spaces[0].metrics.loc.lloc
old: 2.0
new: 1.0
path: .spaces[0].spaces[0].spaces[0].metrics.loc.ploc
old: 7.0
new: 1.0
path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.average
old: 2.0
new: 1.0
path: .spaces[0].spaces[0].spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 1.0
path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].spaces[0].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].spaces[0].metrics.nargs.average
old: 3.0
new: 0.0
path: .spaces[0].spaces[0].spaces[0].metrics.nargs.sum
old: 3.0
new: 0.0
Code
StaticMonitor() { MOZ_ASSERT(!mMutex); }
Minimal test - lines (24, 24)
path: .spaces[0].spaces[0].spaces[1].metrics.cyclomatic.sum
old: 8.0
new: 1.0
path: .spaces[0].spaces[0].spaces[1].metrics.cyclomatic.average
old: 8.0
new: 1.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.volume
old: 797.0463649412294
new: 28.07354922057604
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.time
old: 1238.61989119725
new: 5.848656087620008
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.difficulty
old: 27.97222222222222
new: 3.75
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 155.76927278138973
new: 13.60964047443681
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n2
old: 18.0
new: 2.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.effort
old: 22295.158041550498
new: 105.27580957716016
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.bugs
old: 0.26404976305207567
new: 0.007431864881853823
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.N1
old: 100.0
new: 7.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 1.0180998221005866
new: 1.360964047443681
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.level
old: 0.03574975173783516
new: 0.26666666666666666
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.length
old: 153.0
new: 10.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.vocabulary
old: 37.0
new: 7.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.N2
old: 53.0
new: 3.0
path: .spaces[0].spaces[0].spaces[1].metrics.halstead.n1
old: 19.0
new: 5.0
path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_original
old: 76.36624636958318
new: 153.42889531439928
path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_sei
old: 53.141306214423864
new: 145.75207426654748
path: .spaces[0].spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 44.658623607943376
new: 89.72450018385923
path: .spaces[0].spaces[0].spaces[1].metrics.nargs.sum
old: 5.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.nargs.average
old: 5.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.loc.cloc
old: 2.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.loc.lloc
old: 19.0
new: 1.0
path: .spaces[0].spaces[0].spaces[1].metrics.loc.ploc
old: 32.0
new: 1.0
path: .spaces[0].spaces[0].spaces[1].metrics.loc.blank
old: 2.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.loc.sloc
old: 36.0
new: 1.0
path: .spaces[0].spaces[0].spaces[1].metrics.nexits.sum
old: 3.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.nexits.average
old: 3.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.cognitive.sum
old: 19.0
new: 0.0
path: .spaces[0].spaces[0].spaces[1].metrics.cognitive.average
old: 19.0
new: 0.0
Code
void Lock() { Mutex()->Lock(); }