/** * @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; }
//===============================================================// 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; }