stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vi...@apache.org
Subject svn commit: r611308 - in /incubator/stdcxx/branches/4.2.x/examples: include/stocks.h tutorial/stocks.cpp
Date Fri, 11 Jan 2008 21:40:42 GMT
Author: vitek
Date: Fri Jan 11 13:40:41 2008
New Revision: 611308

URL: http://svn.apache.org/viewvc?rev=611308&view=rev
Log:

2008-01-11  Travis Vitek  <vitek@roguewave.com>

	Merged rev 611307 from trunk with implementation of STDCXX-577

	* examples/include/stocks.h: Removed StockXchange destructor
	implementation.
	* examples/tutorial/stocks.cpp: Add StockXchange destructor
	that properly deallocates memory.
	(main): Avoid allocation of facets when the locale that uses
	them is not available. Change Xchange to hold pair values to
	avoid having to deallocate those pairs explicitly. Cache the
	locale initially imbued on stream, then restore it to ensure
	that facets are deallocated.


Modified:
    incubator/stdcxx/branches/4.2.x/examples/include/stocks.h
    incubator/stdcxx/branches/4.2.x/examples/tutorial/stocks.cpp

Modified: incubator/stdcxx/branches/4.2.x/examples/include/stocks.h
URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.x/examples/include/stocks.h?rev=611308&r1=611307&r2=611308&view=diff
==============================================================================
--- incubator/stdcxx/branches/4.2.x/examples/include/stocks.h (original)
+++ incubator/stdcxx/branches/4.2.x/examples/include/stocks.h Fri Jan 11 13:40:41 2008
@@ -141,7 +141,7 @@
    typedef std::locale::facet facet;
      
    StockXchange(std::size_t refs=0): facet(refs){}
-   virtual ~StockXchange(){}
+   virtual ~StockXchange();
    
    static std::locale::id id;
    virtual bool put (std::ostream& os) const;

Modified: incubator/stdcxx/branches/4.2.x/examples/tutorial/stocks.cpp
URL: http://svn.apache.org/viewvc/incubator/stdcxx/branches/4.2.x/examples/tutorial/stocks.cpp?rev=611308&r1=611307&r2=611308&view=diff
==============================================================================
--- incubator/stdcxx/branches/4.2.x/examples/tutorial/stocks.cpp (original)
+++ incubator/stdcxx/branches/4.2.x/examples/tutorial/stocks.cpp Fri Jan 11 13:40:41 2008
@@ -39,6 +39,16 @@
 std::locale::id StockXchange::id;
 
 
+StockXchange::~StockXchange ()
+{
+    database::const_iterator begin = companyDatabase.begin ();
+    database::const_iterator end   = companyDatabase.end ();
+
+    while (begin < end)
+        delete *begin++;
+}
+
+
 void StockXchange::localTime (std::ostream& os) const
 {
     const char pat[] = "%c";
@@ -115,37 +125,24 @@
 int main ()
 {
     typedef std::pair<StockXchange*, std::locale> sl_pair;
-    typedef std::deque<sl_pair*, std::allocator<sl_pair*> > Xchange;
+    typedef std::deque<sl_pair, std::allocator<sl_pair> > Xchange;
     Xchange sXchange;
     
     std::ostream os (std::cout.rdbuf ());
-    
-    // Add some hypothetical companies that went public.
-    // ("Company name" , "initial stock price")
-    
-    NewYorkStockXchange *nse = new NewYorkStockXchange;
-    nse->add ("Hyper Software", 20.50);
-    nse->add ("Florida Fish", 15.10);
-    nse->add ("Inka Inc", 9.50);
-    nse->add ("Emory Chemicals", 11.00);
-    
-    TokyoStockXchange *tse = new TokyoStockXchange;
-    tse->add ("Akiro Electronics", 12.30);
-    
-    FrankFurtStockXchange *fse = new FrankFurtStockXchange;   
-    fse->add ("B\166rsen-Software", 9.75);
-    fse->add ("M\174nchner R\174ck", 19.75);
-    
-    ParisStockXchange *pse = new ParisStockXchange;   
-    pse->add ("Wines Inc.", 11.50);
-    pse->add ("Eiffel Co.", 11.50);
+    const std::locale loc (os.getloc ());
     
     const char *p = std::setlocale (LC_ALL, US_LOCALE);
     if (!p)
         std::cerr << "\nNot a valid locale: " << US_LOCALE << '\n';
     else {
+        NewYorkStockXchange *nse = new NewYorkStockXchange;
+        nse->add ("Hyper Software", 20.50);
+        nse->add ("Florida Fish", 15.10);
+        nse->add ("Inka Inc", 9.50);
+        nse->add ("Emory Chemicals", 11.00);
+   
         os.imbue (std::locale (std::locale (US_LOCALE), nse));
-        sXchange.push_front (new sl_pair (nse, os.getloc ()));
+        sXchange.push_front (sl_pair (nse, os.getloc ()));
         os << *nse;
     }
     
@@ -153,8 +150,12 @@
     if (!p)
         std::cerr<< "\nNot a valid locale: " << GERMAN_LOCALE << '\n';
     else {
+        FrankFurtStockXchange *fse = new FrankFurtStockXchange;   
+        fse->add ("B\166rsen-Software", 9.75);
+        fse->add ("M\174nchner R\174ck", 19.75);
+    
         os.imbue (std::locale (std::locale (GERMAN_LOCALE), fse));
-        sXchange.push_front (new sl_pair (fse, os.getloc ()));
+        sXchange.push_front (sl_pair (fse, os.getloc ()));
         os << *fse;
     }
     
@@ -162,8 +163,12 @@
     if (!p)
         std::cerr << "\nNot a valid locale: " << FRENCH_LOCALE << '\n';
     else {
+        ParisStockXchange *pse = new ParisStockXchange;   
+        pse->add ("Wines Inc.", 11.50);
+        pse->add ("Eiffel Co.", 11.50);
+    
         os.imbue (std::locale (std::locale (FRENCH_LOCALE), pse));
-        sXchange.push_front (new sl_pair (pse, os.getloc ()));
+        sXchange.push_front (sl_pair (pse, os.getloc ()));
         os << *pse;
     }
     
@@ -171,8 +176,11 @@
     if (!p)
         std::cerr << "\nNot a valid locale: " << JAPANESE_LOCALE << '\n';
     else {
+        TokyoStockXchange *tse = new TokyoStockXchange;
+        tse->add ("Akiro Electronics", 12.30);
+    
         os.imbue (std::locale (std::locale (JAPANESE_LOCALE), tse));
-        sXchange.push_front (new sl_pair (tse, os.getloc ()));
+        sXchange.push_front (sl_pair (tse, os.getloc ()));
         os << *tse;
     }
     
@@ -183,8 +191,8 @@
             Xchange::const_iterator it_begin = sXchange.begin ();
             Xchange::const_iterator it_end   = sXchange.end ();
             while (it_begin < it_end) {
-                os.imbue ((*it_begin)->second);
-                os << (*(*it_begin)->first);
+                os.imbue ((*it_begin).second);
+                os << (*(*it_begin).first);
                 it_begin++;
             }
         }
@@ -192,7 +200,9 @@
             break;
     }
 
-    std::cout << '\n';
+    os << '\n';
+
+    os.imbue (loc);
 
     return 0;
 }



Mime
View raw message