* Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37646 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2006-2007, Haiku, Inc. All Rights Reserved.
|
* Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
#ifndef NET_BUFFER_UTILITIES_H
|
#ifndef NET_BUFFER_UTILITIES_H
|
||||||
@@ -11,11 +11,13 @@
|
|||||||
|
|
||||||
extern net_buffer_module_info* gBufferModule;
|
extern net_buffer_module_info* gBufferModule;
|
||||||
|
|
||||||
|
|
||||||
class NetBufferModuleGetter {
|
class NetBufferModuleGetter {
|
||||||
public:
|
public:
|
||||||
static net_buffer_module_info *Get() { return gBufferModule; }
|
static net_buffer_module_info *Get() { return gBufferModule; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! A class to access a field safely across node boundaries
|
//! A class to access a field safely across node boundaries
|
||||||
template<typename Type, int Offset, typename Module = NetBufferModuleGetter>
|
template<typename Type, int Offset, typename Module = NetBufferModuleGetter>
|
||||||
class NetBufferFieldReader {
|
class NetBufferFieldReader {
|
||||||
@@ -24,41 +26,36 @@ class NetBufferFieldReader {
|
|||||||
:
|
:
|
||||||
fBuffer(buffer)
|
fBuffer(buffer)
|
||||||
{
|
{
|
||||||
fStatus = Module::Get()->direct_access(fBuffer, Offset,
|
fStatus = Module::Get()->direct_access(fBuffer, Offset, sizeof(Type),
|
||||||
sizeof(Type), (void **)&fData);
|
(void**)&fData);
|
||||||
if (fStatus != B_OK) {
|
if (fStatus != B_OK) {
|
||||||
fStatus = Module::Get()->read(fBuffer, Offset,
|
fStatus = Module::Get()->read(fBuffer, Offset, &fDataBuffer,
|
||||||
&fDataBuffer, sizeof(Type));
|
sizeof(Type));
|
||||||
fData = &fDataBuffer;
|
fData = &fDataBuffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t
|
status_t Status() const
|
||||||
Status() const
|
|
||||||
{
|
{
|
||||||
return fStatus;
|
return fStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
Type &
|
Type& Data() const
|
||||||
Data() const
|
|
||||||
{
|
{
|
||||||
return *fData;
|
return *fData;
|
||||||
}
|
}
|
||||||
|
|
||||||
Type *
|
Type* operator->() const
|
||||||
operator->() const
|
|
||||||
{
|
{
|
||||||
return fData;
|
return fData;
|
||||||
}
|
}
|
||||||
|
|
||||||
Type &
|
Type& operator*() const
|
||||||
operator*() const
|
|
||||||
{
|
{
|
||||||
return *fData;
|
return *fData;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Sync()
|
||||||
Sync()
|
|
||||||
{
|
{
|
||||||
if (fBuffer == NULL || fStatus < B_OK)
|
if (fBuffer == NULL || fStatus < B_OK)
|
||||||
return;
|
return;
|
||||||
@@ -70,7 +67,9 @@ class NetBufferFieldReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
NetBufferFieldReader() {}
|
NetBufferFieldReader()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
net_buffer* fBuffer;
|
net_buffer* fBuffer;
|
||||||
status_t fStatus;
|
status_t fStatus;
|
||||||
@@ -78,34 +77,41 @@ class NetBufferFieldReader {
|
|||||||
Type fDataBuffer;
|
Type fDataBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Writes back any changed data on destruction
|
||||||
template<typename Type, int Offset, typename Module = NetBufferModuleGetter>
|
template<typename Type, int Offset, typename Module = NetBufferModuleGetter>
|
||||||
class NetBufferField : public NetBufferFieldReader<Type, Offset, Module> {
|
class NetBufferField : public NetBufferFieldReader<Type, Offset, Module> {
|
||||||
public:
|
public:
|
||||||
NetBufferField(net_buffer* buffer)
|
NetBufferField(net_buffer* buffer)
|
||||||
: NetBufferFieldReader<Type, Offset, Module>(buffer)
|
:
|
||||||
{}
|
NetBufferFieldReader<Type, Offset, Module>(buffer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
~NetBufferField()
|
~NetBufferField()
|
||||||
{
|
{
|
||||||
|
// Note, "this->" is needed here for GCC4
|
||||||
this->Sync();
|
this->Sync();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Can remove the header from the buffer
|
||||||
template<typename Type, typename Module = NetBufferModuleGetter>
|
template<typename Type, typename Module = NetBufferModuleGetter>
|
||||||
class NetBufferHeaderReader : public NetBufferFieldReader<Type, 0, Module> {
|
class NetBufferHeaderReader : public NetBufferFieldReader<Type, 0, Module> {
|
||||||
public:
|
public:
|
||||||
NetBufferHeaderReader(net_buffer* buffer)
|
NetBufferHeaderReader(net_buffer* buffer)
|
||||||
: NetBufferFieldReader<Type, 0, Module>(buffer)
|
:
|
||||||
{}
|
NetBufferFieldReader<Type, 0, Module>(buffer)
|
||||||
|
|
||||||
void
|
|
||||||
Remove()
|
|
||||||
{
|
{
|
||||||
this->Remove(sizeof(Type));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Remove()
|
||||||
Remove(size_t bytes)
|
{
|
||||||
|
Remove(sizeof(Type));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Remove(size_t bytes)
|
||||||
{
|
{
|
||||||
if (this->fBuffer != NULL) {
|
if (this->fBuffer != NULL) {
|
||||||
Module::Get()->remove_header(this->fBuffer, bytes);
|
Module::Get()->remove_header(this->fBuffer, bytes);
|
||||||
@@ -114,12 +120,16 @@ class NetBufferHeaderReader : public NetBufferFieldReader<Type, 0, Module> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! Removes the header on destruction
|
||||||
template<typename Type, typename Module = NetBufferModuleGetter>
|
template<typename Type, typename Module = NetBufferModuleGetter>
|
||||||
class NetBufferHeaderRemover : public NetBufferHeaderReader<Type, Module> {
|
class NetBufferHeaderRemover : public NetBufferHeaderReader<Type, Module> {
|
||||||
public:
|
public:
|
||||||
NetBufferHeaderRemover(net_buffer* buffer)
|
NetBufferHeaderRemover(net_buffer* buffer)
|
||||||
: NetBufferHeaderReader<Type, Module>(buffer)
|
:
|
||||||
{}
|
NetBufferHeaderReader<Type, Module>(buffer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
~NetBufferHeaderRemover()
|
~NetBufferHeaderRemover()
|
||||||
{
|
{
|
||||||
@@ -127,7 +137,8 @@ class NetBufferHeaderRemover : public NetBufferHeaderReader<Type, Module> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//! A class to add a header to a buffer
|
|
||||||
|
//! A class to add a header to a buffer, syncs itself on destruction
|
||||||
template<typename Type, typename Module = NetBufferModuleGetter>
|
template<typename Type, typename Module = NetBufferModuleGetter>
|
||||||
class NetBufferPrepend : public NetBufferFieldReader<Type, 0, Module> {
|
class NetBufferPrepend : public NetBufferFieldReader<Type, 0, Module> {
|
||||||
public:
|
public:
|
||||||
@@ -136,7 +147,7 @@ class NetBufferPrepend : public NetBufferFieldReader<Type, 0, Module> {
|
|||||||
this->fBuffer = buffer;
|
this->fBuffer = buffer;
|
||||||
|
|
||||||
this->fStatus = Module::Get()->prepend_size(buffer, size,
|
this->fStatus = Module::Get()->prepend_size(buffer, size,
|
||||||
(void **)&(this->fData));
|
(void**)&this->fData);
|
||||||
if (this->fStatus == B_OK && this->fData == NULL)
|
if (this->fStatus == B_OK && this->fData == NULL)
|
||||||
this->fData = &this->fDataBuffer;
|
this->fData = &this->fDataBuffer;
|
||||||
}
|
}
|
||||||
@@ -147,4 +158,5 @@ class NetBufferPrepend : public NetBufferFieldReader<Type, 0, Module> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // NET_BUFFER_UTILITIES_H
|
#endif // NET_BUFFER_UTILITIES_H
|
||||||
|
|||||||
Reference in New Issue
Block a user