mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-31 07:58:20 +02:00
lang/c/msgpack: fix compile optimization flag
git-svn-id: file:///Users/frsyuki/project/msgpack-git/svn/x@70 5a5092ae-2292-43ba-b2d5-dcab9c1a2731
This commit is contained in:
parent
a7936ba05b
commit
3165973811
@ -2,10 +2,15 @@ AC_INIT(pack.c)
|
|||||||
AM_INIT_AUTOMAKE(msgpackc, 0.1.0)
|
AM_INIT_AUTOMAKE(msgpackc, 0.1.0)
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
if test "" = "$CFLAGS"; then
|
||||||
|
CFLAGS="-g -O4"
|
||||||
|
fi
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
CFLAGS="-O4 $CFLAGS -Wall -I.."
|
CFLAGS="-O4 -Wall $CFLAGS -I.."
|
||||||
|
|
||||||
AC_OUTPUT([Makefile])
|
AC_OUTPUT([Makefile])
|
||||||
|
|
||||||
|
@ -2,13 +2,18 @@ AC_INIT(object.cpp)
|
|||||||
AM_INIT_AUTOMAKE(msgpack, 0.1.0)
|
AM_INIT_AUTOMAKE(msgpack, 0.1.0)
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
|
AC_SUBST(CXXFLAGS)
|
||||||
|
if test "" = "$CXXFLAGS"; then
|
||||||
|
CXXFLAGS="-g -O4"
|
||||||
|
fi
|
||||||
|
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
AC_PROG_LIBTOOL
|
AC_PROG_LIBTOOL
|
||||||
AC_CHECK_PROG(ERB, erb, erb, [$PATH])
|
AC_CHECK_PROG(ERB, erb, erb, [$PATH])
|
||||||
|
|
||||||
AC_CHECK_LIB(stdc++, main)
|
AC_CHECK_LIB(stdc++, main)
|
||||||
|
|
||||||
CXXFLAGS="-O4 $CXXFLAGS -Wall -I.."
|
CXXFLAGS="-O4 -Wall $CXXFLAGS -I.."
|
||||||
|
|
||||||
AC_OUTPUT([Makefile])
|
AC_OUTPUT([Makefile])
|
||||||
|
|
||||||
|
9
cpp/test.mk
Normal file
9
cpp/test.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
CXXFLAGS += -Wall -g -I. -I.. -O4
|
||||||
|
LDFLAGS +=
|
||||||
|
|
||||||
|
all: test
|
||||||
|
|
||||||
|
test: test.o unpack.o zone.o object.o pack.hpp unpack.hpp zone.hpp object.hpp
|
||||||
|
$(CXX) test.o unpack.o zone.o object.o $(CXXFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
26
cpp/zone.cpp
26
cpp/zone.cpp
@ -20,10 +20,6 @@
|
|||||||
namespace msgpack {
|
namespace msgpack {
|
||||||
|
|
||||||
|
|
||||||
zone::zone() { }
|
|
||||||
|
|
||||||
zone::~zone() { clear(); }
|
|
||||||
|
|
||||||
void zone::clear()
|
void zone::clear()
|
||||||
{
|
{
|
||||||
for(std::vector<char*>::iterator it(m_ptrs.begin()), it_end(m_ptrs.end());
|
for(std::vector<char*>::iterator it(m_ptrs.begin()), it_end(m_ptrs.end());
|
||||||
@ -33,22 +29,18 @@ void zone::clear()
|
|||||||
m_ptrs.clear();
|
m_ptrs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
char* zone::realloc(char* ptr, size_t count)
|
char* zone::realloc_real(char* ptr, size_t count)
|
||||||
{
|
{
|
||||||
if(ptr == NULL) {
|
for(std::vector<char*>::reverse_iterator it(m_ptrs.rbegin()), it_end(m_ptrs.rend());
|
||||||
return zone::malloc(count);
|
it != it_end; ++it) {
|
||||||
} else {
|
if(*it == ptr) {
|
||||||
for(std::vector<char*>::reverse_iterator it(m_ptrs.rbegin()), it_end(m_ptrs.rend());
|
char* tmp = (char*)::realloc(ptr, count);
|
||||||
it != it_end; ++it) {
|
if(!tmp) { throw std::bad_alloc(); }
|
||||||
if(*it == ptr) {
|
*it = tmp;
|
||||||
char* tmp = (char*)::realloc(ptr, count);
|
return tmp;
|
||||||
if(!tmp) { throw std::bad_alloc(); }
|
|
||||||
*it = tmp;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
}
|
||||||
|
throw std::bad_alloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
16
cpp/zone.hpp
16
cpp/zone.hpp
@ -40,11 +40,18 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::vector<char*> m_ptrs;
|
std::vector<char*> m_ptrs;
|
||||||
|
|
||||||
|
private:
|
||||||
|
char* realloc_real(char* ptr, size_t count);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
zone(const zone&);
|
zone(const zone&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline zone::zone() { }
|
||||||
|
|
||||||
|
inline zone::~zone() { clear(); }
|
||||||
|
|
||||||
inline char* zone::malloc(size_t count)
|
inline char* zone::malloc(size_t count)
|
||||||
{
|
{
|
||||||
char* ptr = (char*)::malloc(count);
|
char* ptr = (char*)::malloc(count);
|
||||||
@ -58,6 +65,15 @@ inline char* zone::malloc(size_t count)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline char* zone::realloc(char* ptr, size_t count)
|
||||||
|
{
|
||||||
|
if(ptr == NULL) {
|
||||||
|
return zone::malloc(count);
|
||||||
|
} else {
|
||||||
|
return realloc_real(ptr, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline object* zone::malloc_container(size_t count)
|
inline object* zone::malloc_container(size_t count)
|
||||||
{
|
{
|
||||||
return (object*)zone::malloc(sizeof(object)*count);
|
return (object*)zone::malloc(sizeof(object)*count);
|
||||||
|
@ -72,17 +72,21 @@
|
|||||||
msgpack_pack_inline_func(int)(msgpack_pack_user x, int d)
|
msgpack_pack_inline_func(int)(msgpack_pack_user x, int d)
|
||||||
{
|
{
|
||||||
if(d < -32) {
|
if(d < -32) {
|
||||||
if(d < -32768) { // signed 32
|
if(d < -32768) {
|
||||||
|
// signed 32
|
||||||
const unsigned char buf[5] = {0xd2, STORE_BE32(d)};
|
const unsigned char buf[5] = {0xd2, STORE_BE32(d)};
|
||||||
msgpack_pack_append_buffer(x, buf, 5);
|
msgpack_pack_append_buffer(x, buf, 5);
|
||||||
} else if(d < -128) { // signed 16
|
} else if(d < -128) {
|
||||||
|
// signed 16
|
||||||
const unsigned char buf[3] = {0xd1, STORE_BE16(d)};
|
const unsigned char buf[3] = {0xd1, STORE_BE16(d)};
|
||||||
msgpack_pack_append_buffer(x, buf, 3);
|
msgpack_pack_append_buffer(x, buf, 3);
|
||||||
} else { // signed 8
|
} else {
|
||||||
|
// signed 8
|
||||||
const unsigned char buf[2] = {0xd0, (uint8_t)d};
|
const unsigned char buf[2] = {0xd0, (uint8_t)d};
|
||||||
msgpack_pack_append_buffer(x, buf, 2);
|
msgpack_pack_append_buffer(x, buf, 2);
|
||||||
}
|
}
|
||||||
} else if(d < 128) { // fixnum
|
} else if(d < 128) {
|
||||||
|
// fixnum
|
||||||
msgpack_pack_append_buffer(x, (uint8_t*)&d, 1);
|
msgpack_pack_append_buffer(x, (uint8_t*)&d, 1);
|
||||||
} else {
|
} else {
|
||||||
if(d < 256) {
|
if(d < 256) {
|
||||||
@ -104,21 +108,25 @@ msgpack_pack_inline_func(int)(msgpack_pack_user x, int d)
|
|||||||
// wrapper
|
// wrapper
|
||||||
msgpack_pack_inline_func(unsigned_int)(msgpack_pack_user x, unsigned int d)
|
msgpack_pack_inline_func(unsigned_int)(msgpack_pack_user x, unsigned int d)
|
||||||
{
|
{
|
||||||
if(d < 128) {
|
if(d < 256) {
|
||||||
// fixnum
|
if(d < 128) {
|
||||||
msgpack_pack_append_buffer(x, (unsigned char*)&d, 1);
|
// fixnum
|
||||||
} else if(d < 256) {
|
msgpack_pack_append_buffer(x, (unsigned char*)&d, 1);
|
||||||
// unsigned 8
|
} else {
|
||||||
const unsigned char buf[2] = {0xcc, (uint8_t)d};
|
// unsigned 8
|
||||||
msgpack_pack_append_buffer(x, buf, 2);
|
const unsigned char buf[2] = {0xcc, (uint8_t)d};
|
||||||
} else if(d < 65536) {
|
msgpack_pack_append_buffer(x, buf, 2);
|
||||||
// unsigned 16
|
}
|
||||||
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
|
||||||
msgpack_pack_append_buffer(x, buf, 3);
|
|
||||||
} else {
|
} else {
|
||||||
// unsigned 32
|
if(d < 65536) {
|
||||||
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
// unsigned 16
|
||||||
msgpack_pack_append_buffer(x, buf, 5);
|
const unsigned char buf[3] = {0xcd, STORE_BE16(d)};
|
||||||
|
msgpack_pack_append_buffer(x, buf, 3);
|
||||||
|
} else {
|
||||||
|
// unsigned 32
|
||||||
|
const unsigned char buf[5] = {0xce, STORE_BE32(d)};
|
||||||
|
msgpack_pack_append_buffer(x, buf, 5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
require 'mkmf'
|
require 'mkmf'
|
||||||
$CFLAGS << " -I.. -Wall -O9"
|
$CFLAGS << " -I.. -Wall -O4"
|
||||||
create_makefile('msgpack')
|
create_makefile('msgpack')
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ check 256
|
|||||||
check 65535
|
check 65535
|
||||||
check 65536
|
check 65536
|
||||||
check -1
|
check -1
|
||||||
|
check -32
|
||||||
|
check -33
|
||||||
check -128
|
check -128
|
||||||
check -129
|
check -129
|
||||||
check -32768
|
check -32768
|
||||||
|
@ -176,13 +176,13 @@ static VALUE MessagePack_Unpacker_execute_impl(VALUE args)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if(from >= dlen) {
|
if(from >= dlen) {
|
||||||
rb_raise(eUnpackError, "Requested start is after data buffer end.");
|
rb_raise(eUnpackError, "offset is bigger than data buffer size.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
||||||
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
rb_raise(eUnpackError, "Parse error.");
|
rb_raise(eUnpackError, "parse error.");
|
||||||
} else if(ret > 0) {
|
} else if(ret > 0) {
|
||||||
mp->user.finished = 1;
|
mp->user.finished = 1;
|
||||||
return ULONG2NUM(from);
|
return ULONG2NUM(from);
|
||||||
@ -242,12 +242,12 @@ static VALUE MessagePack_unpack_impl(VALUE args)
|
|||||||
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
ret = msgpack_unpacker_execute(mp, dptr, (size_t)dlen, &from);
|
||||||
|
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
rb_raise(eUnpackError, "Parse error.");
|
rb_raise(eUnpackError, "parse error.");
|
||||||
} else if(ret == 0) {
|
} else if(ret == 0) {
|
||||||
rb_raise(eUnpackError, "Insufficient bytes.");
|
rb_raise(eUnpackError, "insufficient bytes.");
|
||||||
} else {
|
} else {
|
||||||
if(from < dlen) {
|
if(from < dlen) {
|
||||||
rb_raise(eUnpackError, "Extra bytes.");
|
rb_raise(eUnpackError, "extra bytes.");
|
||||||
}
|
}
|
||||||
return msgpack_unpacker_data(mp);
|
return msgpack_unpacker_data(mp);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user