gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/agg-plot/split-spec-parser.h
diff options
context:
space:
mode:
authorfrancesco-ST <francesco.abbate@st.com>2010年08月12日 11:51:29 +0200
committerfrancesco-ST <francesco.abbate@st.com>2010年08月12日 11:51:29 +0200
commitb55a4cf705a06ef2c9995da4d2784e8d5969ee3e (patch)
treecee3a5404dee2d8a74fb60c0d5daad1985f8b402 /agg-plot/split-spec-parser.h
parent9529186aacd0d02d6b609cec247ab6b4610fd342 (diff)
downloadgsl-shell-b55a4cf705a06ef2c9995da4d2784e8d5969ee3e.tar.gz
added object index to manage both plot and windows
Now both plot and windows gets an id which is used to manage userdata cross-references.
Diffstat (limited to 'agg-plot/split-spec-parser.h')
-rw-r--r--agg-plot/split-spec-parser.h 35
1 files changed, 21 insertions, 14 deletions
diff --git a/agg-plot/split-spec-parser.h b/agg-plot/split-spec-parser.h
index 1ccae7c6..dd2aee75 100644
--- a/agg-plot/split-spec-parser.h
+++ b/agg-plot/split-spec-parser.h
@@ -12,27 +12,36 @@ enum direction_e { along_x, along_y };
namespace split {
template <class base_type>
- class node {
- public:
+ struct node {
typedef pod_list<node*> list;
+ virtual void transform(matrix& m) = 0;
+
virtual list* tree() { return 0; };
virtual base_type* content() { return 0; };
virtual void content(const base_type& src) { };
- virtual void transform(matrix& m) = 0;
virtual matrix* get_matrix() { return 0; };
virtual ~node() {};
+
+ static void init(node* tree);
};
template <class base_type>
+ void node<base_type>::init(node<base_type>* tree)
+ {
+ matrix m;
+ tree->transform(m);
+ }
+
+ template <class base_type>
class node_leaf : public node<base_type> {
base_type m_content;
matrix m_matrix;
public:
- node_leaf(const base_type& src) : m_content(src), m_matrix() {};
+ node_leaf() : m_content(), m_matrix() {};
virtual base_type* content() { return &m_content; };
virtual void content(const base_type& src) { m_content = src; };
@@ -116,17 +125,17 @@ namespace split {
};
template <class base_type, class lexer>
- extern node<base_type>* parse (lexer& lex, const base_type& seed);
+ extern node<base_type>* parse (lexer& lex);
template <class base_type, class lexer>
- node<base_type>* subtree (lexer& lex, const base_type& seed, direction_e dir)
+ node<base_type>* subtree (lexer& lex, direction_e dir)
{
node_tree<base_type> * ls = new node_tree<base_type>(dir);
int c;
for (c = 0; ; c++)
{
- node<base_type>* child = parse<base_type, lexer>(lex, seed);
+ node<base_type>* child = parse<base_type, lexer>(lex);
if (! child)
break;
ls->add(child);
@@ -138,25 +147,23 @@ namespace split {
}
template <class base_type, class lexer>
- node<base_type>* parse (lexer& lex, const base_type& seed)
+ node<base_type>* parse (lexer& lex)
{
char t = lex.next();
switch (t)
{
case '.':
- return new node_leaf<base_type>(seed);
+ return new node_leaf<base_type>();
case 'h':
- return subtree<base_type, lexer>(lex, seed, along_x);
+ return subtree<base_type, lexer>(lex, along_x);
case 'v':
- return subtree<base_type, lexer>(lex, seed, along_y);
+ return subtree<base_type, lexer>(lex, along_y);
case '(':
{
- node<base_type> *nd = parse<base_type, lexer>(lex, seed);
-
+ node<base_type> *nd = parse<base_type, lexer>(lex);
if (! lex.checknext(')'))
return NULL;
-
return nd;
}
case ')':
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月16日 23:13:48 +0000

AltStyle によって変換されたページ (->オリジナル) /