uint32_t msg_buffer_t::append(const void* data_, uint32_t size_) { uint32_t ret = 0; if (!is_init_i()) //! yunjie: 第一次分配 { if (-1 == init_buffer_i(size_)) { //! yunjie: mem error return 0; } } else if (size_ > remain_free_tail_space_i()) //! yunjie: 尾部剩余的堆空间不足 { //! yunjie: 判断头尾空闲内存的总和是否足够 if (remain_free_head_space_i() + remain_free_tail_space_i() >= size_) { //! yunjie: 将数据内存块对齐到头 marshal_i(); } else { if (-1 == expand_i(size_ + m_heap_size)) { //! yunjie: mem error or param error return 0; } } } ret = append_i((char*)data_, size_); return ret; }
int msg_buffer_t::reserve(uint32_t size_) { int ret = 0; if (!is_init_i()) //! yunjie: 第一次分配 { ret = init_buffer_i(size_); } else { ret = expand_i(size_); } return ret; }
void emit_icode( instruction t ) { if(currInstruction == total_i) expand_i(); instruction *p = instructions+currInstruction++; p->opcode = t.opcode; p->result = t.result; p->arg1 = t.arg1; p->arg2 = t.arg2; p->srcLine = t.srcLine; }
int msg_buffer_t::recv_to_buffer(fd_t fd_, int& recv_ret_) { if (!is_init_i()) //! yunjie: 第一次分配 { if (-1 == init_buffer_i(MIN_MSG_BUFFER_SIZE)) { //! yunjie: mem error return -1; } } //! yunjie: 被读取了一部分, 如果尾部没有空间就进行marshal uint32_t remain_free_tail_space = remain_free_tail_space_i(); if (0 == remain_free_tail_space) { marshal_i(); if (0 == (remain_free_tail_space = remain_free_tail_space_i())) { return -1; } } recv_ret_ = ::recv(fd_, write_ptr_i(), remain_free_tail_space, 0); if (recv_ret_ < 0) { return 0; } m_data_size += recv_ret_; if ((uint32_t)recv_ret_ == remain_free_tail_space) { //! yunjie: marshal and expand marshal_i(); if (-1 == expand_i(m_heap_size << 1)) { //! yunjie: mem error or param error } } return 0; }