text: #ifndef STINGRAYKIT_TYPEINFO_H
  #define STINGRAYKIT_TYPEINFO_H
  
  // Copyright (c) 2011 - 2019, GS Group, https://github.com/GSGroup
  // Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
  // provided that the above copyright notice and this permission notice appear in all copies.
  // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
  // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  // WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  
  #include <string>
  #include <typeinfo>
  
  namespace stingray
  {
  
  	class TypeInfo
  	{
  	private:
  		const std::type_info*		_info;
  
  	public:
  		template < typename T >
  		TypeInfo(const T& obj)
  			: _info(&typeid(obj))
  		{ }
  
  		TypeInfo(const std::type_info& stdTypeInfo)
  			: _info(&stdTypeInfo)
  		{ }
  
  		bool operator == (const TypeInfo& other) const
  		{ return *_info == *other._info; }
  
  		bool operator < (const TypeInfo& other) const
  		{ return _info->before(*other._info); }
  
  		const char* GetRawName() const	{ return _info->name(); }
  
  		std::string GetName() const;
  		std::string GetNamespaceName() const;
  		std::string GetClassName() const;
  
  		std::string ToString() const;
  	};
  
  }
  
  #endif
  