D graph library -- update

H. S. Teoh hsteoh at quickfur.ath.cx
Thu Jul 11 11:27:03 PDT 2013


On Thu, Jul 11, 2013 at 08:14:00PM +0200, w0rp wrote:
> I don't like it. Here is why.
> 
> 1. You can only use a size_t type as the vertex type. What about
> strings?
> 2. The distinction between directed and undirected graphs is made
> with an boolean type parameter? Why not an enum? Better yet, why not
> just use interfaces? (You are already using classes and garbage
> collected memory.)

I think an enum would be better.


> 3. I have to control the graph's capacity manually, and I can't use
> arbitrary numbers for edges.

Yeah, constraining the number of vertices/edges at ctor time is not
feasible. We need to have an implementation that allows modifying the
graph post-construction, such as adding edges. (Deleting may not be as
important, and may be tricky to implement, but there *are* use cases for
that too.)


> 4. Adding an edge doesn't add vertices.

Couldn't you just add vertices manually, since you already know what the
edge is?


> My most common use of graphs is to start from nothing, build from
> adding edges arbitrarily, usually from IDs which may be integers,
> and may be strings, and then use graph algorithms to gain some
> understanding of the relation between objects mapped to these IDs.
> With this library, this will be difficult or impossible.

Yeah we need to cater to this use case too.

However, you should be able to use a helper class/graph to collect all
vertices/edges, then create the library's graph type using that once all
the information is known (e.g. number of vertices/edges, etc.). I
wouldn't say this is impossible. Troublesome, yes, but definitely
possible.


T

-- 
He who sacrifices functionality for ease of use, loses both and deserves neither. -- Slashdotter


More information about the Digitalmars-d mailing list