mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-08 22:57:56 +02:00
70f632bda8f Merge bitcoin-core/libmultiprocess#265: ci: set LC_ALL in shell scripts 8e8e564259a Merge bitcoin-core/libmultiprocess#249: fixes for race conditions on disconnects 05d34cc2ec3 ci: set LC_ALL in shell scripts e606fd84a8c Merge bitcoin-core/libmultiprocess#264: ci: reduce nproc multipliers ff0eed1bf18 refactor: Use loop variable in type-context.h ff1d8ba172a refactor: Move type-context.h getParams() call closer to use 1dbc59a4aa3 race fix: m_on_cancel called after request finishes 1643d05ba07 test: m_on_cancel called after request finishes f5509a31fcc race fix: getParams() called after request cancel 4a60c39f24a test: getParams() called after request cancel f11ec29ed20 race fix: worker thread destroyed before it is initialized a1d643348f4 test: worker thread destroyed before it is initialized 336023382c4 ci: reduce nproc multipliers b090beb9651 Merge bitcoin-core/libmultiprocess#256: ci: cache gnu32 nix store be8622816da ci: cache gnu32 nix store 975270b619c Merge bitcoin-core/libmultiprocess#263: ci: bump timeout factor to 40 09f10e5a598 ci: bump timeout factor to 40 db8f76ad290 Merge bitcoin-core/libmultiprocess#253: ci: run some Bitcoin Core CI jobs 55a9b557b19 ci: set Bitcoin Core CI test repetition fb0fc84d556 ci: add TSan job with instrumented libc++ 0f29c38725b ci: add Bitcoin Core IPC tests (ASan + macOS) 3f64320315d Merge bitcoin-core/libmultiprocess#262: ci: enable clang-tidy in macOS job, use nullptr cd9f8bdc9f0 Merge bitcoin-core/libmultiprocess#258: log: add socket connected info message and demote destroy logs to debug b5d6258a42f Merge bitcoin-core/libmultiprocess#255: fix: use unsigned char cast and sizeof in LogEscape escape sequence d94688e2c32 Merge bitcoin-core/libmultiprocess#251: Improved CustomBuildField for std::optional in IPC/libmultiprocess a9499fad755 mp: use nullptr with pthread_threadid_np f499e37850f ci: enable clang-tidy in macOS job 98f1352159d log: add socket connected info message and demote destroy logs to debug 554a481ea73 fix: use unsigned char cast and sizeof in LogEscape escape sequence 1977b9f3f65 Use std::forward in CustomBuildField for std::optional to allow move semantics, resolves FIXME 22bec918c97 Merge bitcoin-core/libmultiprocess#247: type-map: Work around LLVM 22 "out of bounds index" error 8a5e3ae6ed2 Merge bitcoin-core/libmultiprocess#242: proxy-types: add CustomHasField hook to map Cap'n Proto values to null C++ values e8d35246918 Merge bitcoin-core/libmultiprocess#246: doc: Bump version 8 > 9 97d877053b6 proxy-types: add CustomHasField hook for nullable decode paths 8c2f10252c9 refactor: add missing includes to mp/type-data.h b1638aceb40 doc: Bump version 8 > 9 f61af487217 type-map: Work around LLVM 22 "out of bounds index" error git-subtree-dir: src/ipc/libmultiprocess git-subtree-split: 70f632bda8f80449b6240f98da768206a535a04e
99 lines
2.7 KiB
C++
99 lines
2.7 KiB
C++
// Copyright (c) The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef MP_TEST_FOO_H
|
|
#define MP_TEST_FOO_H
|
|
|
|
#include <cassert>
|
|
#include <functional>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <set>
|
|
#include <vector>
|
|
|
|
namespace mp {
|
|
namespace test {
|
|
|
|
struct FooStruct
|
|
{
|
|
std::string name;
|
|
std::set<int> setint;
|
|
std::vector<bool> vbool;
|
|
};
|
|
|
|
enum class FooEnum : uint8_t { ONE = 1, TWO = 2, };
|
|
|
|
struct FooCustom
|
|
{
|
|
std::string v1;
|
|
int v2;
|
|
};
|
|
|
|
struct FooEmpty
|
|
{
|
|
};
|
|
|
|
struct FooMessage
|
|
{
|
|
std::string message;
|
|
};
|
|
|
|
struct FooMutable
|
|
{
|
|
std::string message;
|
|
};
|
|
|
|
using FooData = std::vector<char>;
|
|
using FooDataRef = std::shared_ptr<const FooData>;
|
|
|
|
class FooCallback
|
|
{
|
|
public:
|
|
virtual ~FooCallback() = default;
|
|
virtual int call(int arg) = 0;
|
|
};
|
|
|
|
class ExtendedCallback : public FooCallback
|
|
{
|
|
public:
|
|
virtual int callExtended(int arg) = 0;
|
|
};
|
|
|
|
class FooImplementation
|
|
{
|
|
public:
|
|
int add(int a, int b) { return a + b; }
|
|
void addOut(int a, int b, int& out) { out = a + b; }
|
|
void addInOut(int x, int& sum) { sum += x; }
|
|
int mapSize(const std::map<std::string, std::string>& map) { return map.size(); }
|
|
FooStruct pass(FooStruct foo) { return foo; }
|
|
void raise(FooStruct foo) { throw foo; }
|
|
void initThreadMap() {}
|
|
int callback(FooCallback& callback, int arg) { return callback.call(arg); }
|
|
int callbackUnique(std::unique_ptr<FooCallback> callback, int arg) { return callback->call(arg); }
|
|
int callbackShared(std::shared_ptr<FooCallback> callback, int arg) { return callback->call(arg); } // NOLINT(performance-unnecessary-value-param)
|
|
void saveCallback(std::shared_ptr<FooCallback> callback) { m_callback = std::move(callback); }
|
|
int callbackSaved(int arg) { return m_callback->call(arg); }
|
|
int callbackExtended(ExtendedCallback& callback, int arg) { return callback.callExtended(arg); }
|
|
FooCustom passCustom(FooCustom foo) { return foo; }
|
|
FooEmpty passEmpty(FooEmpty foo) { return foo; }
|
|
FooMessage passMessage(FooMessage foo) { foo.message += " call"; return foo; }
|
|
void passMutable(FooMutable& foo) { foo.message += " call"; }
|
|
FooEnum passEnum(FooEnum foo) { return foo; }
|
|
int passFn(std::function<int()> fn) { return fn(); }
|
|
std::vector<FooDataRef> passDataPointers(std::vector<FooDataRef> values) { return values; }
|
|
std::shared_ptr<FooCallback> m_callback;
|
|
void callFn() { assert(m_fn); m_fn(); }
|
|
void callFnAsync() { assert(m_fn); m_fn(); }
|
|
int callIntFnAsync(int arg) { assert(m_int_fn); return m_int_fn(arg); }
|
|
std::function<void()> m_fn;
|
|
std::function<int(int)> m_int_fn;
|
|
};
|
|
|
|
} // namespace test
|
|
} // namespace mp
|
|
|
|
#endif // MP_TEST_FOO_H
|