From 59f6f330c219b71e9abee07ee7587a303e65ed91 Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Mon, 24 Sep 2012 00:37:46 +0100
Subject: [PATCH] Defer SGEphemeris creation until ::init()

Trying to make subsystem *creation* cheap - major work such as IO should be deferred until init() where possible.
---
 src/Environment/ephemeris.cxx | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/Environment/ephemeris.cxx b/src/Environment/ephemeris.cxx
index 21ff38b4d..612501c74 100644
--- a/src/Environment/ephemeris.cxx
+++ b/src/Environment/ephemeris.cxx
@@ -28,14 +28,15 @@
 #include <Main/globals.hxx>
 #include <Main/fg_props.hxx>
 
+static void tieStar(const char* prop, Star* s, double (Star::*getter)() const)
+{
+  fgGetNode(prop, true)->tie(SGRawValueMethods<Star, double>(*s, getter, NULL));
+}
+
 Ephemeris::Ephemeris() :
   _impl(NULL),
   _latProp(NULL)
 {
-    SGPath ephem_data_path(globals->get_fg_root());
-    ephem_data_path.append("Astro");
-    _impl = new SGEphemeris(ephem_data_path.c_str());
-    globals->set_ephem(_impl);
 }
 
 Ephemeris::~Ephemeris()
@@ -45,6 +46,17 @@ Ephemeris::~Ephemeris()
 
 void Ephemeris::init()
 {
+  SGPath ephem_data_path(globals->get_fg_root());
+  ephem_data_path.append("Astro");
+  _impl = new SGEphemeris(ephem_data_path.c_str());
+  globals->set_ephem(_impl);
+
+  tieStar("/ephemeris/sun/xs", _impl->get_sun(), &Star::getxs);
+  tieStar("/ephemeris/sun/ys", _impl->get_sun(), &Star::getys);
+  tieStar("/ephemeris/sun/ze", _impl->get_sun(), &Star::getze);
+  tieStar("/ephemeris/sun/ye", _impl->get_sun(), &Star::getye);
+  tieStar("/ephemeris/sun/lat-deg", _impl->get_sun(), &Star::getLat);
+  
   _latProp = fgGetNode("/position/latitude-deg", true);
   update(0.0);
 }
@@ -54,19 +66,8 @@ void Ephemeris::postinit()
   
 }
 
-static void tieStar(const char* prop, Star* s, double (Star::*getter)() const)
-{
-  fgGetNode(prop, true)->tie(SGRawValueMethods<Star, double>(*s, getter, NULL));
-} 
-
 void Ephemeris::bind()
 {
-  tieStar("/ephemeris/sun/xs", _impl->get_sun(), &Star::getxs);
-  tieStar("/ephemeris/sun/ys", _impl->get_sun(), &Star::getys);
-  tieStar("/ephemeris/sun/ze", _impl->get_sun(), &Star::getze);
-  tieStar("/ephemeris/sun/ye", _impl->get_sun(), &Star::getye);
-  
-  tieStar("/ephemeris/sun/lat-deg", _impl->get_sun(), &Star::getLat);
 }
 
 void Ephemeris::unbind()