pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r2646 - branches/pingus_sdl/src


From: grumbel at BerliOS
Subject: [Pingus-CVS] r2646 - branches/pingus_sdl/src
Date: Sun, 14 Jan 2007 11:10:11 +0100

Author: grumbel
Date: 2007-01-14 11:10:10 +0100 (Sun, 14 Jan 2007)
New Revision: 2646

Modified:
   branches/pingus_sdl/src/file_reader.cxx
   branches/pingus_sdl/src/file_reader.hxx
   branches/pingus_sdl/src/file_reader_impl.hxx
   branches/pingus_sdl/src/pingus_level.cxx
   branches/pingus_sdl/src/pingus_level.hxx
   branches/pingus_sdl/src/pingus_main.cxx
   branches/pingus_sdl/src/sexpr_file_reader.cpp
Log:
- implemented some more FileReader functions

Modified: branches/pingus_sdl/src/file_reader.cxx
===================================================================
--- branches/pingus_sdl/src/file_reader.cxx     2007-01-14 06:25:22 UTC (rev 
2645)
+++ branches/pingus_sdl/src/file_reader.cxx     2007-01-14 10:10:10 UTC (rev 
2646)
@@ -78,7 +78,7 @@
 }
 
 bool
-FileReader::read_vector(const char* name, Vector& value) const
+FileReader::read_vector(const char* name, Vector3f& value) const
 {
   if (impl.get())
     return impl->read_vector(name, value);

Modified: branches/pingus_sdl/src/file_reader.hxx
===================================================================
--- branches/pingus_sdl/src/file_reader.hxx     2007-01-14 06:25:22 UTC (rev 
2645)
+++ branches/pingus_sdl/src/file_reader.hxx     2007-01-14 10:10:10 UTC (rev 
2646)
@@ -24,14 +24,13 @@
 #include <vector>
 #include "shared_ptr.hxx"
 
-class CL_Size;
-class CL_Sizef;
+class Size;
 class Color;
+class Vector3f;
 
 namespace Pingus {
 
 class ResDescriptor;
-class Vector;
 class FileReaderImpl;
 
 /** Interface to read name/value pairs out of some kind of file or
@@ -50,7 +49,7 @@
   bool read_float (const char* name, float&)         const;
   bool read_bool  (const char* name, bool&)          const;
   bool read_string(const char* name, std::string&)   const;
-  bool read_vector(const char* name, Vector&)        const;
+  bool read_vector(const char* name, Vector3f&)      const;
   bool read_color (const char* name, Color&)         const;
   ////  bool read_size  (const char* name, CL_Size&)       const;
   bool read_desc  (const char* name, ResDescriptor&) const;

Modified: branches/pingus_sdl/src/file_reader_impl.hxx
===================================================================
--- branches/pingus_sdl/src/file_reader_impl.hxx        2007-01-14 06:25:22 UTC 
(rev 2645)
+++ branches/pingus_sdl/src/file_reader_impl.hxx        2007-01-14 10:10:10 UTC 
(rev 2646)
@@ -23,14 +23,13 @@
 #include <vector>
 #include <string>
 
-class CL_Size;
-class CL_Sizef;
+class Size;
 class Color;
+class Vector3f;
 
 namespace Pingus {
 
 class FileReader;
-class Vector;
 class ResDescriptor;
 
 /** */
@@ -45,7 +44,7 @@
   virtual bool read_float (const char* name, float&)       const =0;
   virtual bool read_bool  (const char* name, bool&)        const =0;
   virtual bool read_string(const char* name, std::string&) const =0;
-  virtual bool read_vector(const char* name, Vector&)      const =0;
+  virtual bool read_vector(const char* name, Vector3f&)    const =0;
   virtual bool read_color (const char* name, Color&)   const =0;
   virtual bool read_desc  (const char* name, ResDescriptor&) const =0;
   ////  virtual bool read_size  (const char* name, CL_Size&)       const =0;

Modified: branches/pingus_sdl/src/pingus_level.cxx
===================================================================
--- branches/pingus_sdl/src/pingus_level.cxx    2007-01-14 06:25:22 UTC (rev 
2645)
+++ branches/pingus_sdl/src/pingus_level.cxx    2007-01-14 10:10:10 UTC (rev 
2646)
@@ -41,7 +41,7 @@
   return impl->description;
 }
 
-const CL_Size&
+const Size&
 PingusLevel::get_size() const
 {
   return impl->size;

Modified: branches/pingus_sdl/src/pingus_level.hxx
===================================================================
--- branches/pingus_sdl/src/pingus_level.hxx    2007-01-14 06:25:22 UTC (rev 
2645)
+++ branches/pingus_sdl/src/pingus_level.hxx    2007-01-14 10:10:10 UTC (rev 
2646)
@@ -46,7 +46,7 @@
   const std::string& get_description() const;
 
   /** Returns the width of the level */
-  const CL_Size&     get_size() const;
+  const Size&  get_size() const;
 
   /** Returns the number of Pingus, which are going to be released in
       this level. */

Modified: branches/pingus_sdl/src/pingus_main.cxx
===================================================================
--- branches/pingus_sdl/src/pingus_main.cxx     2007-01-14 06:25:22 UTC (rev 
2645)
+++ branches/pingus_sdl/src/pingus_main.cxx     2007-01-14 10:10:10 UTC (rev 
2646)
@@ -694,9 +694,11 @@
         SExprFileReader reader(sexpr);
     
         int t = 0; 
+        std::string str;
         reader.read_int("test", t);
+        reader.read_string("teststr", str);
 
-        std::cout << reader.get_name() << ": t == " << t << std::endl;
+        std::cout << reader.get_name() << ": t == " << t << " str: " << str << 
std::endl;
       }
     else
       {

Modified: branches/pingus_sdl/src/sexpr_file_reader.cpp
===================================================================
--- branches/pingus_sdl/src/sexpr_file_reader.cpp       2007-01-14 06:25:22 UTC 
(rev 2645)
+++ branches/pingus_sdl/src/sexpr_file_reader.cpp       2007-01-14 10:10:10 UTC 
(rev 2646)
@@ -24,6 +24,9 @@
 */
 
 #include <assert.h>
+#include "math/vector3f.hpp"
+#include "math/color.hpp"
+#include "math/size.hpp"
 #include "file_reader_impl.hxx"
 #include "sexpr_file_reader.hpp"
 
@@ -58,69 +61,136 @@
 
   bool read_int   (const char* name, int& v) const 
   {
-    lisp::Lisp* sub = get_subsection(name);
-    if (sub && sub->get_list_size() == 2)
+    lisp::Lisp* item = get_subsection_item(name);
+    if (item && item->get_type() == lisp::Lisp::TYPE_INT)
       {
-        if (sub->get_list_elem(1)->get_type() == lisp::Lisp::TYPE_INT)
-          {
-            v = sub->get_list_elem(1)->get_int();
-            return true;
-          }
+        v = item->get_int();
+        return true;
       }
     return false;
   }
 
-  bool read_float (const char* name, float&) const 
+  bool read_float (const char* name, float& v) const 
   {
+    lisp::Lisp* item = get_subsection_item(name);
+    if (item && item->get_type() == lisp::Lisp::TYPE_FLOAT)
+      {
+        v = item->get_float();
+        return true;
+      }
     return false;
   }
 
-  bool read_bool  (const char* name, bool&) const 
+  bool read_bool  (const char* name, bool& v) const 
   {
+    lisp::Lisp* item = get_subsection_item(name);
+    if (item && item->get_type() == lisp::Lisp::TYPE_BOOL)
+      {
+        v = item->get_bool();
+        return true;
+      }
     return false;
   }
 
-  bool read_string(const char* name, std::string&) const 
+  bool read_string(const char* name, std::string& v) const 
   {
+    lisp::Lisp* item = get_subsection_item(name);
+    if (item)
+      {
+        if (item->get_type() == lisp::Lisp::TYPE_STRING)
+          {
+            v = item->get_string();
+            return true;
+          }
+        else if (item->get_type() == lisp::Lisp::TYPE_SYMBOL)
+          {
+            v = item->get_symbol();
+            return true;
+          }
+      }
     return false;
   }
 
-  bool read_vector(const char* name, Vector&) const
+  bool read_vector(const char* name, Vector3f& v) const
   {
+    lisp::Lisp* sub = get_subsection_item(name);
+    if (sub && sub->get_list_size() == 4)
+      {
+        v = Vector3f(sub->get_list_elem(1)->get_float(),
+                     sub->get_list_elem(2)->get_float(),
+                     sub->get_list_elem(3)->get_float());
+        return true;
+      }    
     return false;
   }
 
-  bool read_color (const char* name, Color&) const
+  bool read_color (const char* name, Color& v) const
   {
+    lisp::Lisp* sub = get_subsection_item(name);
+    if (sub && sub->get_list_size() == 5)
+      {
+        v = Color(int(sub->get_list_elem(1)->get_float() * 255),
+                  int(sub->get_list_elem(2)->get_float() * 255),
+                  int(sub->get_list_elem(3)->get_float() * 255),
+                  int(sub->get_list_elem(4)->get_float() * 255));
+        return true;
+      }
     return false;
   }
 
-  bool read_desc  (const char* name, ResDescriptor&) const 
+  bool read_desc  (const char* name, ResDescriptor& v) const 
   {
     return false;
   }
 
-  bool read_size  (const char* name, CL_Size&) const 
+  bool read_size  (const char* name, Size& v) const 
   {
+    lisp::Lisp* sub = get_subsection_item(name);
+    if (sub && sub->get_list_size() == 3)
+      {
+        v = Size(int(sub->get_list_elem(1)->get_int()),
+                 int(sub->get_list_elem(2)->get_int()));
+        return true;
+      }
     return false;
   }
 
-  bool read_section(const char* name, FileReader&) const 
+  bool read_section(const char* name, FileReader& v) const 
   {
+    lisp::Lisp* cur = get_subsection(name);
+    if (cur)
+      {
+        v = SExprFileReader(cur);
+        return true;
+      }
     return false;
   }
 
   std::vector<FileReader> get_sections() const 
   {
-    return std::vector<FileReader>();
+    std::vector<FileReader> lst;
+    for(size_t i = 1; i < sexpr->get_list_size(); ++i)
+      { // iterate over subsections
+        lst.push_back(SExprFileReader(sexpr->get_list_elem(i)));
+      }
+    return lst;
   }
 
   std::vector<std::string> get_section_names() const 
   {
     return std::vector<std::string>();
   }
+private:
+  lisp::Lisp* get_subsection_item(const char* name) const
+  {
+    lisp::Lisp* sub = get_subsection(name);
+    if (sub && sub->get_list_size() == 2)
+      {
+        return sub->get_list_elem(1);
+      }
+    return 0;
+  }
 
-private:
   lisp::Lisp* get_subsection(const char* name) const
   {
     for(size_t i = 1; i < sexpr->get_list_size(); ++i)
@@ -130,8 +200,8 @@
           return sub;
       }
     return 0;
-  }
-  
+  } 
+
 };
 
 SExprFileReader::SExprFileReader(lisp::Lisp* lisp)





reply via email to

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