示例#1
0
        public ParkAndRideNodeDao()
        {
            Framework.DomainModels.Persisters.IPersisterReader <IParkAndRideNode> reader =
                Global
                .ContainerDaySim.GetInstance <IPersistenceFactory <IParkAndRideNode> >()
                .Reader;

            IParkAndRideNodeCreator creator =
                Global
                .ContainerDaySim
                .GetInstance <IWrapperFactory <IParkAndRideNodeCreator> >()
                .Creator;

            Dictionary <int, HashSet <int> > zoneIdKeys   = new Dictionary <int, HashSet <int> >();
            Dictionary <int, HashSet <int> > parcelIdKeys = new Dictionary <int, HashSet <int> >();

            Dictionary <int, Framework.ShadowPricing.IParkAndRideShadowPriceNode> parkAndRideShadowPrices = ParkAndRideShadowPriceReader.ReadParkAndRideShadowPrices();

            foreach (IParkAndRideNode parkAndRideNode in reader)
            {
                IParkAndRideNodeWrapper node = creator.CreateWrapper(parkAndRideNode);
                int id = node.Id;

                _nodes.Add(id, node);

                int zoneId = node.ZoneId;

                if (!zoneIdKeys.TryGetValue(zoneId, out HashSet <int> zoneIdKey))
                {
                    zoneIdKey = new HashSet <int>();

                    zoneIdKeys.Add(zoneId, zoneIdKey);
                }

                zoneIdKey.Add(id);

                int parcelId = node.NearestParcelId;

                if (!parcelIdKeys.TryGetValue(parcelId, out HashSet <int> parcelIdKey))
                {
                    parcelIdKey = new HashSet <int>();

                    parcelIdKeys.Add(parcelId, parcelIdKey);
                }

                node.SetParkAndRideShadowPricing(parkAndRideShadowPrices);

                parcelIdKey.Add(id);
            }

            foreach (KeyValuePair <int, HashSet <int> > entry in zoneIdKeys)
            {
                _zoneIdKeys.Add(entry.Key, entry.Value.ToArray());
            }

            foreach (KeyValuePair <int, HashSet <int> > entry in parcelIdKeys)
            {
                _parcelIdKeys.Add(entry.Key, entry.Value.ToArray());
            }
        }
示例#2
0
        public void Write(IParkAndRideNodeWrapper node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            _writer.Write(string.Format("{0}{1}", node.Id, Global.Configuration.ParkAndRideShadowPriceDelimiter));
            for (int i = 1; i <= Global.Settings.Times.MinutesInADay; i++)
            {
                _writer.Write(string.Format("{0:0.000000}{1}", node.ShadowPriceDifference[i - 1], Global.Configuration.ParkAndRideShadowPriceDelimiter));
            }
            for (int i = 1; i <= Global.Settings.Times.MinutesInADay; i++)
            {
                _writer.Write(string.Format("{0:0.000000}{1}", node.ShadowPrice[i - 1], Global.Configuration.ParkAndRideShadowPriceDelimiter));
            }
            for (int i = 1; i <= Global.Settings.Times.MinutesInADay; i++)
            {
                _writer.Write(string.Format("{0:0.000000}{1}", node.ExogenousLoad[i - 1], Global.Configuration.ParkAndRideShadowPriceDelimiter));
            }
            for (int i = 1; i <= Global.Settings.Times.MinutesInADay - 1; i++)
            {
                _writer.Write(string.Format("{0:0.000000}{1}", node.ParkAndRideLoad[i - 1], Global.Configuration.ParkAndRideShadowPriceDelimiter));
            }
            _writer.Write(string.Format("{0:0.000000}", node.ParkAndRideLoad[Global.Settings.Times.MinutesInADay - 1]));
            _writer.WriteLine();
        }
示例#3
0
        public IParkAndRideNodeWrapper[] GetAllByZoneId(int zoneId)
        {
            int[] key;

            if (!_zoneIdKeys.TryGetValue(zoneId, out key))
            {
                return(new IParkAndRideNodeWrapper[0]);
            }

            var nodes = new IParkAndRideNodeWrapper[key.Length];

            for (var i = 0; i < key.Length; i++)
            {
                nodes[i] = _nodes[key[i]];
            }

            return(nodes);
        }