Improve implicit conversion operators of vk::ArrayWrapper1D on char type; added constructors from std::string and std::string_view (#1698)
This commit is contained in:
committed by
GitHub
parent
962979c679
commit
bab0e249f2
@@ -94,6 +94,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
VULKAN_HPP_CONSTEXPR ArrayWrapper1D( std::array<T, N> const & data ) VULKAN_HPP_NOEXCEPT : std::array<T, N>( data ) {}
|
||||
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string const & data ) VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
copy( data.data(), data.length() );
|
||||
}
|
||||
|
||||
#if 17 <= VULKAN_HPP_CPP_VERSION
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string_view data ) VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
copy( data.data(), data.length() );
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ( VK_USE_64_BIT_PTR_DEFINES == 0 )
|
||||
// on 32 bit compiles, needs overloads on index type int to resolve ambiguities
|
||||
VULKAN_HPP_CONSTEXPR T const & operator[]( int index ) const VULKAN_HPP_NOEXCEPT
|
||||
@@ -120,14 +134,14 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
operator std::string() const
|
||||
{
|
||||
return std::string( this->data() );
|
||||
return std::string( this->data(), N );
|
||||
}
|
||||
|
||||
#if 17 <= VULKAN_HPP_CPP_VERSION
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
operator std::string_view() const
|
||||
{
|
||||
return std::string_view( this->data() );
|
||||
return std::string_view( this->data(), N );
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -174,6 +188,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
{
|
||||
return *static_cast<std::array<char, N> const *>( this ) != *static_cast<std::array<char, N> const *>( &rhs );
|
||||
}
|
||||
|
||||
private:
|
||||
VULKAN_HPP_CONSTEXPR_14 void copy( char const * data, size_t len ) const VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
size_t n = std::min( N, len );
|
||||
for ( size_t i = 0; i < n; ++i )
|
||||
{
|
||||
( *this )[i] = data[i];
|
||||
}
|
||||
for ( size_t i = n; i < N; ++i )
|
||||
{
|
||||
( *this )[i] = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// specialization of relational operators between std::string and arrays of chars
|
||||
@@ -14168,7 +14196,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
# elif defined( __APPLE__ )
|
||||
m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL );
|
||||
# elif defined( _WIN32 )
|
||||
m_library = ::LoadLibraryA( "vulkan-1.dll" );
|
||||
m_library = ::LoadLibraryA( "vulkan-1.dll" );
|
||||
# else
|
||||
# error unsupported platform
|
||||
# endif
|
||||
|
||||
@@ -94,6 +94,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
|
||||
VULKAN_HPP_CONSTEXPR ArrayWrapper1D( std::array<T, N> const & data ) VULKAN_HPP_NOEXCEPT : std::array<T, N>( data ) {}
|
||||
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string const & data ) VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
copy( data.data(), data.length() );
|
||||
}
|
||||
|
||||
#if 17 <= VULKAN_HPP_CPP_VERSION
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
VULKAN_HPP_CONSTEXPR_14 ArrayWrapper1D( std::string_view data ) VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
copy( data.data(), data.length() );
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ( VK_USE_64_BIT_PTR_DEFINES == 0 )
|
||||
// on 32 bit compiles, needs overloads on index type int to resolve ambiguities
|
||||
VULKAN_HPP_CONSTEXPR T const & operator[]( int index ) const VULKAN_HPP_NOEXCEPT
|
||||
@@ -120,14 +134,14 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
operator std::string() const
|
||||
{
|
||||
return std::string( this->data() );
|
||||
return std::string( this->data(), N );
|
||||
}
|
||||
|
||||
#if 17 <= VULKAN_HPP_CPP_VERSION
|
||||
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
|
||||
operator std::string_view() const
|
||||
{
|
||||
return std::string_view( this->data() );
|
||||
return std::string_view( this->data(), N );
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -174,6 +188,20 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
{
|
||||
return *static_cast<std::array<char, N> const *>( this ) != *static_cast<std::array<char, N> const *>( &rhs );
|
||||
}
|
||||
|
||||
private:
|
||||
VULKAN_HPP_CONSTEXPR_14 void copy( char const * data, size_t len ) const VULKAN_HPP_NOEXCEPT
|
||||
{
|
||||
size_t n = std::min( N, len );
|
||||
for ( size_t i = 0; i < n; ++i )
|
||||
{
|
||||
( *this )[i] = data[i];
|
||||
}
|
||||
for ( size_t i = n; i < N; ++i )
|
||||
{
|
||||
( *this )[i] = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// specialization of relational operators between std::string and arrays of chars
|
||||
@@ -6601,7 +6629,7 @@ namespace VULKAN_HPP_NAMESPACE
|
||||
# elif defined( __APPLE__ )
|
||||
m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL );
|
||||
# elif defined( _WIN32 )
|
||||
m_library = ::LoadLibraryA( "vulkan-1.dll" );
|
||||
m_library = ::LoadLibraryA( "vulkan-1.dll" );
|
||||
# else
|
||||
# error unsupported platform
|
||||
# endif
|
||||
|
||||
Reference in New Issue
Block a user