From 88c026bb0fe839a87089b5b22fb4972243cfb41a Mon Sep 17 00:00:00 2001 From: ilor <kailoran@gmail.com> Date: Tue, 12 Apr 2011 17:18:11 +0200 Subject: [PATCH] tweak AnnotatedSentence wrapping functions to behave more reasonably when passed a sentence tat already is an AnnotatedSentence --- libcorpus2/ann/annotatedsentence.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/libcorpus2/ann/annotatedsentence.cpp b/libcorpus2/ann/annotatedsentence.cpp index 327e9ba..7203d85 100644 --- a/libcorpus2/ann/annotatedsentence.cpp +++ b/libcorpus2/ann/annotatedsentence.cpp @@ -29,20 +29,30 @@ Sentence::Ptr AnnotatedSentence::clone_shared() const boost::shared_ptr<AnnotatedSentence> AnnotatedSentence::wrap_sentence( const boost::shared_ptr<Sentence>& s) { - boost::shared_ptr<AnnotatedSentence> a = boost::make_shared<AnnotatedSentence>(); - foreach (Token* t, s->tokens()) { - a->append(t); + boost::shared_ptr<AnnotatedSentence> a; + a = boost::dynamic_pointer_cast<AnnotatedSentence>(s); + if (!a) { + a = boost::make_shared<AnnotatedSentence>(); + foreach (Token* t, s->tokens()) { + a->append(t); + } + s->release_tokens(); } - s->release_tokens(); return a; } boost::shared_ptr<AnnotatedSentence> AnnotatedSentence::wrap_sentence_clone( const boost::shared_ptr<Sentence>& s) { - boost::shared_ptr<AnnotatedSentence> a = boost::make_shared<AnnotatedSentence>(); - foreach (Token* t, s->tokens()) { - a->append(t->clone()); + boost::shared_ptr<AnnotatedSentence> a; + a = boost::dynamic_pointer_cast<AnnotatedSentence>(s); + if (!a) { + a = boost::make_shared<AnnotatedSentence>(); + foreach (Token* t, s->tokens()) { + a->append(t->clone()); + } + } else { + a = boost::dynamic_pointer_cast<AnnotatedSentence>(a->clone_shared()); } return a; } -- GitLab