From 86cb382c91fa965ad84d97c8c8e21957e695a1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 19 Feb 2019 12:08:03 +0100 Subject: Further changes. --- Makefile | 2 +- linked_list.cpp | 59 --------------------------------------------------------- linked_list.h | 47 +++++++++++++++++++++++++++++++++++++++++++-- parse.cpp | 15 ++++++--------- vcal.h | 2 +- 5 files changed, 53 insertions(+), 72 deletions(-) delete mode 100644 linked_list.cpp diff --git a/Makefile b/Makefile index e9c3140b..e5a0ae1a 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CC := g++ OBJDIR = obj -CFLAGS = -std=gnu++11 -Wall -Wextra -Wno-reorder \ +CFLAGS = -std=gnu++11 -pedantic -Wall -Wextra -Wno-reorder \ -ggdb -fPIC # \ # $(shell guile-config compile) LDFLAGS = -fPIC # $(shell guile-config link) diff --git a/linked_list.cpp b/linked_list.cpp deleted file mode 100644 index ed37eb23..00000000 --- a/linked_list.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "linked_list.h" - -template -llink::~llink () { - this.unlink(); -} - -template -void llink::unlink () { - if (this->before != nullptr) this->before->after = this->after; - if (this->after != nullptr) this->after->before = this->before; -} - -template -T& llist::peek() { - if (this->empty()) return nullptr; - - return FIRST(this)->value; -} - -template -T& llist::pop() { - if (this->empty()) return nullptr; - - llink* frst = FIRST(this); - frst.unlinke(); - - T& retval = frst->value; - --this->length; - delete frst; - - return retval; -} - -template -void llist::operator+= (llist& other) { - - /* Link end of dest onto start of new__. */ - LAST(this)->after = FIRST(other); - FIRST(other)->before = LAST(this); - - /* Free the two now not needed end links. */ - delete other->head; - delete other->tail; - - /* Update dest with new__ tail ptr. */ - this->tail = other->tail; - - this->length += other->length; -} - -// template -// std::ostream& std::operator<<(std::ostream&, llist) { -// o << '('; -// for (T t : list) { -// o << t; -// } -// o << ')'; -// } diff --git a/linked_list.h b/linked_list.h index 75096a93..1d95de80 100644 --- a/linked_list.h +++ b/linked_list.h @@ -10,7 +10,7 @@ struct llink { llink () { }; llink (T* val) : value(val) { } - ~llink (); + ~llink () { this->unlink(); } void unlink (); }; @@ -76,7 +76,7 @@ void llist::push(T* val) { template void llist::reset () { - llink *link = this->first, *next; + llink *link = this->head, *next; while (link != this->tail) { next = link->after; @@ -86,6 +86,49 @@ void llist::reset () { this->__cur = this->head; } +template +void llink::unlink () { + if (this->before != nullptr) this->before->after = this->after; + if (this->after != nullptr) this->after->before = this->before; +} + +template +T& llist::peek() { + if (this->empty()) return nullptr; + + return FIRST(this)->value; +} + +template +T& llist::pop() { + if (this->empty()) return nullptr; + + llink* frst = FIRST(this); + frst.unlinke(); + + T& retval = frst->value; + --this->length; + delete frst; + + return retval; +} + +template +void llist::operator+= (llist& other) { + + /* Link end of dest onto start of new__. */ + LAST(this)->after = FIRST(other); + FIRST(other)->before = LAST(this); + + /* Free the two now not needed end links. */ + delete other->head; + delete other->tail; + + /* Update dest with new__ tail ptr. */ + this->tail = other->tail; + + this->length += other->length; +} // template // std::ostream& std::operator<<(std::ostream&, llist); diff --git a/parse.cpp b/parse.cpp index df5aa053..1b186d4c 100644 --- a/parse.cpp +++ b/parse.cpp @@ -34,8 +34,8 @@ int parse_file(char* filename, FILE* f, vcomponent* root) { // TODO solve current; // std::string& target = cline - strbuf target = ctx.str; - target.cap(); + cline.value() = ctx.str; + cline.value().cap(); ctx.str.soft_reset(); handle_kv(&cline, &ctx); @@ -145,9 +145,8 @@ int parse_file(char* filename, FILE* f, vcomponent* root) { */ //strbuf* target = CLINE_CUR_VAL(&cline); - strbuf* target = cline.value(); - *target = ctx.str; - target->cap(); + cline.value() = ctx.str; + cline.value().cap(); ctx.str.soft_reset(); ++ctx.line; @@ -175,9 +174,7 @@ int handle_kv ( * and possibly some others I forget. */ - strbuf* s = new strbuf; - strbuf* type = cline->value(); - *s = *type; + strbuf* s = new strbuf(cline->value()); ctx->key_stack.push(s); cline->values.reset(); @@ -191,7 +188,7 @@ int handle_kv ( } else if (cline->key == "END") { // strbuf* s = POP(LLIST(strbuf))(&ctx->key_stack); strbuf* s = ctx->key_stack.top(); ctx->key_stack.pop(); - if (s == cline->value()) { + if (*s == cline->value()) { #if 0 ERR_P(ctx, "Expected END:%s, got END:%s.\n%s line", s->mem, diff --git a/vcal.h b/vcal.h index 93699a29..ea76e593 100644 --- a/vcal.h +++ b/vcal.h @@ -43,7 +43,7 @@ struct content_line { inline void push_param_value (strbuf* value) { this->values.cur()->params.cur()->values.push(value); } - inline strbuf* value() { return &this->values.cur()->value; } + inline strbuf& value() { return this->values.cur()->value; } }; -- cgit v1.2.3