void CListBoxDiffMarks::setLines(const StringArray &lines) {
  const size_t lastSize = m_lastContent.size();
  const size_t n        = lines.size();

  m_diffSetArray.clear();
  for (size_t i = 0; i < n; i++) {
    const String &line = lines[i];
    const size_t  len  = line.length();
    BitSet diffSet(max(len, 10));
    if(len > 0) {
      if (i >= lastSize) {
        diffSet.add(0,len-1);
      } else {
        const String &lastLine = m_lastContent[i];
        const size_t  lastLen  = lastLine.length();
        const size_t  lmin = min(len, lastLen);
        const TCHAR  *cp = line.cstr(), *lcp = lastLine.cstr();
        size_t        j;
        for (j = 0; j < lmin; j++) {
          if(*(cp++) != *(lcp++)) diffSet.add(j);
        }
        if(j < len) diffSet.add(j, len-1);
      }
    }
    m_diffSetArray.add(diffSet);
  }
  ResetContent();
  for(size_t i = 0; i < lines.size(); i++) {
    AddString(EMPTYSTRING);
  }
  m_lastContent = lines;
}
vector<int> Hypergraph::getGraphDifference(const Hypergraph *newGraph)
{
	const vector<HyperEdge> &newEdges = newGraph->_edges;
	vector<int> diffSet (0);
	int nEdges = _edges.size();
	int nNewEdges = newEdges.size();
	int i=0;
	vector<int>::iterator it = diffSet.begin();
	for (; i<min(nEdges, nNewEdges); ++i)
	{
		vector<int> v(_edges[i].size()+newEdges[i].size());
		vector<int>::iterator vIt = set_symmetric_difference(_edges[i].begin(), _edges[i].end(), newEdges[i].begin(), newEdges[i].end(), v.begin());
		int originalSize = diffSet.size();
		diffSet.resize(vIt-v.begin()+diffSet.size());
		copy(v.begin(), vIt, diffSet.begin()+originalSize);
	}

	for (;i<nEdges; ++i)
	{
		int originalSize = diffSet.size();
		diffSet.resize(diffSet.size()+_edges[i].size());
		copy(_edges[i].begin(), _edges[i].end(), diffSet.begin()+originalSize);
	}

	for (;i<nNewEdges; ++i)
	{
		int originalSize = diffSet.size();
		diffSet.resize(diffSet.size()+newEdges[i].size());
		copy(_edges[i].begin(), _edges[i].end(), diffSet.begin()+originalSize);
	}

	sort(diffSet.begin(), diffSet.end());
	it = unique(diffSet.begin(), diffSet.end());
	diffSet.resize(it-diffSet.begin());
	return diffSet;
}