protected void updateIndexSetFor(int i, double C) throws Exception {
    /*
     m_I0a.delete(i);
     m_I0b.delete(i);
     m_I1.delete(i);
     m_I2.delete(i);
     m_I3.delete(i);
     */
    if (m_alpha[i] == 0 && m_alphaStar[i] == 0) {
      //m_I1.insert(i);
      m_iSet[i] = I1;
      m_I0.delete(i);
    } else if (m_alpha[i] > 0) {
      if (m_alpha[i] < C) {
	if ((m_iSet[i] & I0) == 0) {
	  //m_error[i] = -SVMOutput(i) - m_b + m_target[i];
	  m_I0.insert(i);
	}
	//m_I0a.insert(i);
	m_iSet[i] = I0a;
      } else { // m_alpha[i] == C
	//m_I3.insert(i);
	m_iSet[i] = I3;
	m_I0.delete(i);
      }
    } else {// m_alphaStar[i] > 0 
      if (m_alphaStar[i] < C) {
	if ((m_iSet[i] & I0) == 0) {
	  //m_error[i] = -SVMOutput(i) - m_b + m_target[i];
	  m_I0.insert(i);
	}
	//m_I0b.insert(i);
	m_iSet[i] = I0b;
      } else { // m_alpha[i] == C
	//m_I2.insert(i);
	m_iSet[i] = I2;
	m_I0.delete(i);
      }
    }
  }