1 /* 2 SObjectizer 5. 3 */ 4 5 /*! 6 \file 7 \brief A nonempty_name class definition. 8 */ 9 10 #pragma once 11 12 #include <string> 13 14 #include <so_5/ret_code.hpp> 15 #include <so_5/exception.hpp> 16 17 namespace so_5 18 { 19 20 // 21 // nonempty_name_t 22 // 23 24 //! A class for the name which cannot be empty. 25 /*! 26 * Checks value in the constructor. Throws an exception if the name is empty. 27 */ 28 class nonempty_name_t 29 { 30 // Note: clang-3.9 requires this on Windows platform. 31 nonempty_name_t( const nonempty_name_t & ) = delete; 32 nonempty_name_t & operator=( const nonempty_name_t & ) = delete; 33 34 public: 35 //! Constructor with check for the empty value. nonempty_name_t(const char * name)36 nonempty_name_t( const char * name ) 37 : nonempty_name_t( std::string(name) ) 38 {} 39 40 //! Constructor with check for the empty value. nonempty_name_t(std::string name)41 nonempty_name_t( std::string name ) 42 : m_nonempty_name( std::move(name) ) 43 { 44 if( m_nonempty_name.empty() ) 45 SO_5_THROW_EXCEPTION( rc_empty_name, "empty string as argument" ); 46 } 47 nonempty_name_t(nonempty_name_t && o)48 nonempty_name_t( nonempty_name_t && o ) 49 : m_nonempty_name( std::move(o.m_nonempty_name) ) 50 {} 51 swap(nonempty_name_t & a,nonempty_name_t & b)52 friend void swap( nonempty_name_t & a, nonempty_name_t & b ) 53 { 54 a.m_nonempty_name.swap( b.m_nonempty_name ); 55 } 56 operator =(nonempty_name_t && o)57 nonempty_name_t & operator=( nonempty_name_t && o ) 58 { 59 nonempty_name_t tmp( std::move(o) ); 60 swap( *this, o ); 61 return *this; 62 } 63 64 //! Get the value. 65 inline const std::string & query_name() const66 query_name() const 67 { 68 return m_nonempty_name; 69 } 70 71 /*! 72 * \brief Get the value away from the object. 73 * 74 * \attention 75 * After calling that method m_nonempty_name will become empty! 76 * 77 * \since 78 * v.5.5.19 79 */ 80 std::string giveout_value()81 giveout_value() 82 { 83 std::string r; 84 r.swap( m_nonempty_name ); 85 return r; 86 } 87 88 private: 89 //! Value. 90 std::string m_nonempty_name; 91 }; 92 93 } /* namespace so_5 */ 94 95