mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Added a Refcounted class, useful for refcounted objects.
This commit is contained in:
parent
74dab2cbca
commit
edd806fc74
3 changed files with 100 additions and 0 deletions
|
@ -95,6 +95,7 @@ vgaterminal.o \
|
|||
serialterminal.o \
|
||||
descriptors.o \
|
||||
device.o \
|
||||
refcount.o \
|
||||
vga.o \
|
||||
elf.o \
|
||||
process.o \
|
||||
|
|
52
sortix/refcount.cpp
Normal file
52
sortix/refcount.cpp
Normal file
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
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; }
|
||||
}
|
||||
}
|
||||
|
47
sortix/refcount.h
Normal file
47
sortix/refcount.h
Normal file
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
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
|
||||
|
Loading…
Reference in a new issue