summaryrefslogtreecommitdiffstats
path: root/library/cpp/threading/thread_local/generic.cpp
blob: 41e1b381672ff443fcb7c3cca2a4e1c246aa81b9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "generic.h"

#include "thread_local.h"

namespace {
    class TThreadLocalStorage
        : public NThreading::IGenericLocalStorage
    {
    public:
        TData* GetData() const override {
            return Data_.Get();
        }
    private:
        NThreading::TThreadLocalValue<TData, NThreading::EThreadLocalImpl::StdThreadLocal> Data_;
    };

    NThreading::TGenericLocalStorageFactory genericLocalStorageFactory = []() {
        return MakeHolder<TThreadLocalStorage>();
    };
}

namespace NThreading {
    void SetGenericLocalStorageFactory(TGenericLocalStorageFactory factory) {
        genericLocalStorageFactory = factory;
    }

    THolder<IGenericLocalStorage> MakeGenericLocalStorage() {
        return genericLocalStorageFactory();
    }
}