haiku/src/kits/storage/ResourceItem.cpp
ejakowatz 52a3801208 It is accomplished ...
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-07-09 12:24:59 +00:00

192 lines
2.8 KiB
C++

//----------------------------------------------------------------------
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//---------------------------------------------------------------------
/*!
\file ResourcesItem.cpp
ResourceItem implementation.
*/
#include "ResourceItem.h"
#include <stdio.h>
#include <string.h>
#include <DataIO.h>
namespace StorageKit {
// constructor
ResourceItem::ResourceItem()
: BMallocIO(),
fOffset(0),
fInitialSize(0),
fType(0),
fID(0),
fName(),
fIsLoaded(false),
fIsModified(false)
{
SetBlockSize(1);
}
// destructor
ResourceItem::~ResourceItem()
{
}
// WriteAt
ssize_t
ResourceItem::WriteAt(off_t pos, const void *buffer, size_t size)
{
ssize_t result = BMallocIO::WriteAt(pos, buffer, size);
if (result >= 0)
SetModified(true);
return result;
}
// SetSize
status_t
ResourceItem::SetSize(off_t size)
{
status_t error = BMallocIO::SetSize(size);
if (error == B_OK)
SetModified(true);
return error;
}
// SetLocation
void
ResourceItem::SetLocation(int32 offset, size_t initialSize)
{
SetOffset(offset);
fInitialSize = initialSize;
}
// SetIdentity
void
ResourceItem::SetIdentity(type_code type, int32 id, const char *name)
{
fType = type;
fID = id;
fName = name;
}
// SetOffset
void
ResourceItem::SetOffset(int32 offset)
{
fOffset = offset;
}
// Offset
int32
ResourceItem::Offset() const
{
return fOffset;
}
// InitialSize
size_t
ResourceItem::InitialSize() const
{
return fInitialSize;
}
// DataSize
size_t
ResourceItem::DataSize() const
{
if (IsModified())
return BufferLength();
return fInitialSize;
}
// SetType
void
ResourceItem::SetType(type_code type)
{
fType = type;
}
// Type
type_code
ResourceItem::Type() const
{
return fType;
}
// SetID
void
ResourceItem::SetID(int32 id)
{
fID = id;
}
// ID
int32
ResourceItem::ID() const
{
return fID;
}
// SetName
void
ResourceItem::SetName(const char *name)
{
fName = name;
}
// Name
const char *
ResourceItem::Name() const
{
if (fName.Length() > 0)
return fName.String();
return NULL;
}
// Data
void *
ResourceItem::Data() const
{
// Since MallocIO may have a NULL buffer, if the data size is 0,
// we return a pointer to ourselves in this case. This ensures, that
// the resource item still can be uniquely identified by its data pointer.
if (DataSize() == 0)
return const_cast<ResourceItem*>(this);
return const_cast<void*>(Buffer());
}
// SetLoaded
void
ResourceItem::SetLoaded(bool loaded)
{
fIsLoaded = loaded;
}
// IsLoaded
bool
ResourceItem::IsLoaded() const
{
return (BufferLength() > 0 || fIsLoaded);
}
// SetModified
void
ResourceItem::SetModified(bool modified)
{
fIsModified = modified;
}
// IsModified
bool
ResourceItem::IsModified() const
{
return fIsModified;
}
}; // namespace StorageKit