本文整理汇总了C++中NBT_Value::Write方法的典型用法代码示例。如果您正苦于以下问题:C++ NBT_Value::Write方法的具体用法?C++ NBT_Value::Write怎么用?C++ NBT_Value::Write使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NBT_Value
的用法示例。
在下文中一共展示了NBT_Value::Write方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Write
void NBT_Value::Write(std::vector<uint8> &buffer)
{
int storeAt = buffer.size();;
switch(m_type)
{
case TAG_BYTE:
buffer.push_back(m_value.byteVal);
break;
case TAG_SHORT:
buffer.resize(storeAt + 2);
putSint16(&buffer[storeAt], m_value.shortVal);
break;
case TAG_INT:
buffer.resize(storeAt + 4);
putSint32(&buffer[storeAt], m_value.intVal);
break;
case TAG_LONG:
buffer.resize(storeAt + 8);
putSint64(&buffer[storeAt], m_value.longVal);
break;
case TAG_FLOAT:
buffer.resize(storeAt + 4);
putFloat(&buffer[storeAt], m_value.floatVal);
break;
case TAG_DOUBLE:
buffer.resize(storeAt + 8);
putDouble(&buffer[storeAt], m_value.doubleVal);
break;
case TAG_BYTE_ARRAY:
{
int arraySize = m_value.byteArrayVal ? m_value.byteArrayVal->size() : 0;
buffer.resize(storeAt + 4 + arraySize);
putSint32(&buffer[storeAt], arraySize);
storeAt += 4;
if(arraySize)
memcpy(&buffer[storeAt], &(*m_value.byteArrayVal)[0], arraySize);
break;
}
case TAG_STRING:
{
int stringLen = m_value.stringVal ? m_value.stringVal->size() : 0;
buffer.resize(storeAt + 2 + stringLen);
putSint16(&buffer[storeAt], (sint16)stringLen);
storeAt += 2;
if(stringLen>0)
memcpy(&buffer[storeAt], m_value.stringVal->c_str(), stringLen);
break;
}
case TAG_LIST:
{
buffer.resize(storeAt + 5);
int listCount = m_value.listVal.data ? m_value.listVal.data->size() : 0;
buffer[storeAt] = m_value.listVal.type;
storeAt++;
putSint32(&buffer[storeAt], listCount);
for(int i=0;i<listCount;i++)
(*m_value.listVal.data)[i]->Write(buffer);
break;
}
case TAG_COMPOUND:
{
int compoundCount = m_value.compoundVal ? m_value.compoundVal->size() : 0;
if(compoundCount)
{
std::map<std::string, NBT_Value*>::iterator iter = m_value.compoundVal->begin(), end = m_value.compoundVal->end();
for( ; iter != end; iter++)
{
const std::string &key = iter->first;
int keySize = key.size();
NBT_Value *val = iter->second;
int curPos = buffer.size();
buffer.resize(curPos + 3 + keySize);
buffer[curPos] = (uint8)val->GetType();
curPos++;
putSint16(&buffer[curPos], keySize);
curPos += 2;
if(keySize)
memcpy(&buffer[curPos], key.c_str(), keySize);
val->Write(buffer);
}
}
buffer.push_back(TAG_END);
break;
}
case TAG_END:
break; //for completeness
}
}