co-maps/libs/cppjansson/jansson_handle.hpp
2025-11-22 13:58:55 +01:00

47 lines
860 B
C++

#pragma once
#include <algorithm>
struct json_t;
namespace base
{
class JsonHandle
{
void IncRef();
void DecRef();
public:
JsonHandle(json_t * pJson = 0) : m_pJson(pJson) { IncRef(); }
JsonHandle(JsonHandle const & json) : m_pJson(json.m_pJson) { IncRef(); }
~JsonHandle() { DecRef(); }
JsonHandle & operator=(JsonHandle const & json)
{
JsonHandle tmp(json);
tmp.swap(*this);
return *this;
}
void swap(JsonHandle & json) { std::swap(m_pJson, json.m_pJson); }
json_t * get() const { return m_pJson; }
json_t * operator->() const { return m_pJson; }
operator bool() const { return m_pJson != 0; }
/// Attach newly created object without incrementing ref count (it's already == 1).
void AttachNew(json_t * pJson)
{
DecRef();
m_pJson = pJson;
}
private:
json_t * m_pJson;
};
} // namespace base