]> git.llucax.com Git - software/bife/bife++.git/commitdiff
Cleaned up the code:
authorLeandro Lucarella <llucax@gmail.com>
Wed, 13 Aug 2003 06:50:44 +0000 (06:50 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 13 Aug 2003 06:50:44 +0000 (06:50 +0000)
- Better usage of namespaces.
- Added some new, class specific, types.
- Added (virtual) destructors.
- Added new constructor.
- Better constructor implementation (calling parent's constructor properly).
- Fixed a bug in HIT::getFileContent().
- Added (optional) debug info to constructors and destructors.

chit.cpp
chit.h
ghit.cpp
ghit.h
hash.h
hit.cpp
hit.h
main.cpp

index f456cdec2fded06097afe292370f9e7bb8b7b940..4b09a9df7b6a339d9f5e342c79571b0b75dfd75a 100644 (file)
--- a/chit.cpp
+++ b/chit.cpp
@@ -2,8 +2,23 @@
 
 #include "chit.h"
 
-CHIT::CHIT(string root, string postfix, string group) {
-    GHIT(root, postfix, group);
+#ifdef DEBUG
+#include <iostream>
+using std::cerr;
+using std::endl;
+#endif
+
+CHIT::CHIT(string root, string postfix, string group): GHIT(root, postfix, group) {
+#ifdef DEBUG
+    cerr << "In CHIT::CHIT(root = '" << root << "', postfix = '" << postfix
+        << "', group = '" << group << "');" << endl;
+#endif
+}
+
+CHIT::~CHIT(void) {
+#ifdef DEBUG
+    cerr << "In CHIT destructor." << endl;
+#endif
 }
 
 string CHIT::getFileContent(string filename) {
diff --git a/chit.h b/chit.h
index a2462885eab1ed172203310ae6189b63c7cfe132..22776f5cb5227c71d689e43a8587e4bcc4e106ab 100644 (file)
--- a/chit.h
+++ b/chit.h
@@ -1,13 +1,13 @@
 // vim: set expandtab tabstop=4 shiftwidth=4:
 
-#ifndef _BIFE_CHIT_H_
-#define _BIFE_CHIT_H_
+#ifndef BIFE_CHIT_H
+#define BIFE_CHIT_H
 
-#include <string>
-#include "hash.h"
 #include "ghit.h"
+#include "hash.h"
+#include <string>
 
-using namespace std;
+using std::string;
 
 /**
  * Cache enabled GHIT.
@@ -43,7 +43,12 @@ class CHIT: public GHIT {
          * @param postfix Postfix of the template files.
          * @param group   Starting group.
          */
-        CHIT(string = ".", string = ".tpl", string = "");
+        CHIT(string = string("."), string = string(".tpl"), string = string(""));
+
+        /**
+         * Destructor.
+         */
+        virtual ~CHIT(void);
 };
 
 #endif
index 05e17bf7983a26fad81241803a7f29b8393da6de..db0583321702c96a1a7537b8237363a9e550a937 100644 (file)
--- a/ghit.cpp
+++ b/ghit.cpp
@@ -2,16 +2,31 @@
 
 #include "ghit.h"
 
-GHIT::GHIT(string root, string postfix, string group) {
-    HIT(root, postfix);
+#ifdef DEBUG
+#include <iostream>
+using std::cerr;
+using std::endl;
+#endif
+
+GHIT::GHIT(string root, string postfix, string group): HIT(root, postfix) {
+#ifdef DEBUG
+    cerr << "In GHIT::GHIT(root = '" << root << "', postfix = '" << postfix
+        << "', group = '" << group << "');" << endl;
+#endif
     this->group.push(group);
 }
 
+GHIT::~GHIT(void) {
+#ifdef DEBUG
+    cerr << "In GHIT destructor." << endl;
+#endif
+}
+
 string GHIT::getFileName(string blockname) {
     return string(root + '/' + group.top() + '/' + blockname + postfix);
 }
 
-void GHIT::pushGroup(string group = "") {
+void GHIT::pushGroup(string group) {
     this->group.push(group);
 }
 
diff --git a/ghit.h b/ghit.h
index 42e25c3b3cd91048a748ba09f30d1476fcb8c833..32900a6bc96864a7c3d7bc4bcb0fa6afc69cce4b 100644 (file)
--- a/ghit.h
+++ b/ghit.h
@@ -1,13 +1,13 @@
 // vim: set expandtab tabstop=4 shiftwidth=4:
 
-#ifndef _BIFE_GHIT_H_
-#define _BIFE_GHIT_H_
+#ifndef BIFE_GHIT_H
+#define BIFE_GHIT_H
 
-#include <string>
-#include <stack>
 #include "hit.h"
+#include <stack>
+#include <string>
 
-using namespace std;
+using std::string;
 
 /**
  * Group enabled HIT.
@@ -18,10 +18,15 @@ using namespace std;
  * the root directory.
  */
 class GHIT: public HIT {
+    // Typedefs.
+    protected:
+        /// Group stack.
+        typedef std::stack<string> GroupStack;
+
     // Attributes.
     protected:
         /// Group stack.
-        stack<string> group;
+        GroupStack group;
 
     // Methods.
     protected:
@@ -41,7 +46,12 @@ class GHIT: public HIT {
          * @param postfix Postfix of the template files.
          * @param group   Starting group.
          */
-        GHIT(string = ".", string = ".tpl", string = "");
+        GHIT(string = string("."), string = string(".tpl"), string = string(""));
+
+        /**
+         * Destructor.
+         */
+        virtual ~GHIT(void);
 
         /**
          * Starts working with a new group of templates.
diff --git a/hash.h b/hash.h
index bf69ab2b7d96e1067b9f89e8f5d00815a58ed4bd..08f7adbb30bb0741dca5fc4966d704af8a5ec4be 100644 (file)
--- a/hash.h
+++ b/hash.h
@@ -1,14 +1,12 @@
 // vim: set expandtab tabstop=4 shiftwidth=4:
 
-#ifndef _BIFE_HASH_H_
-#define _BIFE_HASH_H_
+#ifndef BIFE_HASH_H
+#define BIFE_HASH_H
 
 #include <string>
 #include <map>
 
-using namespace std;
-
 /// String hash similar to high level languages (like perl, python or php).
-typedef map<string, string> Hash;
+typedef std::map<std::string, std::string> Hash;
 
 #endif
diff --git a/hit.cpp b/hit.cpp
index 590fbcf6dc1bcd017c0eca5decd410e70be0aaa5..a9bfd666d62bc571459883b78e5778e5c5f0bea8 100644 (file)
--- a/hit.cpp
+++ b/hit.cpp
@@ -1,10 +1,29 @@
 // vim: set expandtab tabstop=4 shiftwidth=4:
 
 #include "hit.h"
+#include <fstream>
+#include <sstream>
+
+using std::ifstream;
+using std::stringbuf;
 
 #ifdef DEBUG
 #include <iostream>
+using std::cerr;
+using std::endl;
+#endif
+
+HIT::HIT(string root, string postfix): root(root), postfix(postfix) {
+#ifdef DEBUG
+    cerr << "In HIT::HIT(root = '" << root << "', postfix = '" << postfix << "')" << endl;
+#endif
+}
+
+HIT::~HIT(void) {
+#ifdef DEBUG
+    cerr << "In HIT destructor." << endl;
 #endif
+}
 
 string HIT::getFileName(string blockname) {
     return string(root + '/' + blockname + postfix);
@@ -21,28 +40,27 @@ string HIT::getFileContent(string filename) {
         return buff.str();
     }
     while (in.get(buff)) {
-        in.ignore();
+        buff.sputc(in.get());
     }
     in.close();
     return buff.str();
 }
 
-HIT::HIT(string root, string postfix): root(root), postfix(postfix) {}
-
 string HIT::parse(string blockname, Hash& vars) {
+    int pos;
+    string key;
     string content = getFileContent(getFileName(blockname));
     for (Hash::iterator i = vars.begin(); i != vars.end(); i++) {
-        string key = "{" + i->first +  "}";
-        int pos = -1;
+        key = "{" + i->first +  "}";
         while ((pos = content.find(key)) != -1) {
-#ifdef DEBUG
-            cout << "Founded at pos " << pos << ", key '" << key << "' (len: "
+#ifdef DEBUG2
+            cerr << "Founded at pos " << pos << ", key '" << key << "' (len: "
                 << key.length() << "). Will be replaced with '" << i->second
                 << "'" << endl;
 #endif
             content.replace(pos, key.length(), i->second);
-#ifdef DEBUG
-            cout << "New content: " << content << endl << endl << endl;
+#ifdef DEBUG2
+            cerr << "New content: " << content << endl << endl << endl;
 #endif
         }
     }
diff --git a/hit.h b/hit.h
index b24ee814ec5f17549059678fbaead118a58f78d5..5086127872df297d1d9d22485eca6743348c1d05 100644 (file)
--- a/hit.h
+++ b/hit.h
@@ -1,14 +1,12 @@
 // vim: set expandtab tabstop=4 shiftwidth=4:
 
-#ifndef _BIFE_HIT_H_
-#define _BIFE_HIT_H_
+#ifndef BIFE_HIT_H
+#define BIFE_HIT_H
 
-#include <string>
-#include <fstream>
-#include <sstream>
 #include "hash.h"
+#include <string>
 
-using namespace std;
+using std::string;
 
 /**
  * Hooks vs IT Template Engine.
@@ -54,7 +52,12 @@ class HIT {
          * @param root    Root directory from where to get the templates.
          * @param postfix Postfix of the template files.
          */
-        HIT(string = ".", string = ".tpl");
+        HIT(string = string("."), string = string(".tpl"));
+
+        /**
+         * Destructor.
+         */
+        virtual ~HIT(void);
 
         /**
          * Parses a block replacing keys with values in the hash.
index 5a4351dbb283486829a0f0fbb40d320e36d34691..92fbb6a5e20fb1d7a170df118222dad498c23f4d 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -7,6 +7,8 @@
 #include "ghit.h"
 #include "chit.h"
 
+using namespace std;
+
 int main(void) {
     const string indent = "    ";
     Hash vars;
@@ -22,7 +24,7 @@ int main(void) {
     cout << "=============" << endl;
     vars["NOMBRE"] = "Pedro";
     vars["EDAD"]   = "26";
-    GHIT g;
+    GHIT g("./././");
     cout << "We are using the default group: '" << g.getGroup() << "'." << endl;
     cout << indent << g.parse("test", vars) << endl;
     g.pushGroup("tpldir");
@@ -35,7 +37,7 @@ int main(void) {
 
     cout << "CHIT example:" << endl;
     cout << "=============" << endl;
-    CHIT c;
+    CHIT c("././././././", ".tpl.html");
     const int n = 65;
     for (int i = n; i < (n+10); i++) {
         stringstream ssi, ssc;