aboutsummaryrefslogtreecommitdiffstats
path: root/src/page.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-01-30 09:18:52 +0100
committerMax Kellermann <max@duempel.org>2013-01-30 09:18:52 +0100
commitfe3f0332f71258354b70e5db685b56934f0df703 (patch)
tree9f3f51ad0ee7203be19ce7d168985da52fa6a9a2 /src/page.c
parent718fd97612c298b7eac47289c1803a2a19d9a859 (diff)
downloadmpd-fe3f0332f71258354b70e5db685b56934f0df703.tar.gz
mpd-fe3f0332f71258354b70e5db685b56934f0df703.tar.xz
mpd-fe3f0332f71258354b70e5db685b56934f0df703.zip
page: convert to C++
Diffstat (limited to '')
-rw-r--r--src/Page.cxx (renamed from src/page.c)65
1 files changed, 23 insertions, 42 deletions
diff --git a/src/page.c b/src/Page.cxx
index e2e22791f..bf30376e4 100644
--- a/src/page.c
+++ b/src/Page.cxx
@@ -18,72 +18,53 @@
*/
#include "config.h"
-#include "page.h"
+#include "Page.hxx"
#include <glib.h>
+#include <new>
+
#include <assert.h>
#include <string.h>
-/**
- * Allocates a new #page object, without filling the data element.
- */
-static struct page *
-page_new(size_t size)
+Page *
+Page::Create(size_t size)
{
- struct page *page = g_malloc(sizeof(*page) + size -
- sizeof(page->data));
-
- assert(size > 0);
-
- page->ref = 1;
- page->size = size;
- return page;
+ void *p = g_malloc(sizeof(Page) + size -
+ sizeof(Page::data));
+ return ::new(p) Page(size);
}
-struct page *
-page_new_copy(const void *data, size_t size)
+Page *
+Page::Copy(const void *data, size_t size)
{
- struct page *page = page_new(size);
-
- assert(data != NULL);
+ assert(data != nullptr);
+ Page *page = Create(size);
memcpy(page->data, data, size);
return page;
}
-struct page *
-page_new_concat(const struct page *a, const struct page *b)
+Page *
+Page::Concat(const Page &a, const Page &b)
{
- struct page *page = page_new(a->size + b->size);
+ Page *page = Create(a.size + b.size);
- memcpy(page->data, a->data, a->size);
- memcpy(page->data + a->size, b->data, b->size);
+ memcpy(page->data, a.data, a.size);
+ memcpy(page->data + a.size, b.data, b.size);
return page;
}
-void
-page_ref(struct page *page)
-{
- g_atomic_int_inc(&page->ref);
-}
-
-static void
-page_free(struct page *page)
-{
- assert(page->ref == 0);
-
- g_free(page);
-}
-
bool
-page_unref(struct page *page)
+Page::Unref()
{
- bool unused = g_atomic_int_dec_and_test(&page->ref);
+ bool unused = ref.Decrement();
- if (unused)
- page_free(page);
+ if (unused) {
+ this->Page::~Page();
+ g_free(this);
+ }
return unused;
}