Translate C++ to D

Luca Lupo luca.lupo at hotmail.it
Fri Jan 11 10:23:35 PST 2008


So I have finish conversion but there are problems:

Exist the iterator in D and the functions name_list.push_back(element) or name_list.erase(iterator) ???



//Observer.d

import std.stdio;
import std.string;
import Subject

class Observer{
      ~this(){} //distructor for observer
      
       this(){} // costructor for observer
       
       Update(Subject* b){}
       }

class Subscriber{
      Update(Subject* b);
      }

class SubscriberG{
      this (string a){
           indirizzo_e_mail_G = a;
           }
      
      Update (Subject* b){
             writefln("Subscriber tipo G->", "Name blog: ", ((Blog *)b).GetName()); //maybe needed a cast
             ((Blog *)b).GetTitle();
             ((Blog *)b).GetLine();
             writefln("Autore Ultimo Post: ",((Blog *)b).GetAuthor()); //maybe needed a cast
             writefln("");
             writefln("");
             }
      }
      
class SubscriberS{
      this (string a, string b){
           indirizzo_e_mail_S = a;
           name_author = b;
           }

      Update (Subject* b){
             if (name_author == ((Blog *)b).GetAuthor()){
                writefln("Subscriber tipo S->", "Name blog: ", ((Blog *)b).GetName()); //maybe needed a cast
                ((Blog *)b).GetTitle();
                ((Blog *)b).GetText();
                writefln("Autore ultimo Post: ",((Blog *)b).GetAuthor()); //maybe needed a cast
                }
             writefln("");
             writefln("");
             }
      }





//Observer_D.h.

import std.string;


class Subject;

class Observer{
      public:
             ~this(); //distruttore
             void Update(Subject* the_change_subject) = 0;
      protected:
             this(); //costruttore
      };

class Subscriber : public Observer{
      private:
             string indirizzo_e_mail;
      public:
             void Update(Subject* );
      };

class SubscriberG : public Subscriber{
      private:
              string indirizzo_e_mail_G;
      public:
             this(string ); //costruttore
             void Update(Subject* );
      };

class SubscriberS : public Subscriber{
      private:
              string indirizzo_e_mail_S;
              string name_author;
      public:
             this(string ,string); //costruttore
             void Update(Subject* );
      };





//Post.d

import std.stdio;
import std.string;
import Subject;
import Post;

class Post{
      this (string title, string text, string author){
           Title=title;
           Text=text;
           Author=author;
           }
           
      print (){
            writefln("Title :", Title, "Text :", Text, "Author :", Author)endl;
            }

      print_Title (){
                  return Title;
                  }
                  
      print_Author (){
                   return Author;
                   }
      
      print_Line (){
                 writefln(Text.substr(0,10));
                 }

      print_Text (){
                 return Text;
                 }
      }




//Post_d.h

import std.string;


class Post{
      private:
             string Title;
             string Text;
             string Author;
      public:
             this(string ,char* ,string); //costruttore
             void print();
             string print_Title();
             void print_Line();
             string print_Author();
             string print_Text();
      };




//Subject.d

import std.stdio;
import std.string;
import Subject


class Subject{
      this(){}
      
      ~this(){}
      
      Attach (Observer* o){
             _observer.push_back(o);
             }
             
      Detach (Observer* o){
             list<Observer*>::iterator i;
             for (i=_observer.begin() ; i!=_observer.end() ; i++){
                 if (*i == o ){
                 _observer.erase(i);
                 break;
                 }
             }
      }
      
      Notify(){}
      }
      

class Blog{
      this (string a){
           Blog_name=a;
           Subject sub1();
           }
           
      Notify (){
             list<Observer*>::iterator i;
             for (i=_observer.begin() ; i!=_observer.end() ; i++){
                 (*i).Update(this);
                 }
             }
      
      NewPost (Post p){
              writefln("---------E' stato inserito un nuovo Post---------");
              l_post.push_back(p);
              Notify();
              }
              
      GetName (){
              return Blog_name;
              }
              
      GetTitle (){
               list<Post>::iterator i;
               for (i=l_post.begin() ; i!=l_post.end() ; i++);
               i--;
               writefln("Titolo ultimo post: ", i.print_Title());
               }
               
      GetText (){
              list<Post>::iterator i;
              for (i=l_post.begin() ; i!=l_post.end() ; i++);
              i--;
              writefln("Testo Intero :", i.print_Text());
              }
              
      GetAuthor (){
                list<Post>::iterator i;
                for (i=l_post.begin() ; i!=l_post.end() ; i++);
                i--;
                return i.print_Author();
                }
                
      GetLine (){
              list<Post>::iterator i;
              for (i=l_post.begin() ; i!=l_post.end() ; i++);
              i--;
              writefln("Primi 10 caratteri ultimo post: ");
              i.print_Line();
              }
      }




//Subject_d.h

import std.slist;
import Observer;
import Post;

class Subject{
       private:
       public:
               // Functions are virtual by default
               Slist!(Observer *) _observer; // is Observer*
               ~this(); //distruttore
               void Attach(Observer *); // is Observer*
               void Detach(Observer *); // is Observer*
               void Notify();  
       protected:
               this(); //costruttore
       }

class Blog : public Subject{
       private:
               string Blog_name;
               Slist!(Post) l_post;
       public:
               // If no overloading by derived classes, 
               // compiler will make non-virtual
              this(string ); //costruttore
              void Notify(); 
              void NewPost(Post); // is Post
              string GetName();
              void GetText();
              void GetTitle();  
              string GetAuthor();
              void GetLine();  
       };




More information about the Digitalmars-d mailing list