Beispiel #1
0
Status ifstream::open(const Path &path, std::ios_base::openmode mode) {
  CHECK_M(!is_open(), "Attempted to re-open file without closing");

  // Sanity check. This should have the 'in' flag on it.
  const bool hasRequiredMode = mode & std::ios::in;
  ASSERT(hasRequiredMode);
  if (!hasRequiredMode) {
    return Status::BAD_ARGUMENT;
  }

  // Sanity check. Many modes aren't supported!
  const bool hasNoInvalidModes =
      (mode & (std::ios::out | std::ios::app | std::ios::ate | std::ios::trunc))
      == 0;
  ASSERT(hasNoInvalidModes);
  if (!hasNoInvalidModes) {
    return Status::BAD_ARGUMENT;
  }

  // Attempt open
  filters::streamfilter *filebuf = vfs::open(path, mode);
  if (!filebuf) {
    return Status::NOT_FOUND;
  }

  // Make sure we can actually connect this through.
  filters::passthrough *handle =
      dynamic_cast< filters::passthrough * >(rdbuf());
  if (!handle->chain(filebuf, mode)) {
    vfs::close(filebuf);
    return Status::GENERIC_ERROR;
  }

  return Status::OK;
}
Beispiel #2
0
/**
 * @description: setup a specify field's content by specify the field no and content
 * @param: filedNo - the field's no
 * @param: content - the field's content
 * @param: contentLen - the field's content's length
 * @retval: ERR_INVALID_FIELDNO - the field no is out of ranges
 * @retval: 0 - at return zero means success
 */
int setFieldContent(unsigned char filedNo, void *content,
		unsigned short contentLen) {
	if (filedNo > FS.size - 1) {
		return ERR_INVALID_FIELDNO;
	}

	if (CHECK_M(FS.fdSet[filedNo - 1].content.value)
			|| (FS.fdSet[filedNo - 1].content.length < contentLen)) {
		FS.fdSet[filedNo - 1].content.value = (unsigned char *) malloc(
				sizeof(unsigned char) * (contentLen + 2));

		if (CHECK_M(FS.fdSet[filedNo - 1].content.value)) {
			return ERR_ALOM_FAILED;
		}
	}

	memset(FS.fdSet[filedNo - 1].content.value, 0x00, (contentLen + 2));
	memcpy(FS.fdSet[filedNo - 1].content.value, content, contentLen);
	FS.fdSet[filedNo - 1].content.length = contentLen;
	return 0;
}
Beispiel #3
0
DebugDraw::DebugDraw() {
  // Init Shader
  ShaderDef def;
  const char *vertProgram = ""
                            "#version 430\n"
                            "uniform mat4 mat_projview;\n"
                            "uniform mat4 mat_model;\n"
                            "in vec4 position;\n"
                            "in vec4 color0;\n"
                            "out vec4 vertex_color;\n"
                            "void main(void) {\n"
                            "  mat4 mat_mv = mat_projview * mat_model;\n"
                            "  gl_Position = mat_mv * vec4(position.xyz, 1.0);\n"
                            "  vertex_color = color0 / 255.0;\n"
                            "}\n";
  const char *fragProgram = ""
                            "#version 430\n"
                            "precision highp float;\n"
                            "in vec4 vertex_color;\n"
                            "out vec4 out_Color;\n"
                            "void main(void) {\n"
                            "  out_Color = vertex_color;\n"
                            "}\n";

  bool ret = wrappers::opengl::CreateShaderFromProgram(def, vertProgram, fragProgram);
  CHECK_M(ret, "Unable to compile DebugDraw shader");
  ret = m_shader.loadFromDef(def);
  CHECK_M(ret, "Unable to create DebugDraw shader from program");
  ret = m_shader.activate();
  CHECK_M(ret, "Unable to activate DebugDraw shader");
  ret = m_shader.getUniform("mat_projview", m_pProjViewMat);
  CHECK_M(ret, "Unable to locate mat_projview uniform");
  ret = m_shader.getUniform("mat_model", m_pModelMat);
  CHECK_M(ret, "Unable to locate mat_model uniform");
  ret = m_shader.deactivate();
  ASSERT(ret);

  // Init vertex buffer
  VertexFormatDef::Builder vertexFormatDef;
  vertexFormatDef.add_elem(VertexFormatDefElem::Builder()
                           .set_name("position")
                           .set_count(4)
                           .set_size(sizeof(float))
                           .set_pad(0)
                           .set_type(GL_FLOAT)
                           .build());
  vertexFormatDef.add_elem(VertexFormatDefElem::Builder()
                           .set_name("color0")
                           .set_count(4)
                           .set_size(sizeof(u8))
                           .set_pad(0)
                           .set_type(GL_UNSIGNED_BYTE)
                           .build());
  VertexFormatDesc vertexFormat(&m_shader, vertexFormatDef.build());

  ret = m_vbo.setFormat(vertexFormat);
  CHECK_M(ret, "Unable to create DebugDraw vertex buffer.");
}
Beispiel #4
0
void ifstream::close() {
  if (!is_open()) {
    return;
  }

  CHECK_M(m_filterDepth == 0, "Filters still attached to file!");

  filters::streamfilter *handle =
      dynamic_cast< filters::streamfilter * >(rdbuf());
  filters::streamfilter *filebuf =
      dynamic_cast< filters::streamfilter * >(handle->getNext());
  CHECK(vfs::close(filebuf));
  handle->chain(nullptr, std::ios::in);
}
Beispiel #5
0
core::memory::Blob Packet::getMutablePayload(const size_t sz) {
  const size_t requestSz = sz + sizeof(Header);
  CHECK_M(requestSz <= PACKET_MAX_SIZE_TCP, "Error packet too large");
  const size_t origSize = m_payloadLarge.size();

  if ((requestSz > PACKET_MAX_SIZE_UDP && requestSz > m_payloadLarge.size()) || origSize > 0) {
    if (requestSz > origSize) {
      m_payloadLarge.resize(requestSz, 0);
    }
    if (origSize == 0) {
      memcpy(&m_payloadLarge[0], m_payloadSmall, PACKET_MAX_SIZE_UDP);
    }
    reinterpret_cast<Header *>(&m_payloadLarge[0])->m_size = sz;
    return core::memory::Blob(&m_payloadLarge[0] + sizeof(Header), sz);
  } else {
    reinterpret_cast<Header *>(m_payloadSmall)->m_size = sz;
    return core::memory::Blob(m_payloadSmall + sizeof(Header), sz);
  }
}
Beispiel #6
0
int CSkeleton::CBone::ReadXMLAttrib( TiXmlElement* poElement )
{
	if( !poElement )
		return 0;
	
	TiXmlAttribute* poAttrib = poElement->FirstAttribute();
	int i = 0;
	int iVal;
	double dVal;
	static char acName_[256];
	
	while( poAttrib )
	{
		const char *pcName = poAttrib->Name();
		if( !strcmp( pcName, "name" ) )
		{
			SKELETON_STR_COPY( acName_, sizeof(acName_), poAttrib->Value() );
			SKELETON_LOG( "name: %s\n", acName_ );
			m_oName = acName_;
		}
		else if( !strcmp( pcName, "parent_index" ) )
		{
			if( poAttrib->QueryIntValue( &iVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %d\n", poAttrib->Name(), iVal );
				m_iIndexParent = iVal;
			}
		}
		else if( !strcmp( pcName, "head_x" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oHead[0] = float( dVal );
			}
		}
		else if( !strcmp( pcName, "head_y" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oHead[1] = float( dVal );
			}
		}
		else if( !strcmp( pcName, "head_z" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oHead[2] = float( dVal );
			}
		}
		else if( !strcmp( pcName, "tail_x" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oTail[0] = float( dVal );
			}
		}
		else if( !strcmp( pcName, "tail_y" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oTail[1] = float( dVal );
			}
		}
		else if( !strcmp( pcName, "tail_z" ) )
		{
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS )
			{
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) );
				m_oTail[2] = float( dVal );
			}
		}
#define CHECK_M( i, j ) \
		else if( !strcmp( pcName, "m" #i #j ) ) \
		{ \
			if( poAttrib->QueryDoubleValue( &dVal ) == TIXML_SUCCESS ) \
			{ \
				SKELETON_LOG( "%s: %f\n", poAttrib->Name(), float( dVal ) ); \
				m_oTransform( i, j ) = float( dVal ); \
			} \
		}
		CHECK_M( 0, 0 )
		CHECK_M( 1, 0 )
		CHECK_M( 2, 0 )
		CHECK_M( 3, 0 )
		CHECK_M( 0, 1 )
		CHECK_M( 1, 1 )
		CHECK_M( 2, 1 )
		CHECK_M( 3, 1 )
		CHECK_M( 0, 2 )
		CHECK_M( 1, 2 )
		CHECK_M( 2, 2 )
		CHECK_M( 3, 2 )
		CHECK_M( 0, 3 )
		CHECK_M( 1, 3 )
		CHECK_M( 2, 3 )
		CHECK_M( 3, 3 )
#undef CHECK_M
		else
		{
			//m_bError = true;
			SKELETON_ERR( "undefined attribute, %s\n", pcName );
		}
		i++;
		poAttrib = poAttrib->Next();
	}
	return i;
}
Beispiel #7
0
iFlagBase::iFlagBase(const char *name, const char *desc)
    : m_name(name), m_desc(desc), m_set(false) {
  CHECK_M(RegisterFlag(this), "Flag --" << getName() << " already registered!");
}