private void CacheSchedules()
        {
            // Only cache if we haven't done so already, unless we specifically want it to cache every time.
            if (m_CacheOnEverySolve || !m_caches.ContainsKey(m_workspace_path_name))
            {
                // Instantiate new cache object, which we will fill
                Cache m_cache = new Cache();

                if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "CacheSchedules because we don't already have a cache object for this network, or m_CacheOnEverySolve == true");
                try
                {
                    // For Server and 64bit GP, we don't want to display a dialog.
                    //   Check for 64bit and act accordingly.
                    //   Eventually, when desktop is 64bit, this will need to be updated.
                    // you can check the IntPtr size to find out if you are 32 or 64bit
                    //  8 = 64bit, 4 = 32bit;
                    int bits = IntPtr.Size * 8;
                    if (bits != 64)
                    {
                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "32bit. Opening cache progress form");
                        frmProgress = new ProgressForm(m_workspace_path_name);
                        frmProgress.ShowDialog();

                        if (frmProgress.CachingComplete)
                        {
                            m_cache.m_trips = frmProgress.Trips;
                            m_cache.m_eids = frmProgress.eids;
                            m_cache.m_calendars = frmProgress.Calendars;
                            m_cache.m_calExceptions = frmProgress.Cal_Exceptions;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_cache.m_trips.Count + " m_calendars: " + m_cache.m_calendars.Count + " m_calExceptions: " + m_cache.m_calExceptions.Count + " m_eids: " + m_cache.m_eids.Count);
                        }
                        else
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + frmProgress.CachingMessage;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                            throw new Exception(error_message);
                        }
                    }
                    else
                    {
                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "64bit. Opening cache progress form");
                        bool caching_completed = false;
                        string caching_message = "";
                        int total_row_count = 0;
                        int one_percent = 1;
                        string current_table_name = "";
                        TransitScheduleCacher.CacheSchedules(ref caching_completed, m_workspace_path_name,
                            ref total_row_count, null, ref one_percent, ref caching_message,
                            ref current_table_name, null, null,
                            ref m_cache.m_calExceptions, ref m_cache.m_calendars, ref m_cache.m_trips, ref m_cache.m_eids, ref m_cache.m_linefeatures);

                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_cache.m_trips.Count + " m_calendars: " + m_cache.m_calendars.Count + " m_calExceptions: " + m_cache.m_calExceptions.Count + " m_eids: " + m_cache.m_eids.Count);

                        if (!caching_completed)
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + caching_message;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                            throw new Exception(error_message);
                        }
                    }

                    // Add the current cache to a dictionary of caches we can choose from at solve time.
                    if (m_caches.ContainsKey(m_workspace_path_name)) { m_caches[m_workspace_path_name] = m_cache; }
                    else { m_caches.Add(m_workspace_path_name, m_cache); }

                }
                catch (Exception e)
                {
                    string error_message = "Transit schedule caching failure for " + DisplayName + ". Error message: " + e.Message;
                    if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                    throw new Exception(error_message, e);
                }
            }
        }
        private void CacheSchedules()
        {
            // if our schedules haven't been cached yet, attempt it now.
            if (m_CacheOnEverySolve || m_trips.Count == 0)
            {
                if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "CacheSchedules because m_trips.Count == 0 or m_CacheOnEverySolve == true");
                try
                {
                    // For Server and 64bit GP, we don't want to display a dialog. 
                    //   Check for 64bit and act accordingly.
                    //   Eventually, when desktop is 64bit, this will need to be updated.
                    // you can check the IntPtr size to find out if you are 32 or 64bit
                    //  8 = 64bit, 4 = 32bit;
                    int bits = IntPtr.Size * 8;
                    if (bits != 64)
                    {
                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "32bit. Opening cache progress form");
                        frmProgress = new ProgressForm(m_workspace_path_name);
                        frmProgress.ShowDialog();

                        if (frmProgress.CachingComplete)
                        {
                            m_trips = frmProgress.Trips;
                            m_eids = frmProgress.eids;
                            m_calendars = frmProgress.Calendars;
                            m_calExceptions = frmProgress.Cal_Exceptions;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_trips.Count + " m_calendars: " + m_calendars.Count + " m_calExceptions: " + m_calExceptions.Count + " m_eids: " + m_eids.Count);
                        }
                        else
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + frmProgress.CachingMessage;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                            throw new Exception(error_message);
                        }
                    }
                    else
                    {
                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "64bit. Opening cache progress form");
                        bool caching_completed = false;
                        string caching_message = "";
                        int total_row_count = 0;
                        int one_percent = 1;
                        string current_table_name = "";
                        TransitScheduleCacher.CacheSchedules(ref caching_completed, m_workspace_path_name,
                            ref total_row_count, null, ref one_percent, ref caching_message,
                            ref current_table_name, null, null,
                            ref m_calExceptions, ref m_calendars, ref m_trips, ref m_eids, ref m_linefeatures);

                        if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_trips.Count + " m_calendars: " + m_calendars.Count + " m_calExceptions: " + m_calExceptions.Count + " m_eids: " + m_eids.Count);

                        if (!caching_completed)
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + caching_message;
                            if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                            throw new Exception(error_message);
                        }
                    }
                }
                catch (Exception e)
                {
                    string error_message = "Transit schedule caching failure for " + DisplayName + ". Error message: " + e.Message;
                    if (m_VerboseLogging) WriteToOutputFile(m_LogFile, error_message);
                    throw new Exception(error_message, e);
                }
            }
        }
        private void CacheSchedules()
        {
            // Only cache if we haven't done so already, unless we specifically want it to cache every time.
            if (m_CacheOnEverySolve || !m_caches.ContainsKey(m_workspace_path_name))
            {
                // Instantiate new cache object, which we will fill
                Cache m_cache = new Cache();

                if (m_VerboseLogging)
                {
                    WriteToOutputFile(m_LogFile, "CacheSchedules because we don't already have a cache object for this network, or m_CacheOnEverySolve == true");
                }
                try
                {
                    // For Server and 64bit GP, we don't want to display a dialog.
                    //   Check for 64bit and act accordingly.
                    //   Eventually, when desktop is 64bit, this will need to be updated.
                    // you can check the IntPtr size to find out if you are 32 or 64bit
                    //  8 = 64bit, 4 = 32bit;
                    int bits = IntPtr.Size * 8;
                    if (bits != 64)
                    {
                        if (m_VerboseLogging)
                        {
                            WriteToOutputFile(m_LogFile, "32bit. Opening cache progress form");
                        }
                        frmProgress = new ProgressForm(m_workspace_path_name);
                        frmProgress.ShowDialog();

                        if (frmProgress.CachingComplete)
                        {
                            m_cache.m_trips         = frmProgress.Trips;
                            m_cache.m_eids          = frmProgress.eids;
                            m_cache.m_calendars     = frmProgress.Calendars;
                            m_cache.m_calExceptions = frmProgress.Cal_Exceptions;
                            if (m_VerboseLogging)
                            {
                                WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_cache.m_trips.Count + " m_calendars: " + m_cache.m_calendars.Count + " m_calExceptions: " + m_cache.m_calExceptions.Count + " m_eids: " + m_cache.m_eids.Count);
                            }
                        }
                        else
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + frmProgress.CachingMessage;
                            if (m_VerboseLogging)
                            {
                                WriteToOutputFile(m_LogFile, error_message);
                            }
                            throw new Exception(error_message);
                        }
                    }
                    else
                    {
                        if (m_VerboseLogging)
                        {
                            WriteToOutputFile(m_LogFile, "64bit. Opening cache progress form");
                        }
                        bool   caching_completed  = false;
                        string caching_message    = "";
                        int    total_row_count    = 0;
                        int    one_percent        = 1;
                        string current_table_name = "";
                        TransitScheduleCacher.CacheSchedules(ref caching_completed, m_workspace_path_name,
                                                             ref total_row_count, null, ref one_percent, ref caching_message,
                                                             ref current_table_name, null, null,
                                                             ref m_cache.m_calExceptions, ref m_cache.m_calendars, ref m_cache.m_trips, ref m_cache.m_eids, ref m_cache.m_linefeatures);

                        if (m_VerboseLogging)
                        {
                            WriteToOutputFile(m_LogFile, "Cache complete. m_trips: " + m_cache.m_trips.Count + " m_calendars: " + m_cache.m_calendars.Count + " m_calExceptions: " + m_cache.m_calExceptions.Count + " m_eids: " + m_cache.m_eids.Count);
                        }

                        if (!caching_completed)
                        {
                            string error_message = "Unable to cache transit schedules." + Environment.NewLine + "Details: " + caching_message;
                            if (m_VerboseLogging)
                            {
                                WriteToOutputFile(m_LogFile, error_message);
                            }
                            throw new Exception(error_message);
                        }
                    }

                    // Add the current cache to a dictionary of caches we can choose from at solve time.
                    if (m_caches.ContainsKey(m_workspace_path_name))
                    {
                        m_caches[m_workspace_path_name] = m_cache;
                    }
                    else
                    {
                        m_caches.Add(m_workspace_path_name, m_cache);
                    }
                }
                catch (Exception e)
                {
                    string error_message = "Transit schedule caching failure for " + DisplayName + ". Error message: " + e.Message;
                    if (m_VerboseLogging)
                    {
                        WriteToOutputFile(m_LogFile, error_message);
                    }
                    throw new Exception(error_message, e);
                }
            }
        }