1//------------------------------------------------------------------------------
2//	MessageStringItemTest.h
3//
4//------------------------------------------------------------------------------
5
6#ifndef MESSAGESTRINGITEMTEST_H
7#define MESSAGESTRINGITEMTEST_H
8
9// Standard Includes -----------------------------------------------------------
10
11// System Includes -------------------------------------------------------------
12#include <Debug.h>
13#include <String.h>
14
15// Project Includes ------------------------------------------------------------
16
17// Local Includes --------------------------------------------------------------
18#include "MessageItemTest.h"
19
20// Local Defines ---------------------------------------------------------------
21
22// Globals ---------------------------------------------------------------------
23
24struct TBStringFuncPolicy
25{
26	static status_t Add(BMessage& msg, const char* name, BString& data);
27	static status_t Find(BMessage& msg, const char* name, int32 index,
28						 BString* data);
29	static status_t ShortFind(BMessage& msg, const char* name, BString* data);
30	static BString QuickFind(BMessage& msg, const char* name, int32 index);
31	static bool Has(BMessage& msg, const char* name, int32 index);
32	static status_t Replace(BMessage& msg, const char* name, int32 index,
33						 BString& data);
34	static status_t AddData(BMessage& msg, const char* name, type_code type,
35						 const BString* data, ssize_t size, bool);
36	static status_t FindData(BMessage& msg, const char* name, type_code type,
37						  int32 index, const void** data, ssize_t* size);
38
39	private:
40		static BString sStr;
41};
42BString TBStringFuncPolicy::sStr;
43//------------------------------------------------------------------------------
44status_t TBStringFuncPolicy::Add(BMessage& msg, const char* name,
45									 BString& data)
46{
47	return msg.AddString(name, data);
48}
49//------------------------------------------------------------------------------
50status_t TBStringFuncPolicy::Find(BMessage& msg, const char* name,
51									  int32 index, BString* data)
52{
53	return msg.FindString(name, index, data);
54}
55//------------------------------------------------------------------------------
56inline status_t TBStringFuncPolicy::ShortFind(BMessage& msg, const char* name,
57											  BString* data)
58{
59	return msg.FindString(name, data);
60}
61//------------------------------------------------------------------------------
62BString TBStringFuncPolicy::QuickFind(BMessage& msg, const char* name,
63										  int32 index)
64{
65	BString data;
66	msg.FindString(name, index, &data);
67	return data;
68}
69//------------------------------------------------------------------------------
70bool TBStringFuncPolicy::Has(BMessage& msg, const char* name,
71								 int32 index)
72{
73	return msg.HasString(name, index);
74}
75//------------------------------------------------------------------------------
76status_t TBStringFuncPolicy::Replace(BMessage& msg, const char* name,
77										 int32 index, BString& data)
78{
79	return msg.ReplaceString(name, index, data);
80}
81//------------------------------------------------------------------------------
82status_t TBStringFuncPolicy::AddData(BMessage& msg, const char* name,
83										 type_code type, const BString* data,
84										 ssize_t size, bool)
85{
86	return msg.AddData(name, type, (const void*)data->String(), size,
87					   false);
88}
89//------------------------------------------------------------------------------
90status_t TBStringFuncPolicy::FindData(BMessage& msg, const char* name,
91										  type_code type, int32 index,
92										  const void** data, ssize_t* size)
93{
94	*data = NULL;
95	char* ptr;
96	status_t err = msg.FindData(name, type, index, (const void**)&ptr, size);
97	if (!err)
98	{
99		sStr = ptr;
100		*(BString**)data = &sStr;
101	}
102
103	return err;
104}
105//------------------------------------------------------------------------------
106
107
108struct TBStringInitPolicy : public ArrayTypeBase<BString>
109{
110	inline static BString Zero()	{ return BString(); }
111	inline static BString Test1()	{ return "Test1"; }
112	inline static BString Test2()	{ return "Supercalafragilistricexpialadocious"; }
113	inline static size_t SizeOf(const BString& s)	{ return s.Length() + 1; }
114	inline static ArrayType Array()
115	{
116		ArrayType array;
117		array.push_back(Zero());
118		array.push_back(Test1());
119		array.push_back(Test2());
120		return array;
121	}
122};
123//------------------------------------------------------------------------------
124struct TBStringAssertPolicy
125{
126	inline static BString	Zero()				{ return BString(); }
127	inline static BString	Invalid()			{ return BString(); }
128	 static bool			Size(size_t size, BString& msg)
129		;//{ return size == msg.FlattenedSize(); }
130};
131bool TBStringAssertPolicy::Size(size_t size, BString& data)
132{
133	return size == (size_t)data.Length() + 1;
134}
135//------------------------------------------------------------------------------
136typedef TMessageItemTest
137<
138	BString,
139	B_STRING_TYPE,
140	TBStringFuncPolicy,
141	TBStringInitPolicy,
142	TBStringAssertPolicy
143>
144TMessageBStringItemTest;
145
146#endif	// MESSAGESTRINGITEMTEST_H
147
148/*
149 * $Log $
150 *
151 * $Id  $
152 *
153 */
154
155