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