本文整理汇总了C++中BinaryReadHandler类的典型用法代码示例。如果您正苦于以下问题:C++ BinaryReadHandler类的具体用法?C++ BinaryReadHandler怎么用?C++ BinaryReadHandler使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BinaryReadHandler类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: editRoot
/*! Skips all fields in the stream, until the field end
marker "" is encountered.
*/
void
OSBCommonElement::skipFields(void)
{
BinaryReadHandler *rh = editRoot()->getReadHandler();
while(true)
{
std::string fieldName;
std::string fieldTypeName;
UInt32 fieldSize;
rh->getValue(fieldName);
if(fieldName.empty())
{
OSG_OSB_LOG(("OSBCommonElement::skipFields: "
"Found field end marker.\n" ));
break;
}
rh->getValue(fieldTypeName);
rh->getValue(fieldSize );
rh->skip (fieldSize );
OSG_OSB_LOG(("OSBCommonElement::skipFields: fieldTypeName [%s] fieldSize [%u]\n",
fieldTypeName.c_str(), fieldSize));
}
}
示例2: OSG_OSB_LOG
void
OSBGeometryElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBGeometryElement::read: [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
rh->getValue(_version);
OSG_OSB_LOG(("OSBGeometryElement::read: version: [%u]\n", _version));
if(_version >= OSGOSBHeaderVersion200)
{
if(_version > OSGOSBHeaderVersion200)
{
FINFO(("OSBGeometryElement::read: "
"Unknown version, trying to read as latest.\n"));
}
setContainer(GeometryUnrecPtr(Geometry::create()));
readFields("", "");
}
else if(_version >= OSGOSBHeaderVersion100)
{
readV100();
}
}
示例3: OSG_OSB_LOG
void
OSBNodeElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBNodeElement::read [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 fcPtrType;
UInt16 version;
rh->getValue(fcPtrType);
rh->getValue(version );
OSG_OSB_LOG(("OSBNodeElement::read: version: [%u]\n", version));
if(fcPtrType != OSBCommonElement::FCPtrNode)
{
FFATAL(("OSBNodeElement::read: fcPtrType has unexpected value.\n"));
skipFields();
return;
}
NodeUnrecPtr node = Node::create();
setContainer(node);
readFields("'volume'", "");
}
示例4: OSG_OSB_LOG
/*! Reads a MFFieldContainerPtr (or a more specific pointer type) from the
stream. It has the given \a fieldId in the container it belongs to.
\param[in] fieldId Id of the field in the container it belongs to.
\param[in] fieldSize field size
\return Iterator that points to the PtrFieldInfo structure
that was created for this field.
*/
OSBCommonElement::PtrFieldListIt
OSBCommonElement::readPtrMultiField(
const UInt32 fieldId, const UInt32 fieldSize)
{
OSG_OSB_LOG(("OSBCommonElement::readPtrMultiField: "
"fieldId: [%u]\n", fieldId));
UInt32 ptrId;
UInt32 numElements;
OSBRootElement *root = editRoot();
BinaryReadHandler *rh = editRoot()->getReadHandler();
root->editPtrFieldList().push_back(PtrFieldInfo(getContainer(), fieldId));
PtrFieldInfo &pfi = root->editPtrFieldList().back();
rh->getValue(numElements);
OSG_OSB_LOG(("OSBCommonElement::readPtrMultiField: ptrIds ["));
for(UInt32 i = 0; i < numElements; ++i)
{
rh->getValue(ptrId);
pfi.editIdStore().push_back(ptrId);
OSG_OSB_PLOG(("%u ", ptrId));
}
OSG_OSB_PLOG(("]\n"));
return --(root->editPtrFieldList().end());
}
示例5: endMarker
/*! Reads the common part introducing a Field, but after the field name is
already consumed from the input stream. This is mainly useful to continue
reading after readFields stopped on a non empty endMarkers entry.
The information from the field header is returned in \a fieldTypeName and
\a fieldSize.
By default reading would stop an a field name of "", by passing a string
of type names in \a endMarkers additional stop conditions can be specified.
The format of the \a endMarkers string is: "'name1' 'name2' 'name3'", the
spaces between the "'" are mandatory.
\param[in] endMarkers String of field names on which reading stops.
\param[in] fieldName Name of the next field in the stream.
\param[out] fieldTypeName Type of the next field in the stream - only valid
if true is returned.
\param[out] fieldSize Size in bytes of the next field in the stream -
only valid if true is returned.
\return False, if an endMarker (including the implicit "") is encountered,
true otherwise.
\sa OSG::OSBCommonElement::readFieldContent
\sa OSG::OSBCommonElement::readFieldHeader
*/
bool
OSBCommonElement::readFieldHeaderContinue(
const std::string &endMarkers,
const std::string &fieldName,
std::string &fieldTypeName,
UInt32 &fieldSize )
{
OSG_OSB_LOG(("OSBCommonElement::readFieldHeaderContinue\n"));
BinaryReadHandler *rh = editRoot()->getReadHandler();
if(fieldName.empty() ||
(!endMarkers.empty() &&
(endMarkers.find("'" + fieldName + "'") != std::string::npos)))
{
OSG_OSB_LOG(("OSBCommonElement::readFieldHeaderContinue: "
"Found field end marker.\n"));
return false;
}
else
{
rh->getValue(fieldTypeName);
rh->getValue(fieldSize );
OSG_OSB_LOG(("OSBCommonElement::readFieldHeaderContinue: "
"[%s] [%s] [%u]\n",
fieldName.c_str(), fieldTypeName.c_str(), fieldSize));
return true;
}
}
示例6: OSG_OSB_LOG
void
OSBGenericElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBGenericElement::read [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 ptrTypeTag;
UInt16 version;
rh->getValue(ptrTypeTag);
rh->getValue(version );
OSG_OSB_LOG(("OSBGenericElement::read: version: [%u] ptrTypeTag [%u]\n",
version, ptrTypeTag));
setContainer(FieldContainerUnrecPtr(
FieldContainerFactory::the()->createContainer(typeName.c_str())));
if(getContainer() == NULL)
{
FWARNING(("OSBGenericElement::read: Skipping unknown "
"FieldContainer [%s].\n", typeName.c_str()));
skipFields();
setContainer(FieldContainerUnrecPtr(createReplacementFC(ptrTypeTag)));
return;
}
readFields("", "");
}
示例7: OSG_OSB_LOG
void
OSBNameElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBNameElement::read [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 fcPtrType;
UInt16 version;
rh->getValue(fcPtrType);
rh->getValue(version );
setContainer(NameUnrecPtr(Name::create()));
readFields("", "");
}
示例8: OSG_OSB_LOG
void
OSBShaderParameterMIntElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBShaderParameterMIntElement::read: [%s]\n",
typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 ptrTypeId;
UInt16 version;
rh->getValue(ptrTypeId);
rh->getValue(version );
OSG_OSB_LOG(("OSBShaderParameterMIntElement::read: version: [%u]\n",
version));
std::string fieldName;
std::string fieldTypeName;
UInt32 fieldSize;
PtrFieldListIt ptrFieldIt;
while(readFieldHeader("", fieldName, fieldTypeName, fieldSize))
{
if(fieldName == "name")
{
_name.copyFromBin(*rh);
}
else if(fieldName == "value")
{
_value.copyFromBin(*rh);
}
else
{
OSG_OSB_LOG(("Skipping [%d] bytes for field [%s]\n",
fieldSize, fieldName.c_str()));
rh->skip(fieldSize);
}
}
// no container is created for this element, which means the root does
// not automatically insert it into the IdElemMap - do it manually
editRoot()->editIdElemMap().insert(
OSBRootElement::IdElemMap::value_type(getFCIdFile(), this));
}
示例9: OSG_OSB_LOG
void OSBChunkBlockElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBChunkBlockElement::read [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 ptrTypeId;
UInt16 version;
rh->getValue(ptrTypeId);
rh->getValue(version );
OSG_OSB_LOG(("OSBChunkBlockElement::read: version: [%u]\n", version));
std::string fieldName;
std::string fieldTypeName;
UInt32 fieldSize;
PtrFieldListIt ptrFieldIt;
ChunkBlockUnrecPtr pMat = dynamic_pointer_cast<ChunkBlock>(
FieldContainerFactory::the()->createContainer(typeName.c_str()));
setContainer(pMat);
while(readFieldHeader("", fieldName, fieldTypeName, fieldSize))
{
if(fieldName == "chunks")
{
// keep an interator to the _mfChunks field contents
readFieldContent(fieldName, fieldTypeName, fieldSize, "",
_chunksPtrFieldIt);
_chunksPtrFieldItValid = true;
}
else
{
readFieldContent(fieldName, fieldTypeName, fieldSize, "",
ptrFieldIt);
}
}
}
示例10: OSG_OSB_LOG
/*! Reads from the stream set by a preceding call to initialiseRead. Since the
root element is the first one created it reads the file header and
creates the elements to read the data following the header.
\param[in] typeName The argument is ignored.
*/
void
OSBRootElement::read(const std::string &/*typeName*/)
{
OSG_OSB_LOG(("OSBRootElement::read\n"));
BinaryReadHandler *rh = getReadHandler();
std::string headerMarker;
rh->getValue(headerMarker);
if(headerMarker == OSGOSB_HEADER_ID_1)
{
OSG_OSB_LOG(("OSBRootElement::read: Header version: [%u]\n",
OSGOSBHeaderVersion100));
setHeaderVersion(OSGOSBHeaderVersion100);
}
else if(headerMarker == OSGOSB_HEADER_ID_2)
{
OSG_OSB_LOG(("OSBRootElement::read: Header version: [%u]\n",
OSGOSBHeaderVersion200));
setHeaderVersion(OSGOSBHeaderVersion200);
}
// else if(headerMarker == OSGOSB_HEADER_ID_201)
// {
// OSG_OSB_LOG(("OSBRootElement::read: Header version: [%u]\n",
// OSGOSBHeaderVersion201));
// setHeaderVersion(OSGOSBHeaderVersion201);
// }
else
{
FWARNING(("OSBRootElement::read: Unrecognized file header, could not "
"load file.\n"));
return;
}
std::string headerName;
rh->getValue(headerName);
std::string headerOptions;
rh->getValue(headerOptions);
UInt64 fileSize;
rh->getValue(fileSize);
OSG_OSB_LOG(("OSBRootElement::read: headerName: [%s]\n",
headerName.c_str()));
OSG_OSB_LOG(("OSBRootElement::read: headerOptions: [%s]\n",
headerOptions.c_str()));
OSG_OSB_LOG(("OSBRootElement::read: fileSize: [%" PRISize "]\n",
fileSize));
std::string fcTypeName;
UInt32 fcIdFile; // id used in the file
UInt32 fcIdSystem; // id used in the system
OSBElementBase *elem;
while(true)
{
if(!readFieldContainerHeader(fcTypeName, fcIdFile))
break;
OSG_OSB_LOG(("OSBRootElement::read: fcTypeName [%s] fcIdFile: [%u]\n",
fcTypeName.c_str(), fcIdFile));
elem = OSBElementFactory::the()->acquire(fcTypeName, this);
elem->setFCIdFile(fcIdFile );
elem->read (fcTypeName);
if(elem->getContainer() != NULL)
{
fcIdSystem = elem->getContainer()->getId();
OSG_OSB_LOG(("OSBRootElement::read: fcIdFile: [%u] fcIdSystem: [%u]\n",
fcIdFile, fcIdSystem));
editIdMap().insert(
FieldContainerIdMap::value_type(fcIdFile, fcIdSystem));
if(getContainer() == NULL)
{
setContainer(elem->getContainer());
}
editElementList().push_back(elem );
editIdElemMap ().insert (std::make_pair(fcIdFile, elem));
}
}
}
示例11: OSG_OSB_LOG
void
OSBTextureChunkElement::read(const std::string &typeName)
{
OSG_OSB_LOG(("OSBTextureChunkElement::read: [%s]\n", typeName.c_str()));
BinaryReadHandler *rh = editRoot()->getReadHandler();
UInt8 ptrTypeId;
UInt16 version;
rh->getValue(ptrTypeId);
rh->getValue(version );
OSG_OSB_LOG(("OSBTextureChunkElement::read: version: [%u]\n", version));
// create the two replacement chunks
_pTexObj = TextureObjChunk::create();
_pTexEnv = TextureEnvChunk::create();
std::string fieldName;
std::string fieldTypeName;
UInt32 fieldSize;
PtrFieldListIt ptrFieldIt;
while(readFieldHeader("", fieldName, fieldTypeName, fieldSize))
{
// some fields need to be duplicated for the two replacement chunks
if(fieldName == "parents")
{
// parent fields are ignored
rh->skip(fieldSize);
}
else if(fieldName == "internal")
{
bool fieldValue;
rh->getValue(fieldValue);
_pTexObj->setInternal(fieldValue);
_pTexEnv->setInternal(fieldValue);
}
else if(fieldName == "ignore")
{
bool fieldValue;
rh->getValue(fieldValue);
_pTexObj->setIgnore(fieldValue);
_pTexEnv->setIgnore(fieldValue);
}
else if(isTexObjField(fieldName))
{
// set TexObj as container for reading the field
setContainer(_pTexObj);
readFieldContent(fieldName, fieldTypeName, fieldSize, "", ptrFieldIt);
}
else if(isTexEnvField(fieldName))
{
// set TexEnv as container for reading the field
setContainer(_pTexEnv);
readFieldContent(fieldName, fieldTypeName, fieldSize, "", ptrFieldIt);
}
else
{
FWARNING(("OSBTextureChunkElement::read: Skipping unrecognized "
"field [%s].\n", fieldName.c_str()));
rh->skip(fieldSize);
}
}
// set TexObj as "the" container
setContainer(_pTexObj);
}
示例12: it
/*! Reads the contents of a field from the stream. It is intended to be used
in conjunction with readFieldHeader and uses the information obtained
by it (\a fieldName, \a fieldTypeName, \a fieldSize ).
If a field is not to be read, but skipped instead, its name can be passed
in the \a excludeFields argument. The string has the format:
"'name1' 'name2' 'name3'", the spaces between the "'" are mandatory.
\param[in] fieldName Name of the field.
\param[in] fieldTypeName Type of the field.
\param[in] fieldSize Size in bytes of the field.
\param[in] excludeFields
\param[out] ptrFieldIt Iterator that points to the PtrFieldInfo structure
that was created, if this is a "pointer field" - only valid if true is
returned.
\return True, if the field is a "pointer field", i.e. a field holding
pointers to other FieldContainers, false otherwise.
*/
bool
OSBCommonElement::readFieldContent(
const std::string &fieldName,
const std::string &fieldTypeName,
const UInt32 fieldSize,
const std::string &excludeFields,
PtrFieldListIt &ptrFieldIt )
{
OSG_OSB_LOG(("OSBCommonElement::readFieldContent: [%s] [%s] [%u]\n",
fieldName.c_str(), fieldTypeName.c_str(), fieldSize));
BinaryReadHandler *rh = editRoot()->getReadHandler();
bool isPtrField = false;
FieldDescriptionBase *fieldDesc =
getContainer()->getFieldDescription(fieldName.c_str());
if((!excludeFields.empty() ) &&
(excludeFields.find("'" + fieldName + "'") != std::string::npos) )
{
OSG_OSB_LOG(("OSBCommonElement::readFieldContent: "
"Skipping excluded field [%s] [%s]\n",
fieldName.c_str(), fieldTypeName.c_str()));
rh->skip(fieldSize);
return false;
}
if(fieldDesc == 0)
{
DynFieldContainerInterface *pIf =
dynamic_cast<DynFieldContainerInterface *>(getContainer());
if(pIf != NULL)
{
pIf->addField(fieldTypeName.c_str(), fieldName.c_str());
fieldDesc = getContainer()->getFieldDescription(fieldName.c_str());
}
}
if(fieldDesc == 0)
{
FWARNING(("OSBCommonElement::readFieldContent: "
"Skipping unknown field [%s] [%s].\n",
fieldName.c_str(), fieldTypeName.c_str()));
rh->skip(fieldSize);
return false;
}
const FieldType &fieldType = fieldDesc->getFieldType();
UInt32 fieldId = fieldDesc->getFieldId ();
BitVector fieldMask = fieldDesc->getFieldMask();
if(fieldType.getContentType().isDerivedFrom(
FieldTraits<FieldContainer *>::getMapType()) == true)
{
ptrFieldIt = readAttachmentMapField(fieldId, fieldSize);
isPtrField = true;
}
else if(fieldType.getContentType().isDerivedFrom(
FieldTraits<FieldContainer *>::getType()) == true)
{
if(fieldType.getClass() == FieldType::ParentPtrField)
{
rh->skip(fieldSize);
isPtrField = false;
}
else
{
if(fieldType.getCardinality() == FieldType::SingleField)
{
ptrFieldIt = readPtrSingleField(fieldId);
isPtrField = true;
}
else if(fieldType.getCardinality() == FieldType::MultiField)
{
ptrFieldIt = readPtrMultiField(fieldId, fieldSize);
isPtrField = true;
}
}
//.........这里部分代码省略.........