MeshLib
 
Loading...
Searching...
No Matches
MRStringConvert.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshFwd.h"
4#include <filesystem>
5#include <string>
6#include "MRExpected.h"
7
8namespace MR
9{
10
13
15MRMESH_API std::wstring utf8ToWide( const char* utf8 );
16
18MRMESH_API std::string systemToUtf8( const std::string & system );
19
22MRMESH_API std::string utf8ToSystem( const std::string & utf8 );
23
25MRMESH_API std::string wideToUtf8( const wchar_t * wide );
26
27#ifdef _WIN32
29MRMESH_API std::string Utf16ToUtf8( const std::wstring_view & utf16 );
30#endif
31
32#if defined __cpp_lib_char8_t
33
34inline std::string asString( const std::u8string & s ) { return { s.begin(), s.end() }; }
35inline std::u8string asU8String( const std::string & s ) { return { s.begin(), s.end() }; }
36
37#if defined( _LIBCPP_VERSION ) && _LIBCPP_VERSION < 12000
38inline std::filesystem::path pathFromUtf8( const std::string & s ) { return std::filesystem::path( s ); }
39inline std::filesystem::path pathFromUtf8( const char * s ) { return std::filesystem::path( std::string( s ) ); }
40#else
41inline std::filesystem::path pathFromUtf8( const std::string & s ) { return std::filesystem::path( asU8String( s ) ); }
42inline std::filesystem::path pathFromUtf8( const char * s ) { return std::filesystem::path( asU8String( std::string( s ) ) ); }
43#endif
44
45#else // std::u8string is not defined
46
47inline const std::string & asString( const std::string & s ) { return s; }
48inline const std::string & asU8String( const std::string & s ) { return s; }
49
50inline std::string asString( std::string && s ) { return std::move( s ); }
51inline std::string asU8String( std::string && s ) { return std::move( s ); }
52
53inline std::filesystem::path pathFromUtf8( const std::string & s ) { return std::filesystem::u8path( s ); }
54inline std::filesystem::path pathFromUtf8( const char * s ) { return std::filesystem::u8path( s ); }
55
56#endif
57
59#if defined( _LIBCPP_VERSION ) && _LIBCPP_VERSION < 12000
60inline std::string utf8string( const std::filesystem::path & path )
61 { return path.u8string(); }
62#else
63inline std::string utf8string( const std::filesystem::path & path )
64 { return asString( path.u8string() ); }
65#endif
66
68
74MRMESH_API std::string bytesString( size_t size );
75
77MRMESH_API bool hasProhibitedChars( const std::string& line );
78
80MRMESH_API std::string replaceProhibitedChars( const std::string& line, char replacement = '_' );
81
83template<typename T>
84inline Expected<T> addFileNameInError( Expected<T> v, const std::filesystem::path & file )
85{
86 if ( !v.has_value() )
87 v = unexpected( v.error() + ": " + utf8string( file ) );
88 return v;
89}
90
97[[deprecated("Use `valueToString()` from `MRViewer/MRUnits.h` instead!")]]
98MRMESH_API char * formatNoTrailingZeros( char * fmt, double v, int digitsAfterPoint, int precision = 6 );
99
101MRMESH_API double roundToPrecision( double v, int precision );
102
104inline float roundToPrecision( float v, int precision ) { return (float)roundToPrecision( double(v), precision ); }
105
106// Returns message showed when loading is canceled
107inline std::string getCancelMessage( const std::filesystem::path& path )
108{
109 return "Loading canceled: " + utf8string( path );
110}
111
112}
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
MRMESH_API std::string utf8ToSystem(const std::string &utf8)
std::filesystem::path pathFromUtf8(const std::string &s)
Definition MRStringConvert.h:53
const std::string & asU8String(const std::string &s)
Definition MRStringConvert.h:48
MRMESH_API std::wstring utf8ToWide(const char *utf8)
converts UTF8-encoded string into UTF16-encoded string
const std::string & asString(const std::string &s)
Definition MRStringConvert.h:47
std::string utf8string(const std::filesystem::path &path)
returns filename as UTF8-encoded string
Definition MRStringConvert.h:63
MRMESH_API std::string systemToUtf8(const std::string &system)
converts system encoded string to UTF8-encoded string
MRMESH_API std::string wideToUtf8(const wchar_t *wide)
converts wide null terminating string to UTF8-encoded string
Definition MRCameraOrientationPlugin.h:7
std::string getCancelMessage(const std::filesystem::path &path)
Definition MRStringConvert.h:107
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:32
MRMESH_API std::string bytesString(size_t size)
MRMESH_API char * formatNoTrailingZeros(char *fmt, double v, int digitsAfterPoint, int precision=6)
MRMESH_API double roundToPrecision(double v, int precision)
returns given value rounded to given number of decimal digits
MRMESH_API bool hasProhibitedChars(const std::string &line)
returns true if line contains any of OS prohibited chars ('?', '*', '/', '\', '"',...
Expected< T > addFileNameInError(Expected< T > v, const std::filesystem::path &file)
if (v) contains an error, then appends given file name to that error
Definition MRStringConvert.h:84
tl::expected< T, E > Expected
Definition MRExpected.h:49
MRMESH_API std::string replaceProhibitedChars(const std::string &line, char replacement='_')
replace OS prohibited chars ('?', '*', '/', '\', '"', '<', '>') with replacement char
auto unexpected(E &&e)
Definition MRExpected.h:52