refcount: convert to C++
This commit is contained in:
parent
fa34dd7bd3
commit
ba51045d9e
@ -99,7 +99,6 @@ mpd_headers = \
|
|||||||
src/poison.h \
|
src/poison.h \
|
||||||
src/riff.h \
|
src/riff.h \
|
||||||
src/aiff.h \
|
src/aiff.h \
|
||||||
src/refcount.h \
|
|
||||||
src/replay_gain_config.h \
|
src/replay_gain_config.h \
|
||||||
src/replay_gain_info.h \
|
src/replay_gain_info.h \
|
||||||
src/replay_gain_ape.h \
|
src/replay_gain_ape.h \
|
||||||
@ -310,6 +309,7 @@ endif
|
|||||||
# Generic utility library
|
# Generic utility library
|
||||||
|
|
||||||
libutil_a_SOURCES = \
|
libutil_a_SOURCES = \
|
||||||
|
src/util/RefCount.hxx \
|
||||||
src/util/fifo_buffer.c src/util/fifo_buffer.h \
|
src/util/fifo_buffer.c src/util/fifo_buffer.h \
|
||||||
src/util/growing_fifo.c src/util/growing_fifo.h \
|
src/util/growing_fifo.c src/util/growing_fifo.h \
|
||||||
src/util/LazyRandomEngine.cxx src/util/LazyRandomEngine.hxx \
|
src/util/LazyRandomEngine.cxx src/util/LazyRandomEngine.hxx \
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "InputInternal.hxx"
|
#include "InputInternal.hxx"
|
||||||
#include "InputStream.hxx"
|
#include "InputStream.hxx"
|
||||||
#include "InputPlugin.hxx"
|
#include "InputPlugin.hxx"
|
||||||
#include "refcount.h"
|
#include "util/RefCount.hxx"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
@ -45,18 +45,17 @@
|
|||||||
struct Bzip2ArchiveFile {
|
struct Bzip2ArchiveFile {
|
||||||
struct archive_file base;
|
struct archive_file base;
|
||||||
|
|
||||||
struct refcount ref;
|
RefCount ref;
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
struct input_stream *istream;
|
struct input_stream *istream;
|
||||||
|
|
||||||
Bzip2ArchiveFile() {
|
Bzip2ArchiveFile() {
|
||||||
archive_file_init(&base, &bz2_archive_plugin);
|
archive_file_init(&base, &bz2_archive_plugin);
|
||||||
refcount_init(&ref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unref() {
|
void Unref() {
|
||||||
if (!refcount_dec(&ref))
|
if (!ref.Decrement())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_free(name);
|
g_free(name);
|
||||||
@ -174,7 +173,7 @@ Bzip2InputStream::Bzip2InputStream(Bzip2ArchiveFile &_context, const char *uri,
|
|||||||
:base(bz2_inputplugin, uri, mutex, cond),
|
:base(bz2_inputplugin, uri, mutex, cond),
|
||||||
archive(&_context), eof(false)
|
archive(&_context), eof(false)
|
||||||
{
|
{
|
||||||
refcount_inc(&archive->ref);
|
archive->ref.Increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
Bzip2InputStream::~Bzip2InputStream()
|
Bzip2InputStream::~Bzip2InputStream()
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "InputInternal.hxx"
|
#include "InputInternal.hxx"
|
||||||
#include "InputStream.hxx"
|
#include "InputStream.hxx"
|
||||||
#include "InputPlugin.hxx"
|
#include "InputPlugin.hxx"
|
||||||
#include "refcount.h"
|
#include "util/RefCount.hxx"
|
||||||
|
|
||||||
#include <cdio/cdio.h>
|
#include <cdio/cdio.h>
|
||||||
#include <cdio/iso9660.h>
|
#include <cdio/iso9660.h>
|
||||||
@ -44,14 +44,13 @@
|
|||||||
struct Iso9660ArchiveFile {
|
struct Iso9660ArchiveFile {
|
||||||
struct archive_file base;
|
struct archive_file base;
|
||||||
|
|
||||||
struct refcount ref;
|
RefCount ref;
|
||||||
|
|
||||||
iso9660_t *iso;
|
iso9660_t *iso;
|
||||||
|
|
||||||
Iso9660ArchiveFile(iso9660_t *_iso)
|
Iso9660ArchiveFile(iso9660_t *_iso)
|
||||||
:iso(_iso) {
|
:iso(_iso) {
|
||||||
archive_file_init(&base, &iso9660_archive_plugin);
|
archive_file_init(&base, &iso9660_archive_plugin);
|
||||||
refcount_init(&ref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~Iso9660ArchiveFile() {
|
~Iso9660ArchiveFile() {
|
||||||
@ -59,7 +58,7 @@ struct Iso9660ArchiveFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Unref() {
|
void Unref() {
|
||||||
if (refcount_dec(&ref))
|
if (ref.Decrement())
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,7 +160,7 @@ struct Iso9660InputStream {
|
|||||||
base.ready = true;
|
base.ready = true;
|
||||||
base.size = statbuf->size;
|
base.size = statbuf->size;
|
||||||
|
|
||||||
refcount_inc(&archive->ref);
|
archive->ref.Increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
~Iso9660InputStream() {
|
~Iso9660InputStream() {
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "InputInternal.hxx"
|
#include "InputInternal.hxx"
|
||||||
#include "InputStream.hxx"
|
#include "InputStream.hxx"
|
||||||
#include "InputPlugin.hxx"
|
#include "InputPlugin.hxx"
|
||||||
#include "refcount.h"
|
#include "util/RefCount.hxx"
|
||||||
|
|
||||||
#include <zzip/zzip.h>
|
#include <zzip/zzip.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
@ -38,17 +38,16 @@
|
|||||||
struct ZzipArchiveFile {
|
struct ZzipArchiveFile {
|
||||||
struct archive_file base;
|
struct archive_file base;
|
||||||
|
|
||||||
struct refcount ref;
|
RefCount ref;
|
||||||
|
|
||||||
ZZIP_DIR *dir;
|
ZZIP_DIR *dir;
|
||||||
|
|
||||||
ZzipArchiveFile() {
|
ZzipArchiveFile() {
|
||||||
archive_file_init(&base, &zzip_archive_plugin);
|
archive_file_init(&base, &zzip_archive_plugin);
|
||||||
refcount_init(&ref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unref() {
|
void Unref() {
|
||||||
if (!refcount_dec(&ref))
|
if (!ref.Decrement())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//close archive
|
//close archive
|
||||||
@ -136,7 +135,7 @@ struct ZzipInputStream {
|
|||||||
zzip_file_stat(file, &z_stat);
|
zzip_file_stat(file, &z_stat);
|
||||||
base.size = z_stat.st_size;
|
base.size = z_stat.st_size;
|
||||||
|
|
||||||
refcount_inc(&archive->ref);
|
archive->ref.Increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
~ZzipInputStream() {
|
~ZzipInputStream() {
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include "InputInternal.hxx"
|
#include "InputInternal.hxx"
|
||||||
#include "InputStream.hxx"
|
#include "InputStream.hxx"
|
||||||
#include "InputPlugin.hxx"
|
#include "InputPlugin.hxx"
|
||||||
#include "refcount.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2003-2011 The Music Player Daemon Project
|
* Copyright (C) 2003-2013 The Music Player Daemon Project
|
||||||
* http://www.musicpd.org
|
* http://www.musicpd.org
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -33,35 +33,27 @@
|
|||||||
* A very simple reference counting library.
|
* A very simple reference counting library.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MPD_REFCOUNT_H
|
#ifndef MPD_REFCOUNT_HXX
|
||||||
#define MPD_REFCOUNT_H
|
#define MPD_REFCOUNT_HXX
|
||||||
|
|
||||||
#include <glib.h>
|
#include <atomic>
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
struct refcount {
|
class RefCount {
|
||||||
gint n;
|
std::atomic_uint n;
|
||||||
|
|
||||||
|
public:
|
||||||
|
constexpr RefCount():n(1) {}
|
||||||
|
|
||||||
|
void Increment() {
|
||||||
|
++n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the number of references has been dropped to 0
|
||||||
|
*/
|
||||||
|
bool Decrement() {
|
||||||
|
return --n == 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void
|
|
||||||
refcount_init(struct refcount *r)
|
|
||||||
{
|
|
||||||
r->n = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
refcount_inc(struct refcount *r)
|
|
||||||
{
|
|
||||||
g_atomic_int_inc(&r->n);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return true if the number of references has been dropped to 0
|
|
||||||
*/
|
|
||||||
static inline bool
|
|
||||||
refcount_dec(struct refcount *r)
|
|
||||||
{
|
|
||||||
return g_atomic_int_dec_and_test(&r->n);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user