Changeset 18838 for lang/c/msgpack
- Timestamp:
- 09/04/08 15:52:19 (5 years ago)
- Location:
- lang/c/msgpack/trunk/cpp
- Files:
-
- 4 modified
-
object.hpp (modified) (3 diffs)
-
unpack.cpp (modified) (2 diffs)
-
zone.cpp (modified) (4 diffs)
-
zone.hpp.erb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/c/msgpack/trunk/cpp/object.hpp
r18782 r18838 70 70 struct object_class { 71 71 virtual ~object_class() {} 72 virtual bool isnil() const { return false; }73 virtual bool xbool() const { throw cast_error(); }74 virtual uint8_t xu8() const { throw cast_error(); }75 virtual uint16_t xu16() const { throw cast_error(); }76 virtual uint32_t xu32() const { throw cast_error(); }77 virtual uint64_t xu64() const { throw cast_error(); }78 virtual int8_t xi8() const { throw cast_error(); }79 virtual int16_t xi16() const { throw cast_error(); }80 virtual int32_t xi32() const { throw cast_error(); }81 virtual int64_t xi64() const { throw cast_error(); }82 virtual float xfloat() const { throw cast_error(); }83 virtual doublexdouble() const { throw cast_error(); }84 virtual raw xraw() { throw cast_error(); }85 virtual array& xarray() { throw cast_error(); }86 virtual map& xmap() { throw cast_error(); }87 virtual const_raw xraw() const { throw cast_error(); }72 virtual bool isnil () const { return false; } 73 virtual bool xbool () const { throw cast_error(); } 74 virtual uint8_t xu8 () const { throw cast_error(); } 75 virtual uint16_t xu16 () const { throw cast_error(); } 76 virtual uint32_t xu32 () const { throw cast_error(); } 77 virtual uint64_t xu64 () const { throw cast_error(); } 78 virtual int8_t xi8 () const { throw cast_error(); } 79 virtual int16_t xi16 () const { throw cast_error(); } 80 virtual int32_t xi32 () const { throw cast_error(); } 81 virtual int64_t xi64 () const { throw cast_error(); } 82 virtual float xfloat () const { throw cast_error(); } 83 virtual double xdouble() const { throw cast_error(); } 84 virtual raw xraw () { throw cast_error(); } 85 virtual array& xarray () { throw cast_error(); } 86 virtual map& xmap () { throw cast_error(); } 87 virtual const_raw xraw () const { throw cast_error(); } 88 88 virtual const array& xarray() const { throw cast_error(); } 89 virtual const map& xmap() const { throw cast_error(); }89 virtual const map& xmap () const { throw cast_error(); } 90 90 virtual bool operator== (const object_class* x) const { return false; } 91 bool operator!= (const object_class* x) const { return !(this->operator==(x)); }92 91 virtual bool operator< (const object_class* x) const { throw cast_error(); } 93 92 virtual bool operator> (const object_class* x) const { throw cast_error(); } 93 bool operator!= (const object_class* x) const { return !(this->operator==(x)); } 94 94 virtual void pack(dynamic_packer& p) const = 0; 95 95 operator bool() const { return xbool(); } // FIXME !isnil(); … … 127 127 //object(object_class& v) : val(&v) {} 128 128 ~object() {} 129 bool isnil() const { return val->isnil(); }130 bool xbool() const { return val->xbool(); }131 uint8_t xu8() const { return val->xu8(); }132 uint16_t xu16() const { return val->xu16(); }133 uint32_t xu32() const { return val->xu32(); }134 uint64_t xu64() const { return val->xu64(); }135 int8_t xi8() const { return val->xi8(); }136 int16_t xi16() const { return val->xi16(); }137 int32_t xi32() const { return val->xi32(); }138 int64_t xi64() const { return val->xi64(); }139 float xfloat() const { return val->xfloat(); }140 doublexdouble() const { return val->xdouble(); }141 raw xraw() { return val->xraw(); }142 array& xarray() { return val->xarray(); }143 map& xmap() { return val->xmap(); }144 const_raw xraw() const { return const_cast<const object_class*>(val)->xraw(); }129 bool isnil () const { return val->isnil(); } 130 bool xbool () const { return val->xbool(); } 131 uint8_t xu8 () const { return val->xu8(); } 132 uint16_t xu16 () const { return val->xu16(); } 133 uint32_t xu32 () const { return val->xu32(); } 134 uint64_t xu64 () const { return val->xu64(); } 135 int8_t xi8 () const { return val->xi8(); } 136 int16_t xi16 () const { return val->xi16(); } 137 int32_t xi32 () const { return val->xi32(); } 138 int64_t xi64 () const { return val->xi64(); } 139 float xfloat () const { return val->xfloat(); } 140 double xdouble() const { return val->xdouble(); } 141 raw xraw () { return val->xraw(); } 142 array& xarray () { return val->xarray(); } 143 map& xmap () { return val->xmap(); } 144 const_raw xraw () const { return const_cast<const object_class*>(val)->xraw(); } 145 145 const array& xarray() const { return const_cast<const object_class*>(val)->xarray(); } 146 const map& xmap() const { return const_cast<const object_class*>(val)->xmap(); }146 const map& xmap () const { return const_cast<const object_class*>(val)->xmap(); } 147 147 bool operator== (object x) const { return val->operator== (x.val); } 148 148 bool operator!= (object x) const { return val->operator!= (x.val); } … … 164 164 operator array&() { return val->operator array&(); } 165 165 operator map&() { return val->operator map&(); } 166 operator raw() const { return val->operatorraw(); }167 operator array&() const { return val->operatorarray&(); }168 operator map&() const { return val->operatormap&(); }166 operator const_raw() const { return val->operator const_raw(); } 167 operator const array&() const { return val->operator const array&(); } 168 operator const map&() const { return val->operator const map&(); } 169 169 const object& inspect(std::ostream& s) const 170 170 { val->inspect(s); return *this; } -
lang/c/msgpack/trunk/cpp/unpack.cpp
r18782 r18838 21 21 22 22 namespace msgpack { 23 23 24 24 25 struct unpacker::context { … … 99 100 while(next_size < len + m_used) { next_size *= 2; } 100 101 101 // FIXME realloc? 102 void* tmp = malloc(next_size); 102 void* tmp = realloc(m_buffer, next_size); 103 103 if(!tmp) { throw std::bad_alloc(); } 104 memcpy(tmp, m_buffer, m_used); 105 free(m_buffer); 104 m_buffer = tmp; 105 //void* tmp = malloc(next_size); 106 //if(!tmp) { throw std::bad_alloc(); } 107 //memcpy(tmp, m_buffer, m_used); 108 //free(m_buffer); 106 109 107 110 m_buffer = tmp; -
lang/c/msgpack/trunk/cpp/zone.cpp
r18782 r18838 21 21 22 22 23 void* zone::alloc() 23 // FIXME custom allocator? 24 25 void zone::expand_chunk() 24 26 { 25 if(m_pool.size()*ZONE_CHUNK_SIZE <= m_used) { 26 cell_t* chunk = (cell_t*)malloc(sizeof(cell_t)*ZONE_CHUNK_SIZE); 27 if(!chunk) { throw std::bad_alloc(); } 28 try { 29 m_pool.push_back(chunk); 30 } catch (...) { 31 free(chunk); 32 throw; 33 } 27 cell_t* chunk = (cell_t*)malloc(sizeof(cell_t)*ZONE_CHUNK_SIZE); 28 if(!chunk) { throw std::bad_alloc(); } 29 try { 30 m_pool.push_back(chunk); 31 } catch (...) { 32 free(chunk); 33 throw; 34 34 } 35 void* data = m_pool[m_used/ZONE_CHUNK_SIZE][m_used%ZONE_CHUNK_SIZE].data;36 ++m_used;37 return data;38 35 } 39 36 … … 41 38 { 42 39 if(!m_pool.empty()) { 43 for(size_t b=0; b < m_used/ZONE_CHUNK_SIZE; ++b) { 40 size_t base_size = m_used / ZONE_CHUNK_SIZE; 41 size_t extend_size = m_used % ZONE_CHUNK_SIZE; 42 for(size_t b=0; b < base_size; ++b) { 44 43 cell_t* c(m_pool[b]); 45 44 for(size_t e=0; e < ZONE_CHUNK_SIZE; ++e) { … … 48 47 } 49 48 cell_t* c(m_pool.back()); 50 for(size_t e=0; e < m_used%ZONE_CHUNK_SIZE; ++e) {49 for(size_t e=0; e < extend_size; ++e) { 51 50 reinterpret_cast<object_class*>(c[e].data)->~object_class(); 52 51 } … … 61 60 m_used = 0; 62 61 63 for(user_finalizer_t::reverse_iterator it(m_user_finalizer.rbegin()), it_end(m_user_finalizer.rend()); 62 for(user_finalizer_t::reverse_iterator it(m_user_finalizer.rbegin()), 63 it_end(m_user_finalizer.rend()); 64 64 it != it_end; 65 65 ++it) { -
lang/c/msgpack/trunk/cpp/zone.hpp.erb
r18782 r18838 26 26 27 27 #ifndef MSGPACK_ZONE_CHUNK_SIZE 28 #define MSGPACK_ZONE_CHUNK_SIZE 8*102428 #define MSGPACK_ZONE_CHUNK_SIZE 1024 29 29 #endif 30 30 … … 45 45 46 46 public: 47 object_nil* nnil() { return new (alloc()) object_nil(); }48 object_true* ntrue() { return new (alloc()) object_true(); }49 object_false* nfalse() { return new (alloc()) object_false(); }50 object_u8* nu8( uint8_t v) { return new (alloc()) object_u8(v);}51 object_u16* nu16(uint16_t v) { return new (alloc()) object_u16(v);}52 object_u32* nu32(uint32_t v) { return new (alloc()) object_u32(v);}53 object_u64* nu64(uint64_t v) { return new (alloc()) object_u64(v);}54 object_i8* ni8( int8_t v) { return new (alloc()) object_i8(v);}55 object_i16* ni16( int16_t v) { return new (alloc()) object_i16(v);}56 object_i32* ni32( int32_t v) { return new (alloc()) object_i32(v);}57 object_i64* ni64( int64_t v) { return new (alloc()) object_i64(v);}58 object_float* nfloat( float v) { return new (alloc()) object_float(v);}59 object_double* ndouble( doublev) { return new (alloc()) object_double(v); }47 object_nil* nnil () { return new (alloc()) object_nil(); } 48 object_true* ntrue () { return new (alloc()) object_true(); } 49 object_false* nfalse () { return new (alloc()) object_false(); } 50 object_u8* nu8 (uint8_t v) { return new (alloc()) object_u8(v); } 51 object_u16* nu16 (uint16_t v) { return new (alloc()) object_u16(v); } 52 object_u32* nu32 (uint32_t v) { return new (alloc()) object_u32(v); } 53 object_u64* nu64 (uint64_t v) { return new (alloc()) object_u64(v); } 54 object_i8* ni8 (int8_t v) { return new (alloc()) object_i8(v); } 55 object_i16* ni16 (int16_t v) { return new (alloc()) object_i16(v); } 56 object_i32* ni32 (int32_t v) { return new (alloc()) object_i32(v); } 57 object_i64* ni64 (int64_t v) { return new (alloc()) object_i64(v); } 58 object_float* nfloat (float v) { return new (alloc()) object_float(v); } 59 object_double* ndouble(double v) { return new (alloc()) object_double(v); } 60 60 61 61 object_raw_ref* nraw_ref(void* ptr, uint32_t len) … … 150 150 151 151 private: 152 void resize_pool(size_t n);152 void expand_chunk(); 153 153 154 154 public: … … 174 174 } 175 175 176 inline void* zone::alloc() 177 { 178 if(m_pool.size() <= m_used/ZONE_CHUNK_SIZE) { 179 expand_chunk(); 180 } 181 void* data = m_pool[m_used/ZONE_CHUNK_SIZE][m_used%ZONE_CHUNK_SIZE].data; 182 ++m_used; 183 return data; 184 } 185 176 186 177 187 } // namespace msgpack
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)