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()); } }
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(); }
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); }