From edd806fc74e5f58c73ab79e5fd63a6da14458344 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Tue, 21 Feb 2012 20:12:52 +0100 Subject: [PATCH] Added a Refcounted class, useful for refcounted objects. --- sortix/Makefile | 1 + sortix/refcount.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++ sortix/refcount.h | 47 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 sortix/refcount.cpp create mode 100644 sortix/refcount.h diff --git a/sortix/Makefile b/sortix/Makefile index fc80dc0f..e4dea8d9 100644 --- a/sortix/Makefile +++ b/sortix/Makefile @@ -95,6 +95,7 @@ vgaterminal.o \ serialterminal.o \ descriptors.o \ device.o \ +refcount.o \ vga.o \ elf.o \ process.o \ diff --git a/sortix/refcount.cpp b/sortix/refcount.cpp new file mode 100644 index 00000000..29cecd43 --- /dev/null +++ b/sortix/refcount.cpp @@ -0,0 +1,52 @@ +/******************************************************************************* + + COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012. + + This file is part of Sortix. + + Sortix is free software: you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + Sortix is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + Sortix. If not, see . + + refcount.cpp + A class that implements reference counting. + +*******************************************************************************/ + +#include "platform.h" +#include "refcount.h" + +namespace Sortix +{ + Refcounted::Refcounted() + { + refcount = 1; + } + + Refcounted::~Refcounted() + { + // It's OK to be deleted if our refcount is 1, it won't mess with any + // other owners that might need us. + ASSERT(refcount <= 1); + } + + void Refcounted::Refer() + { + refcount++; + } + + void Refcounted::Unref() + { + if ( !--refcount ) { delete this; } + } +} + diff --git a/sortix/refcount.h b/sortix/refcount.h new file mode 100644 index 00000000..9ceb79c6 --- /dev/null +++ b/sortix/refcount.h @@ -0,0 +1,47 @@ +/******************************************************************************* + + COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012. + + This file is part of Sortix. + + Sortix is free software: you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + Sortix is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + Sortix. If not, see . + + refcount.h + A class that implements reference counting. + +*******************************************************************************/ + +#ifndef SORTIX_REFCOUNT_H +#define SORTIX_REFCOUNT_H + +namespace Sortix +{ + class Refcounted + { + public: + Refcounted(); + ~Refcounted(); + + public: + void Refer(); + void Unref(); + + private: + size_t refcount; + + }; +} + +#endif +