From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QAEWL-0001Xs-MS for garchives@archives.gentoo.org; Thu, 14 Apr 2011 04:51:10 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 6D79A1C021; Thu, 14 Apr 2011 04:50:16 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 1791F1C021 for ; Thu, 14 Apr 2011 04:50:16 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 6C25F1B415A for ; Thu, 14 Apr 2011 04:50:15 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id B478C8007A for ; Thu, 14 Apr 2011 04:50:14 +0000 (UTC) From: "Petteri Räty" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Petteri Räty" Message-ID: <03e539766db9f149e5ca8657b75704edf09480af.betelgeuse@gentoo> Subject: [gentoo-commits] proj/libbash:master commit in: src/core/, src/core/tests/ X-VCS-Repository: proj/libbash X-VCS-Files: src/core/interpreter.h src/core/symbols.hpp src/core/tests/symbols_test.cpp X-VCS-Directories: src/core/ src/core/tests/ X-VCS-Committer: betelgeuse X-VCS-Committer-Name: Petteri Räty X-VCS-Revision: 03e539766db9f149e5ca8657b75704edf09480af Date: Thu, 14 Apr 2011 04:50:14 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 72e39b71995549304995a95064e4756c commit: 03e539766db9f149e5ca8657b75704edf09480af Author: Petteri R=C3=A4ty petteriraty eu> AuthorDate: Wed Apr 13 12:32:06 2011 +0000 Commit: Petteri R=C3=A4ty gentoo org> CommitDate: Wed Apr 13 12:32:06 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/libbash.git;a= =3Dcommit;h=3D03e53976 Remove class scope Scope was just a wrapper for the underlying container. I do not see any value in the abstraction so now the interpreter has a unordered_map member directly. --- src/core/interpreter.h | 38 ++++++++++--------- src/core/symbols.hpp | 78 ---------------------------------= ------ src/core/tests/symbols_test.cpp | 9 ---- 3 files changed, 20 insertions(+), 105 deletions(-) diff --git a/src/core/interpreter.h b/src/core/interpreter.h index 5c75bf0..3baf029 100644 --- a/src/core/interpreter.h +++ b/src/core/interpreter.h @@ -41,6 +41,8 @@ /// \brief implementation for bash interpreter /// class interpreter{ + typedef std::unordered_map> sco= pe; + /// \var private::members /// \brief global symbol table scope members; @@ -369,10 +371,10 @@ public: template T resolve(const std::string& name, const unsigned index=3D0) { - std::shared_ptr value =3D members.resolve(name); - if(!value) + auto i =3D members.find(name); + if(i =3D=3D members.end()) return T(); - return value->get_value(index); + return i->second->get_value(index); } =20 /// \brief resolve array variable @@ -381,11 +383,11 @@ public: template void resolve_array(const std::string& name, std::vector& values) { - std::shared_ptr value =3D members.resolve(name); - if(!value) + auto i =3D members.find(name); + if(i =3D=3D members.end()) return; =20 - value->get_all_values(values); + i->second->get_all_values(values); } =20 /// \brief check whether the value of the variable is null, return tru= e @@ -394,11 +396,11 @@ public: /// \return whether the value of the variable is null bool is_unset_or_null(const std::string& name) { - std::shared_ptr value =3D members.resolve(name); - if(value) - return value->is_null(); - else + auto i =3D members.find(name); + if(i =3D=3D members.end()) return true; + else + return i->second->is_null(); } =20 /// \brief check whether the value of the variable is unset @@ -406,7 +408,7 @@ public: /// \return whether the value of the variable is unset bool is_unset(const std::string& name) { - return !members.resolve(name); + return members.find(name) =3D=3D members.end(); } =20 /// \brief update the variable value, raise interpreter_exception if @@ -420,11 +422,11 @@ public: const T& new_value, const unsigned index=3D0) { - std::shared_ptr value =3D members.resolve(name); - if(!value) + auto i =3D members.find(name); + if(i =3D=3D members.end()) define(name, new_value, false); else - value->set_value(new_value, index); + i->second->set_value(new_value, index); return new_value; } =20 @@ -441,7 +443,7 @@ public: { std::shared_ptr target( new variable(name, value, readonly, is_null)); - members.define(target); + members[name] =3D target; } =20 /// \brief perform ${parameter:=E2=88=92word} expansion @@ -507,10 +509,10 @@ public: /// \return the length unsigned get_length(const std::string& name, const unsigned index=3D0) { - std::shared_ptr value =3D members.resolve(name); - if(!value) + auto i =3D members.find(name); + if(i =3D=3D members.end()) return 0; - return value->get_length(index); + return i->second->get_length(index); } =20 }; diff --git a/src/core/symbols.hpp b/src/core/symbols.hpp index 5992a67..6fcedc1 100644 --- a/src/core/symbols.hpp +++ b/src/core/symbols.hpp @@ -227,82 +227,4 @@ inline variable::variable<>(const std::string& name, { } =20 -/// -/// class scope -/// \brief implementation for symbol table -/// -class scope -{ -public: - typedef std::unordered_map> - table_type; - typedef table_type::iterator iterator; - typedef table_type::const_iterator const_iterator; - typedef table_type::size_type size_type; - typedef table_type::value_type value_type; - - /// - /// \brief return the number of variables in current scope - /// \return the number of variables - size_type size() - { - return members.size(); - } - - /// - /// \brief return an iterator referring to the first variable - /// \return iterator referring to the first variable - iterator begin() - { - return members.begin(); - } - - /// - /// \brief return a const iterator referring to the first variable - /// \return const iterator referring to the first variable - const_iterator begin() const - { - return members.begin(); - } - - /// - /// \brief return an iterator referring to the next element after - /// the last variable in current scope - /// \return iterator referring to he next element after the last - /// variable in current scope - iterator end() - { - return members.end(); - } - - /// - /// \brief return a const iterator referring to the next element - /// after the last variable in current scope - /// \return const iterator referring to he next element after the - /// last variable in current scope - const_iterator end() const - { - return members.end(); - } - - /// \brief define a new variable - /// \param the new variable - void define(std::shared_ptr s) - { - members[s->get_name()] =3D s; - } - - /// \brief resolve a variable - /// \param the variable name - /// \return target variable passed by reference - std::shared_ptr resolve(const std::string& name) - { - auto iter =3D members.find(name); - return (iter =3D=3D members.end()? std::shared_ptr() : ite= r->second); - } -protected: - /// \var protected::member - /// \brief symbol table data structure - table_type members; -}; #endif diff --git a/src/core/tests/symbols_test.cpp b/src/core/tests/symbols_tes= t.cpp index b45d286..d614947 100644 --- a/src/core/tests/symbols_test.cpp +++ b/src/core/tests/symbols_test.cpp @@ -140,12 +140,3 @@ TEST(symbol_test, get_length) EXPECT_EQ(5, array.get_length(2)); EXPECT_EQ(3, array.get_array_length()); } - -TEST(scope_test, define_resolve) -{ - scope members; - auto an_int =3D shared_ptr(new variable("integer_symbol", 10= 0)); - members.define(an_int); - EXPECT_EQ(an_int, members.resolve("integer_symbol")); - EXPECT_FALSE(members.resolve("not exist")); -}