/// <summary> /// Fixes the type arguments of a generic method implementing a MatLab function. /// </summary> /// <param name="method">The generic method for a MatLab function.</param> /// <returns>A sequence of instantiation with the different MatLab types supported by the method.</returns> public static IEnumerable <MethodInfo> InstantiateGenericMethod(MethodInfo method) { Contract.Requires(method != null && method.IsGenericMethodDefinition); var genericArguments = method.GetGenericArguments(); Contract.Assert(genericArguments.Length == 1); var genericMType = genericArguments[0].GetCustomAttribute <GenericMTypeAttribute>(); if (genericMType == null) { var message = string.Format(CultureInfo.InvariantCulture, "Generic method {0} must have generic parameter attribute {1} for instantiation as MatLab functions.", method.Name, typeof(GenericMTypeAttribute).Name); throw new ArgumentException(message, "method"); } for (int i = 1; i < 0x40000000; i <<= 1) { var classKind = (MClassKinds)i; if ((classKind & genericMType.ClassKinds) == 0) { continue; } var @class = MClass.FromKind(classKind); yield return(method.MakeGenericMethod(@class.CliType)); if (genericMType.AllowComplex && (classKind & MClassKinds.SupportsComplexMask) != 0) { yield return(method.MakeGenericMethod(((MPrimitiveClass)@class).Complex.CliType)); } } }
public MClass GetDeepCopy() { MClass deepCopy = new MClass(); deepCopy.classCode = this.classCode; deepCopy.classTeacher = this.classTeacher; deepCopy.classWeekDay = this.classWeekDay; deepCopy.classTime = this.classTime; deepCopy.type = this.type; deepCopy.genre = this.genre; deepCopy.className = this.className; return(deepCopy); }
public string InsertNewPlayer(string name, int score) { try { string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Game_DataBase.sqlite"); var db = new SQLiteConnection(db_path); var item = new MClass(); item.Name = name; item.Score = score; db.Insert(item); return("Data Saved"); } catch (Exception ex) { return("Error : " + ex.Message); } }
public string DeletePlayer(int id) { try { string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Game_DataBase.sqlite"); var db = new SQLiteConnection(db_path); var item = new MClass(); item.Id = id; db.Delete(item); return("Daleted"); } catch (Exception ex) { return("Error : " + ex.Message); } }
private static Variable ReadVariable(XElement variableElement) { var name = (string)variableElement.Attribute("name"); MType type = null; var className = (string)variableElement.Attribute("class"); if (className != null) { type = MClass.FromName((string)className); if (type.IsPrimitive) { // If we don't have complex information, then the variable's value // is sometimes real and sometimes complex, which we approximate // by making it always complex, though this can be incorrect. var complex = (bool?)variableElement.Attribute("complex") ?? true; if (complex) { type = ((MPrimitiveClass)type).Complex; } } } bool scalar = ((bool?)variableElement.Attribute("scalar")).GetValueOrDefault(); bool initOnly = ((bool?)variableElement.Attribute("final")).GetValueOrDefault(); string constantString = (string)variableElement.Attribute("constant"); object constantValue = null; if (constantString != null) { if (type.IsReal && type.IsNumeric) { constantValue = double.Parse(constantString, CultureInfo.InvariantCulture); } // TODO: Implement strings } var staticRepr = new MRepr(type, scalar ? MStructuralClass.Scalar : MStructuralClass.FullArray); return(new Variable(name, staticRepr, constantValue, initOnly)); }
private void EmitLoadConstant(double value, MClass mclass) { if (mclass.IsInteger) { // IntOK'd variable if (mclass == MClass.Int64) { Contract.Assert((long)value == value); cil.LoadInt64((long)value); } else if (mclass == MClass.Int32) { Contract.Assert((int)value == value); cil.LoadInt32((int)value); } } else if (mclass == MClass.Double) { cil.LoadFloat64(value); } }
public string UpdateScore(int id, string name, int score) { try { string db_path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Game_DataBase.sqlite"); var db = new SQLiteConnection(db_path); var item = new MClass(); item.Id = id; item.Name = name; item.Score = score; db.Update(item); return("Updated..."); } catch (Exception ex) { return("Error : " + ex.Message); } }
//Sắp xếp tất cả các lịch có thể public void GetAllPossibleArrangement(List <Subject> subjects, ref List <List <List <MClass> > > results, List <List <MClass> > currentWeek, int index, string genre) { var checkedEnglishClasses = new List <MClass>(); for (int mclassCounter = 0; mclassCounter < subjects[index].classes.Count; mclassCounter++) { var mclass = subjects[index].classes[mclassCounter]; if (mclass.genre != genre || checkedEnglishClasses.Contains(mclass)) { continue; } List <List <MClass> > cloneCurrentWeek = null; //Nếu dãy hiện tại là null, khởi tạo 1 dãy mới if (currentWeek == null) { cloneCurrentWeek = new List <List <MClass> >(); for (int i = 0; i < 9; i++) { List <MClass> day = new List <MClass>() { null, null, null, null, null, null, null, null, null, null, null }; cloneCurrentWeek.Add(day); } } else { cloneCurrentWeek = CopyWeek(currentWeek); } //Bỏ qua các lớp thực hành if (mclass.type == "TH") { continue; } else { Console.WriteLine(mclass.classCode); //Nếu thời gian là *, thêm lớp vào dãy hiện tại tại vị trí số 8 (không thuộc ngày nào cả) if (mclass.classTime == "*" || mclass.classWeekDay == "*") { var currentWeekDay = cloneCurrentWeek[8]; var mclassTime = mclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); for (int time = 0; time < mclassTime.Count; time++) { currentWeekDay.Add(mclass); } } else { //Ngày học của lớp đang xét var mclassWeekDay = Int32.Parse(mclass.classWeekDay); //Thời gian học của lớp đang xét var mclassTime = mclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); //Lấy ngày học đó trong chuỗi var currentWeekDay = cloneCurrentWeek[mclassWeekDay]; //Tìm xem có lớp thực hành nào tương ứng với lớp đang xét không var THmclasses = subjects[index].classes.Where(item => item.classCode.Substring(0, item.classCode.Length - 2) == mclass.classCode); Console.WriteLine("Class time: " + mclass.classTime); Console.WriteLine("Class day: " + mclass.classWeekDay); //Nếu đây là vòng lặp đầu tiên, thêm lớp vào dãy mà không cần xét điều kiện if (index == subjects.Count - 1) { //Xét lớp Anh văn, có thể có nhiều tiết 1 tuần MClass mclass2 = null; if (mclass.classCode.Substring(0, 3).Equals("ENG")) { Console.WriteLine("This is English"); for (int mclass2Counter = 0; mclass2Counter < subjects[index].classes.Count; mclass2Counter++) { if ((subjects[index].classes[mclass2Counter].classCode == mclass.classCode) && (subjects[index].classes[mclass2Counter] != mclass)) { mclass2 = subjects[index].classes[mclass2Counter]; break; } } } //Gán giá trị các tiết học của lớp đang xét vào ngày học for (int time = 0; time <= mclassTime.Count - 1; time++) { var classTime = mclassTime[time]; currentWeekDay[classTime] = mclass; } //Xét tiết học thứ 2 của lớp Anh văn nếu tồn tại if (mclass2 != null) { Console.WriteLine("Class 2 available"); checkedEnglishClasses.Add(mclass2); //Ngày học của lớp đang xét var mclass2WeekDay = Int32.Parse(mclass2.classWeekDay); //Thời gian học của lớp đang xét var mclass2Time = mclass2.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); //Lấy ngày học đó trong chuỗi var current2WeekDay = cloneCurrentWeek[mclass2WeekDay]; //Gán giá trị các tiết học của lớp đang xét vào ngày học for (int time = 0; time <= mclass2Time.Count - 1; time++) { var class2Time = mclass2Time[time]; current2WeekDay[class2Time] = mclass2; } } Visualization(cloneCurrentWeek); if (THmclasses.Count() > 0) { foreach (MClass THmclass in THmclasses) { var THCurrentWeek = CopyWeek(cloneCurrentWeek); if (THmclass.classTime == "*") { THCurrentWeek[8].Add(THmclass); } else { //Thêm ngày TH vào dãy var THmclassWeekDay = Int32.Parse(THmclass.classWeekDay); var THmclassTime = THmclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); var THcurrentWeekDay = THCurrentWeek[THmclassWeekDay]; for (int time = 0; time <= THmclassTime.Count - 1; time++) { var classTime = THmclassTime[time]; THcurrentWeekDay[classTime] = THmclass; } } GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre); } } else { GetAllPossibleArrangement(subjects, ref results, cloneCurrentWeek, index - 1, genre); } } //Nếu đang xét các vòng lặp tiếp theo, cần xét điều kiện để thêm lớp vào dãy else { var mclassTimeIsAvailable = true; var THmclassTimeIsAvailable = true; //Kiểm tra xem có thể xếp lớp vào chuỗi đc không for (int time = 0; time <= mclassTime.Count - 1; time++) { var classTime = mclassTime[time]; if (currentWeekDay[classTime] != null) { mclassTimeIsAvailable = false; break; } } if (!mclassTimeIsAvailable) { continue; } else { Console.WriteLine("This class is available"); //Gán giá trị các tiết học của lớp đang xét vào ngày học for (int time = 0; time <= mclassTime.Count - 1; time++) { var classTime = mclassTime[time]; currentWeekDay[classTime] = mclass; } //Xét lớp Anh văn, có thể có nhiều tiết 1 tuần MClass mclass2 = null; if (mclass.classCode.Substring(0, 3).Equals("ENG")) { Console.WriteLine("This is English"); for (int mclass2Counter = 0; mclass2Counter < subjects[index].classes.Count; mclass2Counter++) { if ((subjects[index].classes[mclass2Counter].classCode == mclass.classCode) && (subjects[index].classes[mclass2Counter] != mclass)) { mclass2 = subjects[index].classes[mclass2Counter]; break; } } } //Nếu ngày học Anh văn thứ 2 tồn tại if (mclass2 != null) { var mclass2TimeIsAvailable = true; Console.WriteLine("ENG Class 2 exists"); checkedEnglishClasses.Add(mclass2); //Ngày học của lớp đang xét var mclass2WeekDay = Int32.Parse(mclass2.classWeekDay); //Thời gian học của lớp đang xét var mclass2Time = mclass2.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); //Lấy ngày học đó trong chuỗi var current2WeekDay = cloneCurrentWeek[mclass2WeekDay]; //Kiểm tra xem có thể xếp lớp vào chuỗi đc không for (int time = 0; time <= mclass2Time.Count - 1; time++) { var class2Time = mclass2Time[time]; if (current2WeekDay[class2Time] != null) { mclass2TimeIsAvailable = false; break; } } if (!mclass2TimeIsAvailable) { continue; } Console.WriteLine("ENG Class 2 is available"); //Gán giá trị các tiết học của lớp đang xét vào ngày học for (int time = 0; time <= mclass2Time.Count - 1; time++) { var class2Time = mclass2Time[time]; current2WeekDay[class2Time] = mclass2; } } Visualization(cloneCurrentWeek); //Xét lớp thực hành if (THmclasses.Count() > 0) { foreach (MClass THmclass in THmclasses) { var THCurrentWeek = CopyWeek(cloneCurrentWeek); Console.WriteLine("TH class: " + THmclass.classCode); if (THmclass.classTime == "*") { THCurrentWeek[8].Add(THmclass); if (index != 0) { GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre); } else { Console.WriteLine("add to results"); results.Add(THCurrentWeek); } } //Kiểm tra xem có thể xếp lớp vào chuỗi đc không else { var THmclassWeekDay = Int32.Parse(THmclass.classWeekDay); var THmclassTime = THmclass.classTime.ToCharArray().Select(c => c.Equals('0') ? 10 : Convert.ToInt32(c.ToString())).ToList(); var THcurrentWeekDay = THCurrentWeek[THmclassWeekDay]; Console.WriteLine("TH Class time: " + THmclass.classTime); Console.WriteLine("TH Class day: " + THmclass.classWeekDay); for (int time = 0; time <= THmclassTime.Count - 1; time++) { int classTime = THmclassTime[time]; if (THcurrentWeekDay[classTime] != null) { THmclassTimeIsAvailable = false; break; } } if (THmclassTimeIsAvailable) { Console.WriteLine("This TH class is available"); for (int time = 0; time <= THmclassTime.Count - 1; time++) { THcurrentWeekDay[THmclassTime[time]] = THmclass; } Visualization(THCurrentWeek); if (index != 0) { GetAllPossibleArrangement(subjects, ref results, THCurrentWeek, index - 1, genre); } else { Console.WriteLine("add to results"); results.Add(THCurrentWeek); } } } } } else { if (index != 0) { GetAllPossibleArrangement(subjects, ref results, cloneCurrentWeek, index - 1, genre); } else { Console.WriteLine("add to results"); results.Add(cloneCurrentWeek); } } } } } } } }
//Đọc file excel danh sách lớp để tạo thành object public Root ReadExcelFile() { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); using (var stream = System.IO.File.Open("/test.xlsx", FileMode.Open, FileAccess.Read)) { //Object chứa tất cả dữ liệu Root root = new Root(); using (var reader = ExcelReaderFactory.CreateReader(stream)) { do { while (reader.Read()) { var subjectCode = reader.GetValue(1); if (subjectCode != null) { // Dữ liệu lớp MClass classData = new MClass(); classData.classCode = reader.GetValue(2).ToString(); classData.classTeacher = reader.GetValue(5) != null?reader.GetValue(5).ToString() : "*"; classData.classWeekDay = reader.GetValue(10) != null?reader.GetValue(10).ToString() : "*"; classData.classTime = reader.GetValue(11) != null?reader.GetValue(11).ToString() : "*"; classData.className = reader.GetValue(3) != null?reader.GetValue(3).ToString() : "*"; if (classData.classCode.Substring(classData.classCode.Length - 2) == ".1" || classData.classCode.Substring(classData.classCode.Length - 2) == ".2") { classData.type = "TH"; } else { classData.type = "LT"; } if (classData.type == "LT") { if (classData.classCode.Substring(classData.classCode.Length - 2) == "TT") { classData.genre = "TT"; } else if ((classData.classCode.Substring(classData.classCode.Length - 3) == "CLC") || ( classData.classCode.Substring(classData.classCode.Length - 2) == "CL")) { classData.genre = "CLC"; } else if (classData.classCode.Substring(classData.classCode.Length - 2) == "TN") { classData.genre = "TN"; } else { classData.genre = "CQ"; } } // Thêm dữ liệu lớp học Subject subjectData = null; if (root.subjects == null) { subjectData = new Subject(); List <MClass> classes = new List <MClass>(); classes.Add(classData); subjectData.classes = classes; List <Subject> subjects = new List <Subject>(); subjects.Add(subjectData); root.subjects = subjects; } //Tìm xem mã môn học đã tồn tại chưa, nếu có thì thêm lớp vào môn học có sẵn for (int i = 0; i < root.subjects.Count; i++) { if (root.subjects[i].subjectCode == subjectCode.ToString()) { subjectData = root.subjects[i]; subjectData.classes.Add(classData); root.subjects[i] = subjectData; break; } } //Nếu mã môn học chưa tồn tại, tạo môn học mới if (subjectData == null) { subjectData = new Subject(); subjectData.subjectCode = subjectCode.ToString(); List <MClass> classes = new List <MClass>(); classes.Add(classData); subjectData.classes = classes; var subjects = root.subjects; subjects.Add(subjectData); } } } } while (reader.NextResult()); } return(root); } }