malloc/realloc the stack when its length becomes > MSGPACK_EMBED_STACK_SIZE

This commit is contained in:
frsyuki 2010-04-14 21:11:31 +09:00
parent 87835a4e60
commit a6ec726ed7
5 changed files with 103 additions and 17 deletions

View file

@ -87,9 +87,15 @@ struct object {
template <typename T>
void convert(T* v) const;
object();
object(msgpack_object obj);
operator msgpack_object();
object(msgpack_object obj);
object();
object(bool v);
object(uint64_t v);
object(int64_t v);
object(double v);
object(const char* ptr, size_t size);
private:
struct implicit_type;
@ -184,7 +190,46 @@ inline bool operator!=(const object x, const object y)
{ return !(x == y); }
inline object::object() { }
inline object::object()
{
type = type::NIL;
}
inline object::object(bool v)
{
type = type::BOOLEAN;
via.boolean = v;
}
inline object::object(uint64_t v)
{
type = type::POSITIVE_INTEGER;
via.u64 = v;
}
inline object::object(int64_t v)
{
if(v >= 0) {
type = type::POSITIVE_INTEGER;
via.u64 = v;
} else {
type = type::NEGATIVE_INTEGER;
via.i64 = v;
}
}
inline object::object(double v)
{
type = type::DOUBLE;
via.dec = v;
}
inline object::object(const char* ptr, size_t size)
{
type = type::RAW;
via.raw.size = size;
via.raw.ptr = ptr;
}
inline object::object(msgpack_object obj)
{
@ -200,7 +245,6 @@ inline object::operator msgpack_object()
return obj;
}
inline object::implicit_type object::convert() const
{
return implicit_type(*this);