mirror of
https://review.haiku-os.org/haiku
synced 2025-02-11 08:10:21 +01:00
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
192 lines
2.8 KiB
C++
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
|
|
|