Esempio n. 1
0
	/**
	 * @return
	 */
	std::vector<std::string> CDFFileReader::getVariableAttributeNames()
	{
		std::vector<std::string> attributeNames;
		long numAttributes;
		CDFgetNumAttributes(current_file_id, &numAttributes);
		char name[512];
		long attrScope;
		long maxgEntry;
		long maxrEntry;
		long maxzEntry;

		for (int i = 0; i < numAttributes; i++)
		{
			std::string value = "";
			CDFinquireAttr(current_file_id, i,name, &attrScope, &maxgEntry, &maxrEntry, &maxzEntry);
			//CDFgetAttrName(current_file_id, i, buffer);
			if (attrScope == VARIABLE_SCOPE)
			{
				value = name;
				attributeNames.push_back(value);
			}
		}
		return attributeNames;
	}
Esempio n. 2
0
//===============================================================//
QList<QVector<QVariant> > cdfDataReader::getGlobalAttribute(int64_t Attribute)
{
    CDFstatus status;
    QList<QVector<QVariant> > returnVal;
    long scope;
    long maxgEntry;
    long maxzEntry;
    long maxrEntry;
    char attName[CDF_ATTR_NAME_LEN256 + 1];

    long numElements;
    long dataType;

    //verify scope
    status = CDFinquireAttr(this->fileId, Attribute, attName, &scope, &maxgEntry, &maxrEntry, &maxzEntry);
    if(this->CDFstatusOK(status))
    {
        //ensure tha the scope is global
        if(scope == GLOBAL_SCOPE)
        {
            for(int x=0; x < maxgEntry; x++)
            {
                status = CDFinquireAttrgEntry(this->fileId, Attribute, x, &dataType, &numElements);

                //if the attribute is valid, get the data
                if(this->CDFstatusOK(status))
                {
                    switch(dataType)
                    {
                    case CDF_FLOAT:
                    {
                        //Data is in Float Values
                        float * dataF = new float[numElements];
                        QVector<QVariant> DataRecord;

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, dataF);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(dataF[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_DOUBLE:
                    {
                        //Data is in Double Values
                        double * data = new double[numElements];
                        QVector<QVariant> DataRecord;

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(data[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_INT1:
                    {
                        int8_t *data = new int8_t[numElements];
                        QVector<QVariant> DataRecord;
                        //Data is in byte form

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(data[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_INT2:
                    {
                        int16_t *data = new int16_t[numElements];
                        QVector<QVariant> DataRecord;
                        //Data is 16 bits

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(data[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_INT4:
                    {
                        int32_t *data = new int32_t[numElements];
                        QVector<QVariant> DataRecord;
                        //Data is 32 bits

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(data[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_INT8:
                    {
                        int64_t *data = new int64_t[numElements];
                        QVector<QVariant> DataRecord;
                        //Data is 64 bits

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            for(int y = 0; y < numElements; y++)
                            {
                                //add to the Data Record
                                DataRecord.push_back(QVariant(data[y]));
                            }

                            //add to the return values
                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    case CDF_CHAR:
                    {
                        //Data is a stirng
                        char * data = new char[numElements + 1];
                        QVector<QVariant> DataRecord;

                        status = CDFgetAttrgEntry(this->fileId, Attribute, x, data);
                        if(this->CDFstatusOK(status))
                        {
                            data[numElements] = '\0';

                            //add to record
                            QString attr(data);
                            DataRecord.push_back(attr);

                            returnVal.push_back(DataRecord);
                        }
                        break;
                    }
                    default:
                        break;
                    }
                }
            }
        }
        else
        {
            std::cerr << "No global attribute of this type" << std::endl;
        }
    }

    return returnVal;
}