File indexing completed on 2024-12-19 04:04:57
0001 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0002
0003
0004 const static int g_staticConst = 23;
0005 static int const &g_ref_staticConst = g_staticConst;
0006 static int const *g_ptr_staticConst = &g_staticConst;
0007
0008
0009 CMS_THREAD_SAFE static int g_static;
0010 static int *g_ptr_static = &g_static;
0011
0012 class ClassTest {
0013 public:
0014 explicit ClassTest();
0015 ~ClassTest();
0016 mutable int m_pubMutable;
0017
0018 void testConst() const;
0019
0020 private:
0021 mutable int m_testMutable;
0022 int *m_testPointer;
0023 int m_testInteger;
0024 };
0025
0026 void ClassTest::testConst() const {
0027
0028 m_testMutable = 23;
0029
0030
0031 (*m_testPointer) = 23;
0032
0033
0034 int *localPtr = m_testPointer;
0035 (*localPtr) = 23;
0036
0037
0038
0039
0040 }
0041
0042 class Thing {
0043 private:
0044 int num;
0045
0046 public:
0047 Thing() : num{0} {}
0048 int getnum() { return num; }
0049 void putnum(int x) { num = x; }
0050 };
0051
0052 class Foo {
0053 private:
0054 int Var_;
0055 int &RVar_ = Var_;
0056 int *PVar_ = &RVar_;
0057 Thing *T_p;
0058
0059 public:
0060 Foo() : Var_{0} { T_p = new Thing; }
0061 void func1(int x) { return; }
0062 void func2(int &x) { return; }
0063 void func3(int *x) { return; }
0064 void func4(int const *x) { return; }
0065 void func5(int *const x) { return; }
0066 void func6(int const &x) { return; }
0067 void nonConstFunc() { Var_ = 5; }
0068 void constFunc() const { return; }
0069 int *nonConstAccess() const { return PVar_; }
0070 int &nonConstRefAccess() const { return RVar_; }
0071 int const *constAccess() const { return PVar_; }
0072 int const &constRefAccess() const { return RVar_; }
0073 Thing *getThing() { return T_p; }
0074 };
0075
0076 class Bar {
0077 CMS_THREAD_SAFE static int si_;
0078 static void const modifyStatic(int &x) { si_ = x; }
0079
0080 private:
0081 Bar() : ci_{0}, ipc_{&i_}, icp_{&i_}, ir_{i_}, icr_{ci_} {}
0082 const int ci_;
0083 int i_;
0084 int const *icp_;
0085 int *ip_;
0086 int *const ipc_;
0087 int &ir_;
0088 int const &icr_;
0089 Foo foo_;
0090
0091 public:
0092 void modifyMember() { i_ = 5; }
0093 void indirectModifyMember() { modifyMember(); }
0094 void recursiveCaller(int i) {
0095 if (i == 0)
0096 return;
0097 recursiveCaller(--i);
0098 }
0099
0100 void method1(int &x) { return; }
0101 void method2(const int &x) const { return; }
0102
0103 void produce() {
0104 Foo *foo = new Foo;
0105 int I = 0;
0106 int *PI;
0107 int const *CPI;
0108 foo->func1(i_);
0109 foo->func1(ci_);
0110 foo->func1(ir_);
0111 foo->func1(icr_);
0112 foo->func1(I);
0113 foo->func2(i_);
0114 foo->func2(ir_);
0115 foo->func2(I);
0116 foo->func6(i_);
0117 foo->func6(ir_);
0118 foo->func6(I);
0119 foo->nonConstFunc();
0120 foo_.nonConstFunc();
0121 foo_.constFunc();
0122 foo->getThing()->getnum();
0123 foo_.getThing()->getnum();
0124 method1(i_);
0125 method1(I);
0126 modifyStatic(I);
0127 modifyMember();
0128 indirectModifyMember();
0129 recursiveCaller(1);
0130 PI = foo_.nonConstAccess();
0131 CPI = foo_.constAccess();
0132 if (*PI == *CPI)
0133 I++;
0134 }
0135
0136 void method3() const {
0137 Foo foo;
0138 int I = 0;
0139 Bar bar;
0140 foo.func1(i_);
0141 foo.func1(ci_);
0142 foo.func1(ir_);
0143 foo.func1(icr_);
0144 foo.func1(I);
0145 foo.func2(ir_);
0146 foo.func2(I);
0147 foo.func6(i_);
0148 foo.func6(ir_);
0149 foo.func6(I);
0150 foo_.nonConstRefAccess();
0151 foo_.constRefAccess();
0152
0153 foo_.nonConstAccess();
0154 foo_.constAccess();
0155 if (i_)
0156 method2(i_);
0157 bar.produce();
0158
0159 int &ir = (int &)(icr_);
0160 int &cir = const_cast<int &>(icr_);
0161 int *ip = (int *)(icp_);
0162 int *cip = const_cast<int *>(icp_);
0163
0164 int const &ira = (int const &)(icr_);
0165
0166 CMS_THREAD_SAFE static int evilStaticLocal = 0;
0167 static int &intRef = evilStaticLocal;
0168 static int *intPtr = &evilStaticLocal;
0169
0170 static const int c_evilStaticLocal = 0;
0171 static int const &c_intRef = evilStaticLocal;
0172 static int const *c_intPtr = &evilStaticLocal;
0173 static const int *c_intPtr_equivalent = &evilStaticLocal;
0174 static int const *const *c_intPtrPtr = &(c_intPtr);
0175 g_static = 23;
0176 si_ = 23;
0177 modifyStatic(I);
0178 }
0179 };
0180
0181 int main() { return 0; }