pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3594 - trunk/pingus/src


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3594 - trunk/pingus/src
Date: Mon, 30 Jun 2008 18:37:54 +0200

Author: grumbel
Date: 2008-06-30 18:37:49 +0200 (Mon, 30 Jun 2008)
New Revision: 3594

Modified:
   trunk/pingus/src/file_reader.cpp
   trunk/pingus/src/file_reader.hpp
   trunk/pingus/src/pingus_demo.cpp
   trunk/pingus/src/pingus_demo.hpp
   trunk/pingus/src/server_event.cpp
   trunk/pingus/src/sexpr_file_reader.cpp
   trunk/pingus/src/sexpr_file_reader.hpp
Log:
Changed PingusDemo to use FileReader

Modified: trunk/pingus/src/file_reader.cpp
===================================================================
--- trunk/pingus/src/file_reader.cpp    2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/file_reader.cpp    2008-06-30 16:37:49 UTC (rev 3594)
@@ -201,15 +201,24 @@
 FileReader
 FileReader::parse(const Pathname& pathname)
 {
+  return FileReader::parse(pathname.get_sys_path());
+}
+
+std::vector<FileReader>
+FileReader::parse_many(const Pathname& pathname)
+{
   boost::shared_ptr<lisp::Lisp> sexpr = 
lisp::Parser::parse(pathname.get_sys_path());
   if (sexpr)
     {
-      return SExprFileReader(sexpr->get_list_elem(0));
+      std::vector<FileReader> sections;
+      for(size_t i = 0; i < sexpr->get_list_size(); ++i)
+        sections.push_back(SExprFileReader(sexpr->get_list_elem(i)));
+      return sections;
     }
   else
     {
-      return FileReader();
-    }  
+      return std::vector<FileReader>();
+    }
 }
 
 /* EOF */

Modified: trunk/pingus/src/file_reader.hpp
===================================================================
--- trunk/pingus/src/file_reader.hpp    2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/file_reader.hpp    2008-06-30 16:37:49 UTC (rev 3594)
@@ -77,6 +77,7 @@
 
   static FileReader parse(const std::string& filename);
   static FileReader parse(const Pathname& pathname);
+  static std::vector<FileReader> parse_many(const Pathname& pathname);
 private:
   boost::shared_ptr<FileReaderImpl> impl;
 };

Modified: trunk/pingus/src/pingus_demo.cpp
===================================================================
--- trunk/pingus/src/pingus_demo.cpp    2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/pingus_demo.cpp    2008-06-30 16:37:49 UTC (rev 3594)
@@ -20,37 +20,34 @@
 #include <stdexcept>
 #include <fstream>
 #include "pathname.hpp"
+#include "file_reader.hpp"
 #include "server_event.hpp"
+#include "pingus_error.hpp"
 #include "pingu_enums.hpp"
 #include "pingus_demo.hpp"
 
 PingusDemo::PingusDemo(const Pathname& pathname)
 {
-  std::ifstream in(pathname.get_sys_path().c_str());
-  std::string line;
-  
-  while(std::getline(in, line))
-    {
-      char action[256];
-      int  time;
-      int  id;
+  std::vector<FileReader> lines = FileReader::parse_many(pathname);
 
-      if (sscanf(line.c_str(), "(pingu-action (time %d) (id %d) (action 
\"%s\"))", &time, &id, action) == 3)
+  if (!lines.empty())
+    {
+      PingusError::raise("'" + pathname.str() + "', demo file is empty");
+    }
+  else
+    {
+      if (lines.front().get_name() == "level")
         {
-          ServerEvent::make_pingu_action_event(time, id, 
Actions::action_from_string(action));
+          if (!lines.front().read_string("name", levelname))
+            {
+              PingusError::raise("(level (name ...)) entry missing in demo 
file '" + pathname.str() + "'");
+            }
         }
-      else if (sscanf(line.c_str(), "(armageddon (time %d))", &time) == 1)
+            
+      for(std::vector<FileReader>::iterator i = lines.begin()+1; i != 
lines.end(); ++i)
         {
-          ServerEvent::make_armageddon_event(time);
+          events.push_back(ServerEvent(*i));
         }
-      else if (sscanf(line.c_str(), "(finish (time %d))", &time) == 1)
-        {
-          ServerEvent::make_finish_event(time);
-        }
-      else
-        {
-          throw std::runtime_error("Couldn't open " + pathname.str());
-        }
     }
 }
 

Modified: trunk/pingus/src/pingus_demo.hpp
===================================================================
--- trunk/pingus/src/pingus_demo.hpp    2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/pingus_demo.hpp    2008-06-30 16:37:49 UTC (rev 3594)
@@ -26,6 +26,9 @@
 class PingusDemo
 {
 private:
+  std::string levelname;
+  std::vector<ServerEvent> events;
+
 public:
   PingusDemo(const Pathname& pathname);
 

Modified: trunk/pingus/src/server_event.cpp
===================================================================
--- trunk/pingus/src/server_event.cpp   2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/server_event.cpp   2008-06-30 16:37:49 UTC (rev 3594)
@@ -40,6 +40,11 @@
       type = ARMAGEDDON_EVENT;
       reader.read_int("time", time_stamp);
     }
+  else if (reader.get_name() == "finish")
+    {
+      type = FINISH_EVENT;
+      reader.read_int("time", time_stamp);
+    }
   else if (reader.get_name() == "pingu-action")
     {
       type = PINGU_ACTION_EVENT;

Modified: trunk/pingus/src/sexpr_file_reader.cpp
===================================================================
--- trunk/pingus/src/sexpr_file_reader.cpp      2008-06-30 04:21:02 UTC (rev 
3593)
+++ trunk/pingus/src/sexpr_file_reader.cpp      2008-06-30 16:37:49 UTC (rev 
3594)
@@ -26,7 +26,7 @@
 #include "math/vector2i.hpp"
 #include "file_reader_impl.hpp"
 #include "sexpr_file_reader.hpp"
-
+
 class SExprFileReaderImpl: public FileReaderImpl
 {
 public:
@@ -253,5 +253,5 @@
   : FileReader(boost::shared_ptr<FileReaderImpl>(new 
SExprFileReaderImpl(lisp)))
 {
 }
-
+
 /* EOF */

Modified: trunk/pingus/src/sexpr_file_reader.hpp
===================================================================
--- trunk/pingus/src/sexpr_file_reader.hpp      2008-06-30 04:21:02 UTC (rev 
3593)
+++ trunk/pingus/src/sexpr_file_reader.hpp      2008-06-30 16:37:49 UTC (rev 
3594)
@@ -22,7 +22,7 @@
 
 #include "file_reader.hpp"
 #include "lisp/lisp.hpp"
-
+
 /** */
 class SExprFileReader : public FileReader
 {
@@ -30,7 +30,7 @@
 public:
   SExprFileReader(boost::shared_ptr<lisp::Lisp> lisp);
 };
-
+
 #endif
 
 /* EOF */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]