u::logic HDF5FormatLib::WriteToFile(QString filePath, QString dataSetPath, u::cptr data, u::int64 lines, u::int64 columns, int byteType) { try { QStringList listPathes = ParseFile(dataSetPath); if (listPathes.isEmpty()) { throw GenericExc(QObject::tr("Не задан путь к данным")); } if (filePath.isEmpty()) { throw GenericExc(QObject::tr("Не задан путь к файлу")); } // пробуем открыть файл. Если status = -1, то создаем файл hid_t fileHandle, dataspace_id, group_id, dataset_id; hsize_t dims[2]; QList<hid_t> groups_idList; herr_t status; fileHandle = H5Fopen(filePath.toStdString().c_str(), H5F_ACC_RDWR, H5P_DEFAULT); if (fileHandle < 0) { fileHandle = H5Fcreate(filePath.toStdString().c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); if (fileHandle < 0) { throw GenericExc(QObject::tr("Ошибка создания файла")); } } if (listPathes.size() != 1) { QString str = "/" + listPathes.at(0); group_id = H5Gopen2(fileHandle, str.toStdString().c_str(), H5P_DEFAULT); if (group_id < 0) { group_id = H5Gcreate2(fileHandle, str.toStdString().c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); if (group_id < 0) { throw GenericExc(QObject::tr("Ошибка создания группы файла")); } } groups_idList.append(group_id); // Последнее - это название dataSet for (int i = 1; i < listPathes.size()-1; i++) { // сначала открываем, если не вышло, то создаем новую группу group_id = H5Gopen2(groups_idList.at(i-1), listPathes.at(i).toStdString().c_str(), H5P_DEFAULT); if (group_id < 0) { group_id = H5Gcreate2(groups_idList.at(i-1), listPathes.at(i).toStdString().c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); if (group_id < 0) { throw GenericExc(QObject::tr("Ошибка создания группы файла")); } } groups_idList.append(group_id); } } // создаем размерность dataset dims[0] = lines; dims[1] = columns; dataspace_id = H5Screate_simple(2, dims, NULL); if (dataspace_id < 0) { throw GenericExc(QObject::tr("Ошибка выделения памяти для данных")); } dataset_id = H5Dcreate2(groups_idList.at(groups_idList.size()-1), listPathes.at(listPathes.size()-1).toStdString().c_str(), GetByteType(byteType), dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); if (dataset_id < 0) { throw GenericExc(QObject::tr("Ошибка создания set данных. Возможно данный сет данных уже создан")); } status = H5Dwrite(dataset_id, GetByteType(byteType), H5S_ALL, H5S_ALL, H5P_DEFAULT, data); if (status < 0) { throw GenericExc(QObject::tr("Ошибка записи данных")); } status = H5Sclose(dataspace_id); if (status < 0) { throw GenericExc(QObject::tr("Ошибка установки запрета на ввод данных")); } status = H5Dclose(dataset_id); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия set данных")); } for (int i = groups_idList.size()-1; i >= 0; i-- ) { status = H5Gclose(groups_idList.at(i)); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия группы")); } } status = H5Fclose (fileHandle); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия файла")); } return true; } catch (const GenericExc& exc) { m_errDescription = exc.GetWhat(); return false; } catch (...) { m_errDescription = QObject::tr("Неизвестная ошибка при записи в файл"); return false; } }
u::logic HDF5FormatLib::ReadFromFile(QString filePath, QString dataSetPath, u::ptr data, int byteType) { try { QStringList listPathes = ParseFile(dataSetPath); if (listPathes.isEmpty()) { throw GenericExc(QObject::tr("Не задан путь к данным")); } // пробуем открыть файл. Если status = -1, то создаем файл hid_t fileHandle, group_id, dataset_id; QList<hid_t> groups_idList; herr_t status; fileHandle = H5Fopen(filePath.toStdString().c_str(), H5F_ACC_RDWR, H5P_DEFAULT); if (fileHandle < 0) { throw GenericExc(QObject::tr("Ошибка открытия файла")); } if (listPathes.size() != 1) { group_id = H5Gopen2(fileHandle, listPathes.at(0).toStdString().c_str(), H5P_DEFAULT); if (group_id < 0) { throw GenericExc(QObject::tr("Ошибка открытия группы файла")); } else { groups_idList.append(group_id); } } // Последнее - это название dataSet for (int i = 1; i < listPathes.size()-1; i++) { group_id = H5Gopen2(groups_idList.at(i-1), listPathes.at(i).toStdString().c_str(), H5P_DEFAULT); if (group_id < 0) { throw GenericExc(QObject::tr("Ошибка открытия группы файла")); } else { groups_idList.append(group_id); } } dataset_id = H5Dopen2 (groups_idList.at(groups_idList.size()-1), listPathes.at(listPathes.size()-1).toStdString().c_str(), H5P_DEFAULT); if (dataset_id < 0) { throw GenericExc(QObject::tr("Ошибка открытия set данных")); } status = H5Dread (dataset_id, GetByteType(byteType), H5S_ALL, H5S_ALL, H5P_DEFAULT, data); if (status < 0) { throw GenericExc(QObject::tr("Ошибка чтения данных")); } status = H5Dclose(dataset_id); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия set данных")); } for (int i = groups_idList.size()-1; i >= 0; i-- ) { status = H5Gclose(groups_idList.at(i)); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия группы")); } } status = H5Fclose (fileHandle); if (status < 0) { throw GenericExc(QObject::tr("Ошибка закрытия файла")); } return true; } catch (const GenericExc& exc) { m_errDescription = exc.GetWhat(); return false; } catch (...) { m_errDescription = QObject::tr("Неизвестная ошибка при чтении данных из файла"); return false; } }
void VirtualMachine::LoadRuntimeClasses() { // Load only once. if(objectClass) return; // The first loaded module must be the runtime. runtimeModule = loadedModules[0]; runtimeModule->SetRuntimeFlag(true); // Get basic classes. typeClass = GetClass(runtimeModule, "Chela.Lang.Type"); objectClass = GetClass(runtimeModule, "Chela.Lang.Object"); stringClass = GetClass(runtimeModule, "Chela.Lang.String"); closureClass = GetClass(runtimeModule, "Chela.Lang.Closure"); arrayClass = GetClass(runtimeModule, "Chela.Lang.Array"); valueTypeClass = GetClass(runtimeModule, "Chela.Lang.ValueType"); enumClass = GetClass(runtimeModule, "Chela.Lang.Enum"); delegateClass = GetClass(runtimeModule, "Chela.Lang.Delegate"); // Special attributes. threadStaticAttribute = GetClass(runtimeModule, "Chela.Lang.ThreadStaticAttribute"); chelaIntrinsicAttribute = GetClass(runtimeModule, "Chela.Runtime.Core.ChelaIntrinsicAttribute"); // Get the kernel data holding classes. streamHolderClass = GetTemplateClass(runtimeModule, "Chela.Compute.StreamHolder"); streamHolder1DClass = GetTemplateClass(runtimeModule, "Chela.Compute.StreamHolder1D"); streamHolder2DClass = GetTemplateClass(runtimeModule, "Chela.Compute.StreamHolder2D"); streamHolder3DClass = GetTemplateClass(runtimeModule, "Chela.Compute.StreamHolder3D"); uniformHolderClass = GetTemplateClass(runtimeModule, "Chela.Compute.UniformHolder"); // Get the reflection classes. assemblyClass = GetClass(runtimeModule, "Chela.Reflection.Assembly"); constructorInfoClass = GetClass(runtimeModule, "Chela.Reflection.ConstructorInfo"); eventInfoClass = GetClass(runtimeModule, "Chela.Reflection.EventInfo"); fieldInfoClass = GetClass(runtimeModule, "Chela.Reflection.FieldInfo"); memberInfoClass = GetClass(runtimeModule, "Chela.Reflection.MemberInfo"); methodInfoClass = GetClass(runtimeModule, "Chela.Reflection.MethodInfo"); parameterInfoClass = GetClass(runtimeModule, "Chela.Reflection.ParameterInfo"); propertyInfoClass = GetClass(runtimeModule, "Chela.Reflection.PropertyInfo"); // Register associated types. RegisterPrimStruct(GetBoolType(), "Chela.Lang.Boolean"); RegisterPrimStruct(GetCharType(), "Chela.Lang.Char"); RegisterPrimStruct(GetSByteType(), "Chela.Lang.SByte"); RegisterPrimStruct(GetByteType(), "Chela.Lang.Byte"); RegisterPrimStruct(GetShortType(), "Chela.Lang.Int16"); RegisterPrimStruct(GetUShortType(), "Chela.Lang.UInt16"); RegisterPrimStruct(GetIntType(), "Chela.Lang.Int32"); RegisterPrimStruct(GetUIntType(), "Chela.Lang.UInt32"); RegisterPrimStruct(GetLongType(), "Chela.Lang.Int64"); RegisterPrimStruct(GetULongType(), "Chela.Lang.UInt64"); RegisterPrimStruct(GetSizeType(), "Chela.Lang.UIntPtr"); RegisterPrimStruct(GetPtrDiffType(), "Chela.Lang.IntPtr"); RegisterPrimStruct(GetFloatType(), "Chela.Lang.Single"); RegisterPrimStruct(GetDoubleType(), "Chela.Lang.Double"); RegisterPrimStruct(GetVoidType(), "Chela.Lang.Void"); // Register vector associated types. RegisterPrimStruct(GetFloatVectorTy(this, 2), "Chela.Lang.Single2"); RegisterPrimStruct(GetFloatVectorTy(this, 3), "Chela.Lang.Single3"); RegisterPrimStruct(GetFloatVectorTy(this, 4), "Chela.Lang.Single4"); RegisterPrimStruct(GetDoubleVectorTy(this, 2), "Chela.Lang.Double2"); RegisterPrimStruct(GetDoubleVectorTy(this, 3), "Chela.Lang.Double3"); RegisterPrimStruct(GetDoubleVectorTy(this, 4), "Chela.Lang.Double4"); RegisterPrimStruct(GetIntVectorTy(this, 2), "Chela.Lang.Int32x2"); RegisterPrimStruct(GetIntVectorTy(this, 3), "Chela.Lang.Int32x3"); RegisterPrimStruct(GetIntVectorTy(this, 4), "Chela.Lang.Int32x4"); RegisterPrimStruct(GetBoolVectorTy(this, 2), "Chela.Lang.Boolean2"); RegisterPrimStruct(GetBoolVectorTy(this, 3), "Chela.Lang.Boolean3"); RegisterPrimStruct(GetBoolVectorTy(this, 4), "Chela.Lang.Boolean4"); // Register matrix associated types. RegisterPrimStruct(GetFloatMatrixTy(this, 3,3), "Chela.Lang.Single3x3"); RegisterPrimStruct(GetFloatMatrixTy(this, 4,4), "Chela.Lang.Single4x4"); // Declare them. typeClass->DeclarePass(); objectClass->DeclarePass(); stringClass->DeclarePass(); closureClass->DeclarePass(); arrayClass->DeclarePass(); valueTypeClass->DeclarePass(); enumClass->DeclarePass(); delegateClass->DeclarePass(); streamHolderClass->DeclarePass(); streamHolder1DClass->DeclarePass(); streamHolder2DClass->DeclarePass(); streamHolder3DClass->DeclarePass(); uniformHolderClass->DeclarePass(); assemblyClass->DeclarePass(); constructorInfoClass->DeclarePass(); eventInfoClass->DeclarePass(); fieldInfoClass->DeclarePass(); memberInfoClass->DeclarePass(); methodInfoClass->DeclarePass(); parameterInfoClass->DeclarePass(); propertyInfoClass->DeclarePass(); }