Example #1
0
        public void pull()
        {
            IKVPairInstance <IVertex, IIterator <IDataTriangle> > input_values_instance = (IKVPairInstance <IVertex, IIterator <IDataTriangle> >)Input_values.Instance;
            IVertexInstance ikey = (IVertexInstance)input_values_instance.Key;
            IIteratorInstance <IDataTriangle> ivalues = (IIteratorInstance <IDataTriangle>)input_values_instance.Value;
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;
            object o; int w = ikey.Id;

            while (ivalues.fetch_next(out o))
            {
                IEnumerator <int> wneighbors = g.iteratorNeighborsOf(w);
                while (wneighbors.MoveNext())
                {
                    int z = wneighbors.Current;
                    if (w < z)
                    {
                        IKVPairInstance <IVertex, IDataTriangle> item = (IKVPairInstance <IVertex, IDataTriangle>)Output.createItem();
                        ((IVertexInstance)item.Key).Id        = ((IDataTriangleInstance)o).V;
                        ((IDataTriangleInstance)item.Value).V = w;
                        ((IDataTriangleInstance)item.Value).W = z;
                        output_value.put(item);
                    }
                }
            }
        }
Example #2
0
        public void pull()
        {
            IKVPairInstance <IVertex, IIterator <IDataTriangle> > input_values_instance = (IKVPairInstance <IVertex, IIterator <IDataTriangle> >)Input_values.Instance;
            IVertexInstance ikey = (IVertexInstance)input_values_instance.Key;
            IIteratorInstance <IDataTriangle> ivalues = (IIteratorInstance <IDataTriangle>)input_values_instance.Value;
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;
            object o; int v = ikey.Id;

            ICollection <int> vneighbors = g.neighborsOf(v);

            while (ivalues.fetch_next(out o))
            {
                int w = ((IDataTriangleInstance)o).V;
                int z = ((IDataTriangleInstance)o).W;
                if (vneighbors.Contains(z) && v < z)
                {
                    IList <KeyValuePair <int, int> > l;
                    if (!triangles.TryGetValue(v, out l))
                    {
                        l            = new List <KeyValuePair <int, int> > ();
                        triangles[v] = l;
                    }
                    l.Add(new KeyValuePair <int, int> (w, z));
                    count++;
                    //emite (v, w, z, output_value);
                }
            }
        }
        public IVertexInstance newInstance(int i)
        {
            IVertexInstance instance = (IVertexInstance)newInstance();

            instance.Id = i;
            return(instance);
        }
        public object newInstance()
        {
            IVertexInstance        v = (IVertexInstance)this.Vertex.newInstance();
            IEdgeInstance <V, int> e = (IEdgeInstance <V, int>) this.EdgeFactory.newInstance();

            instance = new IDataContainerKVInstanceImpl <V, E, int, IEdgeInstance <V, int> > (v.Id, e, Rank);
            return(instance);
        }
        public override void main()
        {
            IVertexInstance  input_vertex_instance   = (IVertexInstance)Input_key.Instance;
            IIntegerInstance output_integer_instance = (IIntegerInstance)Output_key.Instance;
            int value = graph_partition_table[Math.Abs(input_vertex_instance.Id) - 1];

            output_integer_instance.Value = value % NumberOfPartitions;
        }
Example #6
0
        }                                            // Isso é necessário no caso de IKey ser do tipo IVertex.

        #endregion

        #region Algorithm implementation
        public void startup_push()
        {
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value_instance = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;
            IEnumerator <int> V = g.vertexSet().GetEnumerator();

            while (V.MoveNext())
            {
                int v = V.Current;
                if (!isGhost(v))
                {
                    ICollection <int> vneighbors = g.neighborsOf(v);
                    foreach (int w in vneighbors)
                    {
                        if (v < w)                           //buscam-se os vérices maiores
                        {
                            if (isGhost(w))
                            {
                                IKVPairInstance <IVertex, IDataTriangle> item = (IKVPairInstance <IVertex, IDataTriangle>)Output.createItem();
                                IVertexInstance       ok = (IVertexInstance)item.Key;
                                IDataTriangleInstance ov = (IDataTriangleInstance)item.Value;
                                ok.Id = w;
                                ov.V  = v;
                                output_value_instance.put(item);
                            }
                            else
                            {
                                IList <KeyValuePair <int, int> > l;
                                if (!triangles.TryGetValue(v, out l))
                                {
                                    l            = new List <KeyValuePair <int, int> > ();
                                    triangles[v] = l;
                                }

                                IEnumerator <int> wneighbors = g.iteratorNeighborsOf(w);
                                while (wneighbors.MoveNext())
                                {
                                    int z = wneighbors.Current;
                                    if (w < z && vneighbors.Contains(z))
                                    {
                                        l.Add(new KeyValuePair <int, int> (w, z));

                                        count++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #7
0
        public void pull()
        {
            IKVPairInstance <IVertex, IIterator <IDataTriangle> > input_values_instance = (IKVPairInstance <IVertex, IIterator <IDataTriangle> >)Input_values.Instance;
            IVertexInstance ikey = (IVertexInstance)input_values_instance.Key;
            IIteratorInstance <IDataTriangle> ivalues = (IIteratorInstance <IDataTriangle>)input_values_instance.Value;
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;

            object o; int w = ikey.Id;

            while (ivalues.fetch_next(out o))
            {
                int v = ((IDataTriangleInstance)o).V; int z = ((IDataTriangleInstance)o).W;
                IEnumerator <int> wneighbors = g.iteratorNeighborsOf(w);
                while (wneighbors.MoveNext())
                {
                    int zw = wneighbors.Current;
                    if (w < zw)
                    {
                        if (z == 0)
                        {
                            IKVPairInstance <IVertex, IDataTriangle> item = (IKVPairInstance <IVertex, IDataTriangle>)Output.createItem();
                            IVertexInstance       ok = (IVertexInstance)item.Key;
                            IDataTriangleInstance ov = (IDataTriangleInstance)item.Value;
                            ok.Id = v;
                            ov.V  = w;
                            ov.W  = zw;
                            output_value.put(item);
                        }
                        else
                        {
                            IList <KeyValuePair <int, int> > l;
                            if (!triangles.TryGetValue(w, out l))
                            {
                                l             = new List <KeyValuePair <int, int> > ();
                                triangles [w] = l;
                            }

                            if (z == zw)
                            {
                                l.Add(new KeyValuePair <int, int>(v, zw));

                                count++;
                            }
                        }
                    }
                }
            }
        }
Example #8
0
        public void gust0()
        {
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value_instance = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;

            ConcurrentDictionary <int, IList <KeyValuePair <int, int> > > buffer_tmp = new ConcurrentDictionary <int, IList <KeyValuePair <int, int> > >();

            IEnumerator <int> next = messages.Keys.GetEnumerator();

            while (next.MoveNext())
            {
                int w = next.Current;
                IList <KeyValuePair <int, int> > l;
                messages.TryRemove(w, out l);
                IEnumerator <int> wneighbors = g.iteratorNeighborsOf(w);
                while (wneighbors.MoveNext())
                {
                    int z = wneighbors.Current;
                    if (w < z)
                    {
                        foreach (KeyValuePair <int, int> kvw in l)
                        {
                            int v = kvw.Key;
                            if (isGhost(v))
                            {
                                IKVPairInstance <IVertex, IDataTriangle> item = (IKVPairInstance <IVertex, IDataTriangle>)Output.createItem();
                                IVertexInstance       ok = (IVertexInstance)item.Key;
                                IDataTriangleInstance ov = (IDataTriangleInstance)item.Value;
                                ok.Id = v;
                                ov.V  = z;
                                ov.W  = w;
                                output_value_instance.put(item);
                            }
                            else
                            {
                                IList <KeyValuePair <int, int> > lz;
                                if (!buffer_tmp.TryGetValue(v, out lz))
                                {
                                    lz            = new List <KeyValuePair <int, int> > ();
                                    buffer_tmp[v] = lz;
                                }
                                lz.Add(new KeyValuePair <int, int>(z, w));
                            }
                        }
                    }
                }
            }
            messages = buffer_tmp;
        }
Example #9
0
        public void pull()
        {
            IKVPairInstance <IVertex, IIterator <IDataTriangle> > input_values_instance = (IKVPairInstance <IVertex, IIterator <IDataTriangle> >)Input_values.Instance;
            IVertexInstance ikey = (IVertexInstance)input_values_instance.Key;
            IIteratorInstance <IDataTriangle> ivalues = (IIteratorInstance <IDataTriangle>)input_values_instance.Value;

            object o;

            while (ivalues.fetch_next(out o))
            {
                IList <KeyValuePair <int, int> > l;
                if (!messages.TryGetValue(ikey.Id, out l))
                {
                    l = new List <KeyValuePair <int, int> > ();
                    messages[ikey.Id] = l;
                }
                l.Add(new KeyValuePair <int, int>(((IDataTriangleInstance)o).V, ((IDataTriangleInstance)o).W));
            }
        }
Example #10
0
        public void startup_push()
        {
            IIteratorInstance <IKVPair <IVertex, IDataTriangle> > output_value_instance = (IIteratorInstance <IKVPair <IVertex, IDataTriangle> >)Output.Instance;
            int v, ordered, i, j;
            IEnumerator <int> V = g.vertexSet().GetEnumerator();

            while (V.MoveNext())
            {
                v = V.Current;
                if (!isGhost(v))
                {
                    IEnumerator <int> vneighbors = g.iteratorNeighborsOf(v);
                    while (vneighbors.MoveNext())
                    {
                        int bigger = vneighbors.Current;
                        if (v < bigger)                           //buscam-se os vérices maiores
                        {
                            if (isGhost(bigger))
                            {
                                IKVPairInstance <IVertex, IDataTriangle> item = (IKVPairInstance <IVertex, IDataTriangle>)Output.createItem();
                                IVertexInstance       ok = (IVertexInstance)item.Key;
                                IDataTriangleInstance ov = (IDataTriangleInstance)item.Value;
                                ok.Id = bigger;
                                ov.V  = v;
                                output_value_instance.put(item);
                            }
                            else
                            {
                                IList <KeyValuePair <int, int> > l;
                                if (!messages.TryGetValue(bigger, out l))
                                {
                                    l = new List <KeyValuePair <int, int> > ();
                                    messages[bigger] = l;
                                }
                                l.Add(new KeyValuePair <int, int>(v, 0));
                            }
                        }
                    }
                }
            }
        }