blob: 25d4b7c5998d224dddbb7ca952119e2611d84f65 [file] [log] [blame]
/********************************************************************
* 2014 -
* open source under Apache License Version 2.0
********************************************************************/
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "WriteBuffer.h"
#include <google/protobuf/io/coded_stream.h>
using namespace google::protobuf::io;
using google::protobuf::uint8;
namespace Hdfs {
namespace Internal {
#define WRITEBUFFER_INIT_SIZE 64
WriteBuffer::WriteBuffer() :
size(0), buffer(WRITEBUFFER_INIT_SIZE) {
}
WriteBuffer::~WriteBuffer() {
}
void WriteBuffer::writeVarint32(int32_t value, size_t pos) {
char buffer[5];
uint8 * end = CodedOutputStream::WriteVarint32ToArray(value,
reinterpret_cast<uint8 *>(buffer));
write(buffer, reinterpret_cast<char *>(end) - buffer, pos);
}
char * WriteBuffer::alloc(size_t offset, size_t s) {
assert(offset <= size && size <= buffer.size());
if (offset > size) {
return NULL;
}
size_t target = offset + s;
if (target >= buffer.size()) {
target = target > 2 * buffer.size() ? target : 2 * buffer.size();
buffer.resize(target);
}
size = offset + s;
return &buffer[offset];
}
void WriteBuffer::write(const void * bytes, size_t s, size_t pos) {
assert(NULL != bytes);
assert(pos <= size && pos < buffer.size());
char * p = alloc(size, s);
memcpy(p, bytes, s);
}
}
}