当前位置: 首页>>代码示例>>C++>>正文


C++ FloatArray::data方法代码示例

本文整理汇总了C++中FloatArray::data方法的典型用法代码示例。如果您正苦于以下问题:C++ FloatArray::data方法的具体用法?C++ FloatArray::data怎么用?C++ FloatArray::data使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在FloatArray的用法示例。


在下文中一共展示了FloatArray::data方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: buflen

static int
ah_get(istream &is, AHRecord &rec)
{
	// read header+data from an istream
    
	int ndata, dtype;

// read header *********************************
	char hbuf[HEADER_SIZE];
	XDR xdrs;

	// read a header from an istream
	is.read(hbuf, HEADER_SIZE);

	if (is.eof()) {

		// no bytes read -> proper EOF
		// otherwise -> unexpected EOF
		return is.gcount()==0 ? AH_SUCCESS : AH_ERROR;
	}

	if (is.fail()) {
		cerr << "failed to read header" << endl;
		return AH_ERROR;
	}

	xdrmem_create(&xdrs, hbuf, (unsigned int) HEADER_SIZE, XDR_DECODE);

	int status = AH_SUCCESS;

	// read a header from an XDR stream
	if ( ! xdr_Header(&xdrs, &rec, ndata, dtype))
		status = AH_ERROR;

	// check data type -> XXX do this inside xdr_Header
//      if ( ! is_valid_data_type(rec->type))
//              status = AH_ERROR;

	if (status == AH_SUCCESS && is.eof()) // XXX XXX XXX XXX XXX XXX XXX
		return AH_SUCCESS;      // proper EOF

// read data samples ***************************
	size_t bufsize = buflen(ndata, dtype);

	vector<char> dbuf(bufsize);
	char *buf = &dbuf[0];
	is.read(buf, bufsize);

	// While reading data we shall never reach EOF
	if (is.eof())
		return AH_ERROR;        // unexpected EOF
	if (is.fail())
		return AH_ERROR;        // <- obsolete ???

	xdrmem_create(&xdrs, buf, bufsize, XDR_DECODE);

	int n = ndata;

	switch (dtype) {
	case AH_DATATYPE_FLOAT:
		{
		// allocate new data
		FloatArray *arr = new FloatArray(n);
		rec.setData(arr);
		float *f = (float*)(arr->data());
# ifdef IEEE_INTEL
		float *f0 = (float*) xdrs.x_private;
		char  *b2 = (char*) f;
# endif

		// read data
# ifdef IEEE_SPARC
		assert(sizeof(float)==4);
		// copy without swapping
		memcpy(f, (void*) xdrs.x_private, n*sizeof(float));
# else
		while (n--)
		{
#   ifdef IEEE_INTEL
			char *b1 = (char*)(++f0);

			*(b2++) = *(--b1);
			*(b2++) = *(--b1);
			*(b2++) = *(--b1);
			*(b2++) = *(--b1);
#   else
			if ( ! xdr_float(&xdrs, f++))
				cerr << "error while reading data" << endl;
#   endif
		}
# endif
		}
		break;

	case AH_DATATYPE_COMPLEX:
/*
		{
		float re, im;

		// allocate new data
//.........这里部分代码省略.........
开发者ID:aemanov,项目名称:seiscomp3,代码行数:101,代码来源:ahrecord.cpp


注:本文中的FloatArray::data方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。