From af8179dab78fe661ccf3e212caedcfa8d9d768ba Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Wed, 21 Jul 2021 01:20:25 +0000
Subject: [PATCH] Use parent gen class over implementation class

---
 ast.h |  112 +++++++++++++++++++++++++++----------------------------
 1 files changed, 55 insertions(+), 57 deletions(-)

diff --git a/ast.h b/ast.h
index ccc5e74..41ef05e 100644
--- a/ast.h
+++ b/ast.h
@@ -33,21 +33,19 @@
 class Word: public ast_node {};
 
 class MathInline: public Word {
-	std::string *expr;
+	std::string expr;
 public:
-	MathInline(std::string *e);
-	~MathInline();
-	std::string* get_expr();
+	MathInline(std::string e);
+	std::string get_expr();
 	void* visit(ast_visitor *v);
 };
 
 class Link: public Word {
-	std::string *link, *text;
+	std::string link, text;
 public:
-	Link(std::string *l, std::string *t);
-	~Link();
-	std::string* get_link();
-	std::string* get_text();
+	Link(std::string l, std::string t);
+	std::string get_link();
+	std::string get_text();
 	void* visit(ast_visitor *v);
 };
 
@@ -57,7 +55,7 @@
 	std::string t;
 public:
 	Text(std::string tt);
-	std::string* get_text();
+	std::string get_text();
 	void* visit(ast_visitor *v);
 };
 
@@ -89,38 +87,6 @@
 };
 class Line: public ast_node {};
 
-class Heading: public Line {
-	int level;
-	std::vector<Word*> words;
-public:
-	Heading(int l, std::vector<Word*> w);
-	~Heading();
-	int get_level();
-	std::vector<Word*>* get_words();
-	void* visit(ast_visitor *v);
-};
-
-class List: public Line {
-	int level, number;
-	std::vector<Word*> words;
-public:
-	List(int l, int n, std::vector<Word*> w);
-	~List();
-	int get_level();
-	int get_number();
-	std::vector<Word*>* get_words();
-	void* visit(ast_visitor *v);
-};
-
-class MathDisp: public Line {
-	std::string *expr;
-public:
-	MathDisp(std::string *e);
-	~MathDisp();
-	std::string* get_expr();
-	void* visit(ast_visitor *v);
-};
-
 class Line_Word: public Line {
 	std::vector<Word*> words;
 public:
@@ -130,26 +96,58 @@
 	void* visit(ast_visitor *v);
 };
 
+class Heading: public Line {
+	int level;
+	Line_Word *words;
+public:
+	Heading(int l, Line_Word *w);
+	~Heading();
+	int get_level();
+	Line_Word* get_words();
+	void* visit(ast_visitor *v);
+};
+
+class List: public Line {
+	int level, number;
+	Line_Word *words;
+public:
+	List(int l, int n, Line_Word *w);
+	~List();
+	int get_level();
+	int get_number();
+	Line_Word* get_words();
+	void* visit(ast_visitor *v);
+};
+
+class MathDisp: public Line {
+	std::string expr;
+public:
+	MathDisp(std::string e);
+	std::string get_expr();
+	void* visit(ast_visitor *v);
+};
+
+
 class Block: public ast_node {};
 
 class Block_Table: public Block {
-	std::vector<std::vector<Line_Word*>> table;
+	std::vector<std::vector<Line_Word*>*> table;
 public:
 	~Block_Table();
-	std::vector<std::vector<Line_Word*>> get_table();
-	int add_row(std::vector<Line_Word*> row);
+	std::vector<std::vector<Line_Word*>*>* get_table();
+	int add_row(std::vector<Line_Word*>* row);
+	std::vector<Line_Word*>* get_row(std::vector<Line_Word*>::size_type i);
 	void* visit(ast_visitor *v);
 };
 
 class Block_Code: public Block {
-	std::string *c;
-	std::string *lang;
+	std::string c;
+	std::string lang;
 public:
-	Block_Code(std::string *l);
-	~Block_Code();
-	int add_line(std::string *add);
-	std::string* get_lang();
-	std::string* get_code();
+	Block_Code(std::string l);
+	int add_line(std::string add);
+	std::string get_lang();
+	std::string get_code();
 	void* visit(ast_visitor *v);
 };
 
@@ -163,14 +161,14 @@
 };
 
 class Document: public ast_node {
-	std::string *title, *author, *date;
+	std::string title, author, date;
 	std::vector<Block*> blocks;
 public:
-	Document(std::string *t, std::string *a, std::string *d);
+	Document(std::string t, std::string a, std::string d);
 	~Document();
-	std::string* get_title();
-	std::string* get_author();
-	std::string* get_date();
+	std::string get_title();
+	std::string get_author();
+	std::string get_date();
 	std::vector<Block*>* get_blocks();
 	int add_block(Block *b);
 	void* visit(ast_visitor *v);

--
Gitblit v1.10.0