Smrf.NodeXL.ExcelTemplate.DuplicateEdgeMerger.MarkRowsForDeletion C# (CSharp) Method

MarkRowsForDeletion() protected method

protected MarkRowsForDeletion ( ListObject oEdgeTable, Object aoVertex1NameValues, Object aoVertex2NameValues, Object aoThirdColumnValues, System.Boolean bGraphIsDirected, ListColumn &oDeleteIfEmptyColumn, Range &oDeleteIfEmptyData, Object &aoDeleteIfEmptyValues ) : void
oEdgeTable ListObject
aoVertex1NameValues Object
aoVertex2NameValues Object
aoThirdColumnValues Object
bGraphIsDirected System.Boolean
oDeleteIfEmptyColumn ListColumn
oDeleteIfEmptyData Range
aoDeleteIfEmptyValues Object
return void
    MarkRowsForDeletion
    (
        ListObject oEdgeTable,
        Object [,] aoVertex1NameValues,
        Object [,] aoVertex2NameValues,
        Object [,] aoThirdColumnValues,
        Boolean bGraphIsDirected,
        out ListColumn oDeleteIfEmptyColumn,
        out Range oDeleteIfEmptyData,
        out Object [,] aoDeleteIfEmptyValues
    )
    {
        Debug.Assert(oEdgeTable != null);
        Debug.Assert(aoVertex1NameValues != null);
        Debug.Assert(aoVertex2NameValues != null);
        AssertValid();

        HashSet<String> oUniqueEdgeKeys = new HashSet<String>();

        if ( !ExcelTableUtil.TryGetOrAddTableColumn(oEdgeTable,
            DeleteIfEmptyColumnName, ExcelTableUtil.AutoColumnWidth, null,
            out oDeleteIfEmptyColumn, out oDeleteIfEmptyData,
            out aoDeleteIfEmptyValues) )
        {
            throw new InvalidOperationException(
                "Can't add marked for deletion column.");
        }

        Int32 iRows = GetRowCount(aoVertex1NameValues);

        for (Int32 iRowOneBased = 1; iRowOneBased <= iRows; iRowOneBased++)
        {
            String sEdgeKey;
            Object oDeleteIfEmpty = 1;

            if (
                TryGetEdgeKey(iRowOneBased, aoVertex1NameValues,
                    aoVertex2NameValues, aoThirdColumnValues, bGraphIsDirected,
                    out sEdgeKey)
                &&
                !oUniqueEdgeKeys.Add(sEdgeKey)
                )
            {
                // This is a duplicate that is not the first instance.  It
                // should be deleted.

                oDeleteIfEmpty = null;
            }

            aoDeleteIfEmptyValues[iRowOneBased, 1] = oDeleteIfEmpty;
        }

        oDeleteIfEmptyData.set_Value(Missing.Value, aoDeleteIfEmptyValues);
    }