public BookBase(Book[] bs, String p) { //books = new Books(); //books.books = bs; books = bs; path = p; if (!Save()) throw new ArgumentException(); }
/// <summary> /// Проверяет удовлетворяет ли данная книга, некоторой маске /// </summary> /// <param name="mask">Маска</param> public static bool likeMask(this Book b, Book mask) { bool result = ((b.title == mask.title) || (mask.title == "")) && ((b.author == mask.author) || (mask.author == "")) && ((Math.Abs(b.pages - mask.pages) < 10) || (mask.pages == 0)) && ((b.price <= mask.price) || (mask.price == 0)); //&&((b.from.name == mask.from.name) || (mask.from.name == "")); if (mask.tags == null) return result; int i, j, count = 0; for (i = 0; i < b.tags.Length; i++) for (j = 0; j < mask.tags.Length; j++) if (b.tags[i] == mask.tags[j]) count++; result = result && (count == mask.tags.Length); return result; }
public void AddHistory(Book[] newBooks) { history.Add(newBooks); }
/// <summary> /// Конструктор события ответа на запрос /// </summary> /// <param name="ans">Потоко небезопасная передача ответа на запрос</param> public QueryEventArgs(Book[] ans, int[] ids) { Answer = ans; Indexes = ids; }
public void OnQuery(Book mask) { if (AllBase==null) return; List<Book> Result = new List<Book>(); List<int> Indexes = new List<int>(); /* foreach (BookBase bb in AllBase) { Result.AddRange( from b in bb.books.books where b.likeMask(mask) select b ); } */ int ids = 0; for (int i = 0; i < AllBase.Length; i++) { for (int j = 0; j < AllBase[i].books.Length; j++) { ids++; if (AllBase[i].books[j].likeMask(mask)) { Result.Add(AllBase[i].books[j]); Indexes.Add(ids); } } } Query(this, new QueryEventArgs(Result.ToArray(), Indexes.ToArray())); }