MCPcopy Create free account
hub / github.com/awslabs/aws-lambda-cpp / ThreadLocal

Class ThreadLocal

tests/gtest/gtest.h:1828–1901  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1826// using Google Test have exited when main() returns.
1827template <typename T>
1828class ThreadLocal : public ThreadLocalBase {
1829 public:
1830 ThreadLocal() : default_factory_(new DefaultValueHolderFactory()) {}
1831 explicit ThreadLocal(const T& value)
1832 : default_factory_(new InstanceValueHolderFactory(value)) {}
1833
1834 ~ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed(this); }
1835
1836 T* pointer() { return GetOrCreateValue(); }
1837 const T* pointer() const { return GetOrCreateValue(); }
1838 const T& get() const { return *pointer(); }
1839 void set(const T& value) { *pointer() = value; }
1840
1841 private:
1842 // Holds a value of T. Can be deleted via its base class without the caller
1843 // knowing the type of T.
1844 class ValueHolder : public ThreadLocalValueHolderBase {
1845 public:
1846 ValueHolder() : value_() {}
1847 explicit ValueHolder(const T& value) : value_(value) {}
1848
1849 T* pointer() { return &value_; }
1850
1851 private:
1852 T value_;
1853 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);
1854 };
1855
1856
1857 T* GetOrCreateValue() const {
1858 return static_cast<ValueHolder*>(
1859 ThreadLocalRegistry::GetValueOnCurrentThread(this))->pointer();
1860 }
1861
1862 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread() const {
1863 return default_factory_->MakeNewHolder();
1864 }
1865
1866 class ValueHolderFactory {
1867 public:
1868 ValueHolderFactory() {}
1869 virtual ~ValueHolderFactory() {}
1870 virtual ValueHolder* MakeNewHolder() const = 0;
1871
1872 private:
1873 GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolderFactory);
1874 };
1875
1876 class DefaultValueHolderFactory : public ValueHolderFactory {
1877 public:
1878 DefaultValueHolderFactory() {}
1879 virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
1880
1881 private:
1882 GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
1883 };
1884
1885 class InstanceValueHolderFactory : public ValueHolderFactory {

Callers

nothing calls this directly

Calls 1

pointerFunction · 0.85

Tested by

no test coverage detected