/*
- * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
void *data;
};
+// Discouraged: Use CbcPointer<> and asynchronous calls instead if possible.
+/// an old-style void* callback parameter
+class CallbackData
+{
+public:
+ CallbackData(): data_(nullptr) {}
+ CallbackData(void *data): data_(cbdataReference(data)) {}
+ CallbackData(const CallbackData &other): data_(cbdataReference(other.data_)) {}
+ CallbackData(CallbackData &&other): data_(other.data_) { other.data_ = nullptr; }
+ ~CallbackData() { cbdataReferenceDone(data_); }
+
+ CallbackData &operator =(const CallbackData &other);
+ CallbackData &operator =(CallbackData &&other) { cbdataReferenceDone(data_); data_ = other.data_; other.data_ = nullptr; return *this; }
+
+ bool valid() const { return cbdataReferenceValid(data_); }
+ void *validDone() { void *result; return cbdataReferenceValidDone(data_, &result) ? result : nullptr; }
+
+private:
+ void *data_; ///< raw callback data, maybe invalid
+};
+
#endif /* SQUID_CBDATA_H */