code: SimpleEdge tryCreateCachedEdge_(int value) {
  		int ind = (value & NumberUtils.intMax()) % m_simple_edges_cache.size();
  		SimpleEdge se = m_simple_edges_cache.get(ind);
  		if (se == null) {
  			if (m_simple_edges_recycle.isEmpty()) {
  				// assert(m_simple_edges_buffer.size() <
  				// m_simple_edges_buffer.capacity());//should never happen
  				// assert(m_simple_edges_buffer.size() <
  				// m_simple_edges_cache.size());//should never happen
  				m_simple_edges_buffer.add(new SimpleEdge());
  				se = m_simple_edges_buffer
  						.get(m_simple_edges_buffer.size() - 1);
  			} else {
  				se = m_simple_edges_recycle
  						.get(m_simple_edges_recycle.size() - 1);
  				m_simple_edges_recycle
  						.remove(m_simple_edges_recycle.size() - 1);
  			}
  
  			se.m_value = value;
  			m_simple_edges_cache.set(ind, se);
  			return se;
  		} else {
  			assert (se.m_value != value);// do not call TryCreateCachedEdge
  											// twice.
  		}
  
  		return null;
  	}
docs: Creates a cached edge. May fail and return NULL.