Пример #1
0
        /// <summary>
        ///  Ensures a minimum number of self loops exist in the network.
        /// </summary>
        public static void EnsureMinSelfLoopCount(IBasicAdjList network, int n)
        {
            int ctr = 0;
            foreach (IEdge edge in network.Edges)
            {
                if (edge.IsSelfLoop)
                    ctr++;
            }

            // if that many self loops exist, return
            if (ctr>=n)
                return;

            // else create the needed number of self loops
            int needed = n;
            if (n<ctr)
                needed = ctr-n;

            ctr=0;  // re-use ctr variable
            do
            {
                foreach (INode node in network.Nodes)
                {
                    network.CreateEdge(node, node);
                    ctr++;
                    if (ctr>=needed)
                        break;
                }
            } while (needed>ctr);
        }
Пример #2
0
 public VnaBasicAdjListWriterFixture()
 {
     _testNetA = GetTestNetA();
     _testDir = Properties.Resources.TestDumpPath;
     if (!Directory.Exists(_testDir))
         Directory.CreateDirectory(_testDir);
     _bacisAdjListWriter = new VNABasicAdjListWriter();
 }
Пример #3
0
        /// <summary>
        /// Removes the <see cref="INode"/> at the specified <paramref name="index"/>  
        /// </summary>
        /// <param name="network">The INetworkAdjList from which the node is to be removed.</param>
        /// <param name="index">The index of the node to be removed.</param>
        /// <returns>The number of nodes removed.</returns>
        public int RemoveNode(IBasicAdjList network, int index)
        {
            int removed = 0;
            if (network is BasicAdjList)
            {
                BasicAdjList adj = network as BasicAdjList;
                INode node = adj.Nodes[index];
                adj.RemoveNode(node);
                removed++;
            }

            return removed;
        }
Пример #4
0
        internal BasicEdge(IBasicAdjList network, INode sourceNode, INode destNode)
        {
            // You Must Set Index Manually!!!
            if (!(sourceNode is IBasicNode))
                throw new ArgumentException(string.Format("SourceNode must be of type {0}.", typeof(IBasicNode)), "sourceNode");
            if (!(destNode is IBasicNode))
                throw new ArgumentException(string.Format("DestinatinNode must be of type {0}.", typeof(IBasicNode)), "destNode");

            Network = network;
            if (Network != sourceNode.Network)
                throw new ArgumentException("The parent network must be the same as the sourceNode.ParentNetwork.", "sourceNode");
            if (Network != destNode.Network)
                throw new ArgumentException("The parent network must be the same as the destNode.ParentNetwork.", "destNode");

            SourceNode = sourceNode;
            DestinationNode = destNode;
        }
Пример #5
0
        /// <summary>
        /// Removes the <see cref="INode"/> at the specified <paramref name="index"/>.
        /// </summary>
        /// <param name="network">The INetworkAdjList from which the node is to be removed.</param>
        /// <param name="indices">The list of indices of nodes to be removed.</param>
        /// <returns>The number of nodes removed.</returns>
        public int RemoveNodes(IBasicAdjList network, List<int> indices)
        {
            int removed = 0;
            if (network is BasicAdjList)
            {
                BasicAdjList adj = network as BasicAdjList;
                // sort before removing, and remove highest first
                indices.Sort();
                INode node;
                for (int i = (indices.Count-1); i >=0; i--)
                {
                    node = adj.Nodes[indices[i]];
                    adj.RemoveNode(node);
                    removed++;
                }
            }

            return removed;
        }
Пример #6
0
        /// <summary>
        /// Reads in <paramref name="dataFields"/>, which are the fields parsed from a data line in the *Node properties section
        /// of the file.  Each field is assigned to a cell in the node attributes table of <paramref name="network"/>
        /// according to which attribute each field is mapped to.  Field values are converted depending on what the corresponding node
        /// data attribute column data type indicates.
        /// </summary>
        /// <param name="dataFields">An array of strings read in from the *Node data section</param>
        /// <param name="network">An IBasicAdjList network with nodes initialize, and node data attribs</param>
        /// <param name="index">The index of the node to which the data will be assigned as node data attributes</param>
        /// <param name="headerFields">The list of *Node properties HeaderField mapping the dataField index to its data attrib column</param>
        internal void ReadNodePropertyFields(string[] dataFields, IBasicAdjList network, int index, IList<HeaderField> headerFields)
        {
            // Assume dataFields are Trimmed!!!
            // state must be VnaReadingState.NodeProperties
            if (State != VnaFileSection.NodeProperties)
                throw new InvalidOperationException(string.Format("{0} is not the correct reading state at this point.", State));

            INode node = network.Nodes[index];

            int nodeAttribIndex = -1;
            int sourceFieldIndex = -1;
            for (int i = 0; i < headerFields.Count; i++)
            {
                sourceFieldIndex = headerFields[i].SourceFieldIndex;

                nodeAttribIndex = headerFields[i].AttribColumnIndex;
                // map the field value to the node at the attribute column with index nodeAttribIndex
                if (network.NodeDataAttributeTypes[nodeAttribIndex] == typeof(string))
                    network.NodeData.SetValue<string>(node, nodeAttribIndex, dataFields[sourceFieldIndex]);
                else if (network.NodeDataAttributeTypes[nodeAttribIndex] == typeof(int))
                    network.NodeData.SetValue<int>(node, nodeAttribIndex, Convert.ToInt32(dataFields[sourceFieldIndex]));
                else if (network.NodeDataAttributeTypes[nodeAttribIndex] == typeof(double))
                    network.NodeData.SetValue<double>(node, nodeAttribIndex, Convert.ToDouble(dataFields[sourceFieldIndex]));
                else if (network.NodeDataAttributeTypes[nodeAttribIndex] == typeof(float))
                    network.NodeData.SetValue<float>(node, nodeAttribIndex, Convert.ToSingle(dataFields[sourceFieldIndex]));
                else if (network.NodeDataAttributeTypes[nodeAttribIndex] == typeof(bool))
                    network.NodeData.SetValue<bool>(node, nodeAttribIndex, ConvertToBool(dataFields[sourceFieldIndex]));
                else
                {
                    // we only convert fields read in from a VNA file to strings, ints, floats, or doubles so
                    // so we can do this
                    throw new InvalidOperationException("Conversion not supported");
                }
            }
        }
Пример #7
0
 internal BasicEdge(IBasicAdjList network, INode sourceNode, INode destNode, int index)
     : this(network, sourceNode, destNode)
 {
     _Index = index;
 }
Пример #8
0
        /// <summary>
        /// Reads in <paramref name="dataFields"/>, which are the fields parsed from a data line in the '*Edge data' section
        /// of the file, fields 0, 1 are assumed to be the from and to node keys. This method creates an edge with those nodes.         
        /// Each field is assigned to a cell in the edge attributes table of <paramref name="network"/>
        /// according to which attribute each field is mapped to.  Field values are converted depending on what the corresponding node
        /// data attribute column data type indicates.
        /// </summary>
        /// <param name="dataFields">An array of strings read in from the *Edge data section</param>
        /// <param name="network">An IBasicAdjList network with nodes initialize</param>
        /// <param name="headerFields">The list of *Edge data HeaderField classes mapping the dataField index to its data attrib column</param>
        internal void ReadEdgeDataFields(string[] dataFields, IBasicAdjList network, IList<HeaderField> headerFields)
        {
            // Assume line is Trimmed!!!
            // state must be VnaReadingState.EdgeData
            if (State != VnaFileSection.EdgeData)
                throw new InvalidOperationException(string.Format("{0} is not the correct reading state at this point.", State));

            // 3) create the edge in the network
            // 4) Add an entry to EdgeKeyToEdgeIndexMap
            var fromNode = NodeKeyToNodeIndexMap[dataFields[0]];
            var toNode = NodeKeyToNodeIndexMap[dataFields[1]];
            IEdge edge = network.CreateEdge(fromNode, toNode);

            // do not read in datafields 0 and 1 - those are now 'with the nodes'
            int edgeAttribIndex = -1;
            int sourceFieldIndex = -1;
            for (int i = 2; i < headerFields.Count; i++)
            {
                sourceFieldIndex = headerFields[i].SourceFieldIndex;
                edgeAttribIndex = headerFields[i].AttribColumnIndex;
                // map the field value to the edge at the attribute column with index nodeAttribIndex
                if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(string))
                    network.EdgeData.SetValue<string>(edge, edgeAttribIndex, dataFields[sourceFieldIndex]);
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(int))
                    network.EdgeData.SetValue<int>(edge, edgeAttribIndex, Convert.ToInt32(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(double))
                    network.EdgeData.SetValue<double>(edge, edgeAttribIndex, Convert.ToDouble(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(float))
                    network.EdgeData.SetValue<float>(edge, edgeAttribIndex, Convert.ToSingle(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(bool))
                    network.EdgeData.SetValue<bool>(edge, edgeAttribIndex, ConvertToBool(dataFields[sourceFieldIndex]));
                else
                {
                    // we only convert fields read in from a VNA file to strings, ints, floats, or doubles so
                    // so we can do this
                    throw new InvalidOperationException("Conversion not supported");
                }
            }
        }
Пример #9
0
        /// <summary>
        /// Reads in <paramref name="dataFields"/>, which are the fields parsed from a data line in the *Edge properties section
        /// of the file.  Each field is assigned to a cell in the edge attributes table of <paramref name="network"/>
        /// according to which attribute each field is mapped to.  Field values are converted depending on what the corresponding node
        /// data attribute column data type indicates.
        /// </summary>
        /// <param name="dataFields">An array of strings read in from the *Node data section</param>
        /// <param name="network">An IBasicAdjList network with nodes and edges initialized</param>
        /// <param name="index">The index of the edge to which the data will be assigned as node data attributes</param>
        /// <param name="headerFields">The list of *Edge properties HeaderField mapping the dataField index to its data attrib column</param>
        internal void ReadEdgePropertyFields(string[] dataFields, IBasicAdjList network, int index, IList<HeaderField> headerFields)
        {
            // Assume line is Trimmed!!!
            // state must be VnaReadingState.EdgeProperties
            if (State != VnaFileSection.EdgeProperties)
                throw new InvalidOperationException(string.Format("{0} is not the correct reading state at this point.", State));

            // assumes the edges populated in network are populated in the order in which each line is read from
            // the *Edge data section.  And, the assumption is made the order of data lines in the *Edge properties
            // section is the same.

            IEdge edge = network.Edges[index];

            int edgeAttribIndex = -1;
            int sourceFieldIndex = -1;
            for (int i = 0; i < headerFields.Count; i++)
            {
                sourceFieldIndex = headerFields[i].SourceFieldIndex;

                edgeAttribIndex = headerFields[i].AttribColumnIndex;
                // map the field value to the edge at the attribute column with index edgeAttribIndex
                if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(string))
                    network.EdgeData.SetValue<string>(edge, edgeAttribIndex, dataFields[sourceFieldIndex]);
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(int))
                    network.EdgeData.SetValue<int>(edge, edgeAttribIndex, Convert.ToInt32(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(double))
                    network.EdgeData.SetValue<double>(edge, edgeAttribIndex, Convert.ToDouble(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(float))
                    network.EdgeData.SetValue<float>(edge, edgeAttribIndex, Convert.ToSingle(dataFields[sourceFieldIndex]));
                else if (network.EdgeDataAttributeTypes[edgeAttribIndex] == typeof(bool))
                    network.EdgeData.SetValue<bool>(edge, edgeAttribIndex, ConvertToBool(dataFields[sourceFieldIndex]));
                else
                {
                    // we only convert fields read in from a VNA file to strings, ints, floats, or doubles so
                    // so we can do this
                    throw new InvalidOperationException("Conversion not supported");
                }
            }
        }
Пример #10
0
        internal void WriteNodePropertySection(TextWriter writer, IBasicAdjList network, IDictionary<int, string> nodePropertyHeaders)
        {
            WriteNodeSectionHeader(writer, "*Node properties", nodePropertyHeaders);

            IDataAttributes<INode> nodeData = null;
            if (ExportNodeAttributes)
                nodeData = network.NodeData;

            bool exportAttribs = ExportNodeAttributes;
            if (exportAttribs)
                exportAttribs = !DisablePropertyExport;

            foreach (INode node in network.Nodes)
            {
                WriteNodeLine(writer, node, nodeData, nodePropertyHeaders, exportAttribs);
            }
        }
Пример #11
0
        public static void GarunteeEdgeCount(IBasicAdjList network, int desiredEdgeCount)
        {
            if (network.EdgeCount != desiredEdgeCount)
            {
                var rand = new Random();
                int indexA = -1;
                int indexB = -1;
                while (network.EdgeCount != desiredEdgeCount)
                {
                    indexA = rand.Next(network.NodeCount);
                    indexB = rand.Next(network.NodeCount);

                    network.CreateEdge(network.Nodes[indexA], network.Nodes[indexB]);
                }
            }
        }
Пример #12
0
 internal void WriteNodes(TextWriter writer, IBasicAdjList network)
 {
     writer.WriteLine(FormatVerticesHeader(network));
     if (ExportNodeAttributes)
     {
         var nodeData = network.NodeData;
         var dataType = nodeData.DataTypes[NodeIdentifierAttributeIndex];
         if (BlueSpider.Base.Utilities.TypeTools.IsIntegral(dataType))
         {
             foreach (INode node in network.Nodes)
             {
                 writer.WriteLine(FormatNodeWithIntegralAttrib(node, nodeData[node, NodeIdentifierAttributeIndex]));
             }
         }
         else if (BlueSpider.Base.Utilities.TypeTools.IsFloatingPoint(dataType))
         {
             foreach (INode node in network.Nodes)
             {
                 // float implicitly cast to double
                 writer.WriteLine(FormatNodeWithRealNumberAttrib(node, nodeData.GetValue<double>(node, NodeIdentifierAttributeIndex)));
             }
         }
         else if (dataType == typeof(decimal))
         {
             foreach (INode node in network.Nodes)
             {
                 // float implicitly cast to double
                 writer.WriteLine(FormatNodeWithRealNumberAttrib(node, nodeData.GetValue<decimal>(node, NodeIdentifierAttributeIndex)));
             }
         }
         else if (dataType == typeof(string))
         {
             foreach (INode node in network.Nodes)
             {
                 writer.WriteLine(FormatNodeWithStringAttrib(node, nodeData.GetValue<string>(node, NodeIdentifierAttributeIndex)));
             }
         }
         else if (dataType == typeof(DateTime))
         {
             foreach (INode node in network.Nodes)
             {
                 writer.WriteLine(FormatNodeWithObjectAttrib(node, nodeData[node, NodeIdentifierAttributeIndex], true));
             }
         }
         else
         {
             foreach (INode node in network.Nodes)
             {
                 writer.WriteLine(FormatNodeWithObjectAttrib(node, nodeData[node, NodeIdentifierAttributeIndex], false));
             }
         }
     }
     else
     {
         foreach (INode node in network.Nodes)
         {
             writer.WriteLine(FormatNode(node));
         }
     }
 }
Пример #13
0
        internal void WriteEdgePropertySection(TextWriter writer, IBasicAdjList network, IDictionary<int, string> edgePropertyHeaders)
        {
            WriteEdgeSectionHeader(writer, "*Tie properties", edgePropertyHeaders);

            IDataAttributes<IEdge> edgeData = null;
            if (ExportEdgeAttributes)
                edgeData = network.EdgeData;

            bool exportAttribs = ExportEdgeAttributes;
            if (exportAttribs)
                exportAttribs = !DisablePropertyExport;

            foreach (IEdge edge in network.Edges)
            {
                WriteEdgePropertySectionLine(writer, edge, edgeData, edgePropertyHeaders, exportAttribs);
            }
        }
Пример #14
0
        internal void GenerateSparseGraph(IBasicAdjList network)
        {
            int n = NodeCount;

            int m = Math.Min(MaxAllowableEdges, EdgeCount);

            INode[] V = new INode[n];

            for (int i = 0; i < n; i++)
            {
                V[i] = network.CreateNode();
            }

            int count = m;
            while (count > 0)
            {
                int vi = _rand.Next(n);
                INode v = V[vi];
                INode w = V[_rand.Next(n)];
                if (v.IsEdge(w) || (v == w && (!AllowSelfLoops || !AllowCycles)))
                {
                    continue;
                }
                network.CreateEdge(v, w);
                count--;
            }

            if (!AllowCycles)
            {
                List<IEdge> edgesToReverse = new List<IEdge>();

                foreach (IEdge edge in network.Edges)
                {
                    if (edge.SourceNode.Index > edge.DestinationNode.Index)
                    {
                        edgesToReverse.Add(edge);
                    }
                }
                for (int k = 0; k < edgesToReverse.Count; k++)
                {
                    network.ReverseEdge(edgesToReverse[k]);
                    edgesToReverse[k] = null;
                }
            }
        }
Пример #15
0
        internal void WriteEdges(TextWriter writer, IBasicAdjList network)
        {
            if (network.IsDirected)
                writer.WriteLine(FormatArcsHeader(network));
            else
                writer.WriteLine(FormatEdgesHeader(network));

            if (ExportEdgeAttributes)
            {
                var edgeData = network.EdgeData;
                var dataType = edgeData.DataTypes[EdgeIdentifierAttributeIndex];
                if (BlueSpider.Base.Utilities.TypeTools.IsIntegral(dataType))
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        writer.WriteLine(FormatEdgeWithIntegralAttrib(edge, edgeData[edge, EdgeIdentifierAttributeIndex]));
                    }
                }
                else if (BlueSpider.Base.Utilities.TypeTools.IsFloatingPoint(dataType))
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        // float implicitly cast to double
                        writer.WriteLine(FormatEdgeWithRealNumberAttrib(edge, edgeData.GetValue<double>(edge, EdgeIdentifierAttributeIndex)));
                    }
                }
                else if (dataType == typeof(decimal))
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        // float implicitly cast to double
                        writer.WriteLine(FormatEdgeWithRealNumberAttrib(edge, edgeData.GetValue<decimal>(edge, EdgeIdentifierAttributeIndex)));
                    }
                }
                else if (dataType == typeof(string))
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        writer.WriteLine(FormatEdgeWithStringAttrib(edge, edgeData.GetValue<string>(edge, EdgeIdentifierAttributeIndex)));
                    }
                }
                else if (dataType == typeof(DateTime))
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        writer.WriteLine(FormatEdgeWithObjectAttrib(edge, edgeData[edge, EdgeIdentifierAttributeIndex], true));
                    }
                }
                else
                {
                    foreach (IEdge edge in network.Edges)
                    {
                        writer.WriteLine(FormatEdgeWithObjectAttrib(edge, edgeData[edge, EdgeIdentifierAttributeIndex], false));
                    }
                }
            }
            else
            {
                foreach (IEdge edge in network.Edges)
                {
                    writer.WriteLine(FormatEdge(edge));
                }
            }
        }
Пример #16
0
        internal void GenerateMultipleGraph(IBasicAdjList network)
        {
            int n = NodeCount;
            int m = EdgeCount;

            int[] deg = new int[n];
            INode[] V = new INode[n];
            for (int i = 0; i < n; i++)
                V[i] = network.CreateNode();

            for (int i = 0; i < m; i++)
                deg[_rand.Next(n)]++;

            for (int i = 0; i < n; i++)
            {
                INode v = V[i];
                int d = deg[i];
                while (d > 0)
                {
                    int j = _rand.Next(n);
                    if (j == i && (!AllowCycles || !AllowSelfLoops))
                        continue;
                    network.CreateEdge(v, V[j]);
                    d--;
                }
            }
            if (!AllowCycles)
            {
                List<IEdge> edgesToReverse = new List<IEdge>();

                foreach (IEdge edge in network.Edges)
                {
                    if (edge.SourceNode.Index > edge.DestinationNode.Index)
                    {
                        edgesToReverse.Add(edge);
                    }
                }

                for (int k = 0; k < edgesToReverse.Count; k++)
                {
                    network.ReverseEdge(edgesToReverse[k]);
                    edgesToReverse[k] = null;
                }
            }
        }
Пример #17
0
        internal void GenerateDenseGraph(IBasicAdjList network)
        {
            for (int i = 0; i < NodeCount; i++)
            {
                network.CreateNode();
            }
            if (EdgeCount < MaxAllowableEdges)
                EdgeCount = MaxAllowableEdges;

            IList<Point> nodePairs = GetNodePairs(EdgeCount);

            foreach (Point p in nodePairs)
            {
                network.CreateEdge(network.Nodes[p.X], network.Nodes[p.Y]);
            }
        }
Пример #18
0
 public DummyBasicNode(IBasicAdjList network)
 {
 }
Пример #19
0
        public void SetNodeData(IBasicAdjList network)
        {
            var dataTypes = new Type[panel1.Controls.Count];
            for (int i = 0; i < panel1.Controls.Count; i++)
            {
                dataTypes[i] = ((MappedDataTypeCtrl)panel1.Controls[i]).DataType;
            }

            if(dataTypes.Length>0)
            {
                var builder = new DataAttributesBuilder();
                builder.RandMaxIntValue = network.NodeCount;
                builder.AddColumns((INodeAttributes)network, dataTypes);
            }
        }
Пример #20
0
 internal virtual void WriteEdges(IBasicAdjList network, XmlWriter writer)
 {
     int ctr = 0;
     foreach (IEdge edge in network.Edges)
     {
         WriteEdge(edge, ctr++, network.EdgeData, writer);
     }
 }
Пример #21
0
        internal void WriteEdgeDataSection(TextWriter writer, IBasicAdjList network, IDictionary<int, string> edgeDataHeaders)
        {
            WriteEdgeSectionHeader(writer, "*Tie data", edgeDataHeaders);

            IDataAttributes<IEdge> edgeData = null;
            if (ExportEdgeAttributes)
                edgeData = network.EdgeData;

            foreach (IEdge edge in network.Edges)
            {
                WriteEdgeDataSectionLine(writer, edge, edgeData, edgeDataHeaders, ExportEdgeAttributes);
            }
        }
Пример #22
0
        /*
        internal void WriteKey(string keyId, INodeIntMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.node, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, INodeDoubleMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.node, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, INodeBoolMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.node, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, INodeStringMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.node, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, IEdgeIntMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.edge, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, IEdgeDoubleMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.edge, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, IEdgeBoolMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.edge, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        internal void WriteKey(string keyId, IEdgeStringMap map, KeyWriter keyWriter, XmlWriter writer)
        {
            keyWriter.Write(keyId, Domain.edge, map.Name, LayerDataTypeConverter.ToType(map.DataType), map.DefaultValue, writer);
        }
        */
        internal virtual void WriteNetwork(IBasicAdjList network, XmlWriter writer)
        {
            writer.WriteStartElement("graph");

            writer.WriteStartAttribute("id");
            writer.WriteValue(XmlConvert.ToString(network.Id));
            writer.WriteEndAttribute();

            writer.WriteStartAttribute("edgedefault");
            if (network.IsDirected)
                writer.WriteValue("directed");
            else
                writer.WriteValue("undirected");
            writer.WriteEndAttribute();

            if (!string.IsNullOrEmpty(network.Name))
            {
                WriteGraphDataElement(_KeyId_ForNetworkName, network.Name, writer);
            }

            WriteNodes(network, writer);
            WriteEdges(network, writer);

            writer.WriteEndElement();
        }
Пример #23
0
        internal void WriteNodeDataSection(TextWriter writer, IBasicAdjList network, IDictionary<int, string> nodeDataHeaders)
        {
            WriteNodeSectionHeader(writer, "*Node data", nodeDataHeaders);

            IDataAttributes<INode> nodeData = null;
            if (ExportNodeAttributes)
                nodeData = network.NodeData;

            foreach (INode node in network.Nodes)
            {
                WriteNodeLine(writer, node, nodeData, nodeDataHeaders, ExportNodeAttributes);
            }
        }
Пример #24
0
 public DummyBasicEdge(IBasicAdjList network, INode sourceNode, INode destNode, int index)
 {
 }
Пример #25
0
        internal virtual void Write(IBasicAdjList network, XmlWriter writer)
        {
            writer.WriteStartElement("graphml", "http://graphml.graphdrawing.org/xmlns");
            writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
            writer.WriteAttributeString("xsi", "schemaLocation", null, "http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd");

            WriteKeys(network, writer);
            WriteNetwork(network, writer);

            writer.WriteEndElement();
        }
Пример #26
0
 public DummyBasicNode(IBasicAdjList network, int index)
 {
 }
Пример #27
0
        internal virtual void WriteKeys(IBasicAdjList network, XmlWriter writer)
        {
            KeyWriter kw = new KeyWriter();

            if (!string.IsNullOrEmpty(network.Name))
            {
                WriteNetworkNameKey(_KeyId_ForNetworkName, BlueSpider.GraphML.XMLConstants._KeyId_ForNetworkName, kw, writer);
            }

            string nodeKeyFormat = "nd{0}";
            string key = null;
            string colName = null;
            Type colType = null;
            object defaultVal = null;
            for (int i = 0; i < network.NodeDataAttributeCount; i++)
            {
                key = string.Format(nodeKeyFormat, i);
                colName = network.NodeData.ColumnNames[i];
                colType = network.NodeData.DataTypes[i];
                defaultVal = network.NodeData.ColumnDefaultValues[i];

                WriteKey(key, colName, colType, defaultVal, kw, writer);

                NodeDataKeys.Add(key);
            }

            string edgeKeyFormat = "ed{0}";
            for (int i = 0; i < network.EdgeDataAttributeCount; i++)
            {
                key = string.Format(edgeKeyFormat, i);

                colName = network.EdgeData.ColumnNames[i];
                colType = network.EdgeData.DataTypes[i];
                defaultVal = network.EdgeData.ColumnDefaultValues[i];

                WriteKey(key, colName, colType, defaultVal, kw, writer);

                EdgeDataKeys.Add(key);
            }
        }
Пример #28
0
        internal void DoSecondPass(StreamReader reader, Microsoft.VisualBasic.FileIO.TextFieldParser parser, IBasicAdjList network)
        {
            // now, the network had been created based on the headers of each section, the list of
            // header fields has been populated for each section, nodes have been created.
            // so populate the node data, create the edges, and populate edge data

            // 1) read line
            // 2) if line is a '*' line
            //      read line and set state, skip next line
            //  3) read items based on state
            int index = 0;
            string line = null;
            string[] fields = null;
            try
            {
                while (!parser.EndOfData)
                {
                    if (parser.PeekChars(1) == "*")
                    {
                        line = parser.ReadLine();
                        State = ReadStarLine(line);
                        // skip the header line
                        parser.ReadLine();
                        // reset the index at each * section
                        index = 0;
                        continue;
                    }

                    // if here, then it is not a header line or star line
                    fields = Clean(parser.ReadFields());
                    switch (State)
                    {
                        case VnaFileSection.NodeData:
                            ReadNodeDataFields(fields, network, index++, NodeDataHeaders);
                            break;
                        case VnaFileSection.NodeProperties:
                            ReadNodePropertyFields(fields, network, index++, NodePropertyHeaders);
                            break;
                        case VnaFileSection.EdgeData:
                            ReadEdgeDataFields(fields, network, EdgeDataHeaders);
                            break;
                        case VnaFileSection.EdgeProperties:
                            ReadEdgePropertyFields(fields, network, index++, EdgePropertyHeaders);
                            break;
                        default:
                            throw new InvalidOperationException(string.Format("{0} is an invalid state", State));
                    }
                }
            }
            catch (FormatException ex)
            {
                var sb = new StringBuilder();
                sb.AppendFormat("A format error occured while reading the line {0}.{1}", parser.LineNumber, Environment.NewLine);
                sb.Append(ex.Message);
                ErrorMessages.Add(sb.ToString());
            }
            catch(NullReferenceException ex)
            {
                var sb = new StringBuilder();
                sb.AppendFormat("A null value occured while reading the line {0}.{1}", parser.LineNumber, Environment.NewLine);
                sb.Append(ex.Message);
                ErrorMessages.Add(sb.ToString());
            }
            catch (Exception ex)
            {
                var sb = new StringBuilder();
                sb.AppendFormat("An error occurred while reading the line {0}.{1}", parser.LineNumber, Environment.NewLine);
                sb.Append(ex.Message);
                ErrorMessages.Add(sb.ToString());
            }
        }
Пример #29
0
 internal virtual void WriteNodes(IBasicAdjList network, XmlWriter writer)
 {
     foreach (INode node in network.Nodes)
     {
         WriteNode(node, network.NodeData, writer);
     }
 }
Пример #30
0
 internal BasicNode(IBasicAdjList network, int index)
     : this(network)
 {
     _Index = index;
 }