Complex networks in D

bearophile bearophileHUGS at lycos.com
Tue Jul 16 07:18:01 PDT 2013


Joseph Rushton Wakeling:

> http://braingam.es/2013/07/complex-networks-in-d/

     size_t vertexCount() @property const pure nothrow
     {
         assert(_sumHead.length == _sumTail.length);
         return _sumHead.length - 1;
     }

Is that better written in a struct/class invariant?


         size_t degreeIn(immutable size_t v) const pure nothrow
         {
             assert(v + 1 < _sumTail.length);
             return _sumTail[v + 1] - _sumTail[v];
         }

Here you are looking for the method pre-condition.

And "in size_t v" is enough compared to "immutable size_t v".


auto neighbours(immutable size_t v) const
{
     return chain(map!(a => 
_tail[_indexHead[a]])(iota(_sumHead[v], _sumHead[v + 1])),
     map!(a => _head[_indexTail[a]])(iota(_sumTail[v], _sumTail[v 
+ 1])));
}

For such kind of code I suggest to use UFCS chains.
Also be careful with the performance of such range-based code, 
writing benchmarks. Unfortunately often DMD doesn't compile it 
efficiently.

Bye,
bearophile


More information about the Digitalmars-d-announce mailing list