private EventVertex CreateVertexEvent(InternalEventVertex vertex, int inDegree, int outDegree)
        {
            int eventVertexId;

            if (!verticeIdsMap.TryGetValue(vertex.Id, out eventVertexId))
            {
                verticeIdsMap[vertex.Id] = eventVertexId = verticeNextId;
                verticeNextId++;
            }

            EventVertex eventVertex;

            if (inDegree == 0)
            {
                eventVertex = EventVertex.CreateGraphStart(eventVertexId);
            }
            else if (outDegree == 0)
            {
                eventVertex = EventVertex.CreateGraphEnd(eventVertexId);
            }
            else
            {
                eventVertex = EventVertex.Create(eventVertexId);
            }
            return(eventVertex);
        }
        private ActivityEdge CreateActivityEdge(EventVertex source, EventVertex target, Activity edgeActivity, bool isCritical)
        {
            var edgeUniqueKey = new Tuple <int, int>(source.Id, target.Id);
            int activityEdgeId;

            if (!edgesIdsMap.TryGetValue(edgeUniqueKey, out activityEdgeId))
            {
                edgesIdsMap[edgeUniqueKey] = activityEdgeId = edgesNextId;
                edgesNextId++;
            }

            return(new ActivityEdge(activityEdgeId, source, target, edgeActivity, isCritical));
        }