bool Puzzle::IsValid() const { USHORT foundNumbers; // Check whether any rows have duplicates. for (int row = 0; row < kNumNumbers; row++) { foundNumbers = 0; auto rowOffset = row * kNumNumbers; for (int column = 0; column < kNumNumbers; column++) { if(CheckForDuplicate(foundNumbers, Cells[rowOffset + column])) { return false; } } } // Check for duplicates in any columns. for (int column = 0; column < kNumNumbers; column++) { foundNumbers = 0; for (int row = 0; row < kNumNumbers; row++) { int position = row * kNumNumbers + column; if(CheckForDuplicate(foundNumbers, Cells[position])) { return false; } } } // Check for duplicates in any 3x3 segments. // Outer two loops: iterate over segments. for (int outerRow = 0; outerRow < kSegmentWidth; outerRow++) { for (int outerColumn = 0; outerColumn < kSegmentWidth; outerColumn++) { foundNumbers = 0; // Inner loops: loop through cells of each segment. for (int innerRow = 0; innerRow < kSegmentWidth; innerRow++) { int rowOffset = (outerRow * kSegmentWidth + innerRow) * kNumNumbers; for (int innerColumn = 0; innerColumn < kSegmentWidth; innerColumn++) { int position = rowOffset + outerColumn * kSegmentWidth + innerColumn; if (CheckForDuplicate(foundNumbers, Cells[position])) { return false; } } } } } return true; }
int LoadSession(WPARAM, LPARAM lparam) { int dup = 0; int hidden[255] = { '0' }; MCONTACT hContact; MCONTACT session_list_t[255] = { 0 }; int mode = 0; if ((int)lparam >= g_ses_limit && lparam != 256) { mode = 1; lparam -= g_ses_limit; } if (session_list_recovered[0] && lparam == 256 && mode == 0) memcpy(session_list_t, session_list_recovered, sizeof(session_list_t)); else for (hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (LoadContactsFromMask(hContact, mode, lparam)) { int i = GetInSessionOrder(hContact, mode, lparam); session_list_t[i] = hContact; } } int i = 0, j = 0; //TODO: change to "switch" while (session_list_t[i] != 0) { if (CheckForDuplicate(session_list, session_list_t[i]) == -1) CallService(MS_CLIST_CONTACTDOUBLECLICKED, (WPARAM)session_list_t[i], 0); else if (g_bWarnOnHidden) { if (!CheckContactVisibility(session_list_t[i])) { hidden[j] = i + 1; j++; } dup++; } i++; } if (i == 0) { if (g_bOtherWarnings) MessageBox(NULL, TranslateT("No contacts to open"), TranslateT("Sessions Manager"), MB_OK | MB_ICONWARNING); return 1; } if (dup == i) { if (!hidden[i]) { if (g_bOtherWarnings) MessageBox(NULL, TranslateT("This Session already opened"), TranslateT("Sessions Manager"), MB_OK | MB_ICONWARNING); return 1; } if (!g_bWarnOnHidden && g_bOtherWarnings) { MessageBox(NULL, TranslateT("This Session already opened"), TranslateT("Sessions Manager"), MB_OK | MB_ICONWARNING); return 1; } if (g_bWarnOnHidden) { if (IDYES == MessageBox(NULL, TranslateT("This Session already opened (but probably hidden).\nDo you want to show hidden contacts?"), TranslateT("Sessions Manager"), MB_YESNO | MB_ICONQUESTION)) for (j = 0; hidden[j] != 0; j++) CallService(MS_CLIST_CONTACTDOUBLECLICKED, (WPARAM)session_list_t[hidden[j] - 1], 0); } } return 0; }
int AddToCurSession(MCONTACT wparam, LPARAM lparam) { if (CheckForDuplicate(session_list, wparam) == -1) { for (int i = 0;; i++) { if (session_list[i] == 0) { session_list[i] = wparam; break; } } } return 0; }
int SaveSessionHandles(WPARAM wparam,LPARAM lparam) { if (session_list[0] == 0) return 1; int k=0; for (HANDLE hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if ((k=CheckForDuplicate(session_list,hContact)) != -1 && !(g_bExclHidden && !CheckContactVisibility(hContact))) { AddSessionMark(hContact,lparam,'1'); AddInSessionOrder(hContact,lparam,k,1); } else { AddSessionMark(hContact,lparam,'0'); AddInSessionOrder(hContact,lparam,0,0); } } if (lparam == 1) { g_ses_count++; db_set_b(0, MODNAME, "UserSessionsCount", (BYTE)g_ses_count); } return 0; }