* Copyright 2014, Augustin Cavalier (waddlesplash)
* Distributed under the terms of the MIT License.
*/
#include <MessageBuilder.h>
#include <AutoDeleter.h>
#include <String.h>
namespace BPrivate {
BMessageBuilder::BMessageBuilder(BMessage& message)
:
fNameStack(20),
fCurrentMessage(&message)
{
}
current one with "name", and then pushes the current
Message onto the stack and makes the new Message the
current one.
*/
status_t
BMessageBuilder::PushObject(const char* name)
{
BMessage* newMessage = new(std::nothrow) BMessage;
if (newMessage == NULL)
return B_NO_MEMORY;
ObjectDeleter<BMessage> messageDeleter(newMessage);
BString* nameString = new(std::nothrow) BString(name);
if (nameString == NULL)
return B_NO_MEMORY;
ObjectDeleter<BString> stringDeleter(nameString);
if (!fNameStack.AddItem(nameString))
return B_NO_MEMORY;
stringDeleter.Detach();
if (!fStack.AddItem(fCurrentMessage))
return B_NO_MEMORY;
messageDeleter.Detach();
fCurrentMessage = newMessage;
return B_OK;
}
to a string and calls PushObject(const char*)
with it.
*/
status_t
BMessageBuilder::PushObject(uint32 name)
{
BString nameString;
nameString.SetToFormat("%" B_PRIu32, name);
return PushObject(nameString.String());
}
the current one.
*/
status_t
BMessageBuilder::PopObject()
{
if (fStack.CountItems() < 1)
return B_ERROR;
BMessage* previousMessage = fStack.LastItem();
previousMessage->AddMessage(fNameStack.LastItem()->String(),
fCurrentMessage);
delete fCurrentMessage;
fCurrentMessage = previousMessage;
fStack.RemoveItemAt(fStack.CountItems() - 1);
fNameStack.RemoveItemAt(fNameStack.CountItems() - 1);
return B_OK;
}
*/
uint32
BMessageBuilder::What()
{
return fCurrentMessage->what;
}
*/
void
BMessageBuilder::SetWhat(uint32 what)
{
fCurrentMessage->what = what;
}
*/
uint32
BMessageBuilder::CountNames(type_code type)
{
return fCurrentMessage->CountNames(type);
}
status_t
BMessageBuilder::AddString(const char* name, const char* string)
{
return fCurrentMessage->AddString(name, string);
}
status_t
BMessageBuilder::AddString(const char* name, const BString& string)
{
return fCurrentMessage->AddString(name, string);
}
status_t
BMessageBuilder::AddInt8(const char* name, int8 value)
{
return fCurrentMessage->AddInt8(name, value);
}
status_t
BMessageBuilder::AddUInt8(const char* name, uint8 value)
{
return fCurrentMessage->AddUInt8(name, value);
}
status_t
BMessageBuilder::AddInt16(const char* name, int16 value)
{
return fCurrentMessage->AddInt16(name, value);
}
status_t
BMessageBuilder::AddUInt16(const char* name, uint16 value)
{
return fCurrentMessage->AddUInt16(name, value);
}
status_t
BMessageBuilder::AddInt32(const char* name, int32 value)
{
return fCurrentMessage->AddInt32(name, value);
}
status_t
BMessageBuilder::AddUInt32(const char* name, uint32 value)
{
return fCurrentMessage->AddUInt32(name, value);
}
status_t
BMessageBuilder::AddInt64(const char* name, int64 value)
{
return fCurrentMessage->AddInt64(name, value);
}
status_t
BMessageBuilder::AddUInt64(const char* name, uint64 value)
{
return fCurrentMessage->AddUInt64(name, value);
}
status_t
BMessageBuilder::AddBool(const char* name, bool value)
{
return fCurrentMessage->AddBool(name, value);
}
status_t
BMessageBuilder::AddFloat(const char* name, float value)
{
return fCurrentMessage->AddFloat(name, value);
}
status_t
BMessageBuilder::AddDouble(const char* name, double value)
{
return fCurrentMessage->AddDouble(name, value);
}
status_t
BMessageBuilder::AddPointer(const char* name, const void* pointer)
{
return fCurrentMessage->AddPointer(name, pointer);
}
}