stream: add stdex::sstring method variants

This commit is contained in:
Simon Rozman 2023-09-20 11:14:27 +02:00
parent 475e6734a7
commit dcfc4752b5
3 changed files with 143 additions and 1 deletions

View File

@ -69,12 +69,18 @@
#ifndef _Inout_opt_
#define _Inout_opt_
#endif
#ifndef _Inout_z_
#define _Inout_z_
#endif
#ifndef _Inout_cap_
#define _Inout_cap_(p)
#endif
#ifndef _Inout_count_
#define _Inout_count_(p)
#endif
#ifndef _Inout_updates_z_
#define _Inout_updates_z_(p)
#endif
#ifndef _Use_decl_annotations_
#define _Use_decl_annotations_

View File

@ -2454,6 +2454,14 @@ namespace stdex
open(filename, mode);
}
///
/// Opens file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline file(_In_ const stdex::sstring& filename, _In_ int mode) : file(filename.c_str(), mode) {}
///
/// Opens file
///
@ -2527,6 +2535,17 @@ namespace stdex
m_state = state_t::fail;
}
///
/// Opens file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline void open(_In_ const stdex::sstring& filename, _In_ int mode)
{
open(filename.c_str(), mode);
}
virtual fpos_t seek(_In_ foff_t offset, _In_ seek_t how = seek_t::beg)
{
#ifdef _WIN32
@ -2788,6 +2807,15 @@ namespace stdex
init(m_source);
}
///
/// Opens file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
/// \param[in] cache_size Size of the cache block
///
inline cached_file(_In_ const stdex::sstring& filename, _In_ int mode, _In_ size_t cache_size = default_cache_size) : cached_file(filename.c_str(), mode, cache_size) {}
virtual ~cached_file()
{
done();
@ -2819,6 +2847,17 @@ namespace stdex
m_state = state_t::fail;
}
///
/// Opens file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline void open(_In_ const stdex::sstring& filename, _In_ int mode)
{
open(filename.c_str(), mode);
}
protected:
file m_source;
};
@ -2910,6 +2949,14 @@ namespace stdex
load(filename, mode);
}
///
/// Loads content from file-system file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline memory_file(_In_ const stdex::sstring& filename, _In_ int mode) : memory_file(filename.c_str(), mode) {}
virtual ~memory_file()
{
if (m_manage && m_data)
@ -2978,6 +3025,17 @@ namespace stdex
#endif
}
///
/// Loads content from a file-system file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline void load(_In_ const stdex::sstring& filename, _In_ int mode)
{
load(filename.c_str(), mode);
}
///
/// Saves content to a file-system file
///
@ -3004,6 +3062,17 @@ namespace stdex
#endif
}
///
/// Saves content to a file-system file
///
/// \param[in] filename Filename
/// \param[in] mode Bitwise combination of mode_t flags
///
inline void save(_In_ const stdex::sstring& filename, _In_ int mode)
{
save(filename.c_str(), mode);
}
///
/// Returns pointer to data
///

View File

@ -1286,4 +1286,71 @@ namespace stdex
va_end(arg);
return str;
}
///
/// Convert string to lower-case character-by-character
///
/// \note For legacy code support only.
///
/// \param[in,out] str String
///
template<class T>
inline void strlwr(_Inout_z_ T* str, _In_ const std::locale& locale)
{
assert(str);
const auto& ctype = std::use_facet<std::ctype<T>>(locale);
for (size_t i = 0; str[i]; ++i)
str[i] = ctype.tolower(str[i]);
}
///
/// Convert string to lower-case character-by-character
///
/// \note For legacy code support only.
///
/// \param[in,out] str String
/// \param[in] count Code unit limit
///
template<class T>
inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
{
assert(str || !count);
const auto& ctype = std::use_facet<std::ctype<T>>(locale);
for (size_t i = 0; i < count && str[i]; ++i)
str[i] = ctype.tolower(str[i]);
}
///
/// Convert string to upper-case character-by-character
///
/// \note For legacy code support only.
///
/// \param[in,out] str String
///
template<class T>
inline void strupr(_Inout_z_ T* str, _In_ const std::locale& locale)
{
assert(str);
const auto& ctype = std::use_facet<std::ctype<T>>(locale);
for (size_t i = 0; str[i]; ++i)
str[i] = ctype.toupper(str[i]);
}
///
/// Convert string to upper-case character-by-character
///
/// \note For legacy code support only.
///
/// \param[in,out] str String
/// \param[in] count Code unit limit
///
template<class T>
inline void strupr
(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
{
assert(str || !count);
const auto& ctype = std::use_facet<std::ctype<T>>(locale);
for (size_t i = 0; i < count && str[i]; ++i)
str[i] = ctype.toupper(str[i]);
}
}