libosmscout  0.1
Utility stuff

General utility stuff like enhanced string operations, special data structures... More...

Classes

class  osmscout::Breaker
 
class  osmscout::Cache< K, V, IK >
 
class  osmscout::NodeUseMap
 
class  osmscout::NumberSet
 
class  osmscout::StopClock
 

Typedefs

using osmscout::FileOffset = uint64_t
 
using osmscout::Id = uint64_t
 
using osmscout::OSMId = int64_t
 
using osmscout::TypeId = uint16_t
 

Functions

template<typename N >
uint8_t osmscout::BitsNeededToEncodeNumber (N number)
 
template<typename N >
osmscout::BitsToBytes (N bits)
 
std::string osmscout::ByteSizeToString (FileOffset size, const Locale &locale=Locale::ByEnvironmentSafe())
 
template<typename N >
uint8_t osmscout::BytesNeededToEncodeNumber (N number)
 
size_t osmscout::CountWords (const std::string &text)
 
template<typename N >
unsigned int osmscout::DecodeNumber (const char *buffer, N &number)
 
template<typename N >
unsigned int osmscout::DecodeNumberSigned (const char *buffer, N &number)
 
template<typename N >
unsigned int osmscout::DecodeNumberUnsigned (const char *buffer, N &number)
 
template<typename N >
unsigned int osmscout::EncodeNumber (N number, char *buffer)
 
template<typename N , size_t S>
unsigned int osmscout::EncodeNumber (N number, std::array< char, S > &buffer)
 
template<typename N >
unsigned int osmscout::EncodeNumberSigned (N number, char *buffer)
 
template<typename N >
unsigned int osmscout::EncodeNumberUnsigned (N number, char *buffer)
 
bool osmscout::GetDigitValue (char digit, size_t &result)
 
std::string osmscout::GetFirstInStringList (const std::string &stringList, const std::string &divider)
 
void osmscout::GroupStringListToStrings (std::list< std::string >::const_iterator token, size_t listSize, size_t parts, std::list< std::list< std::string > > &lists)
 
uint64_t osmscout::InterleaveNumbers (uint32_t a, uint32_t b)
 
std::string osmscout::LocaleStringToUTF8String (const std::string &text)
 
std::wstring osmscout::LocaleStringToWString (const std::string &text)
 
GeoCoord osmscout::PolygonCenter (const Area &area, double precision=1)
 
std::string osmscout::ReplaceString (const std::string &in, const std::string &search, const std::string &replacement)
 
void osmscout::SimplifyTokenList (std::list< std::string > &tokens)
 
std::list< std::string > osmscout::SplitString (const std::string &stringList, const std::string &separator, int maxSize=-1)
 
std::list< std::string > osmscout::SplitStringAtSpace (const std::string &input)
 
bool osmscout::StringToBool (const char *string, bool &value)
 
bool osmscout::StringToNumber (const char *string, double &value)
 
bool osmscout::StringToNumber (const std::string &string, double &value)
 
template<typename N >
bool osmscout::StringToNumber (const std::string &string, N &number, size_t base=10)
 
void osmscout::TokenizeString (const std::string &input, std::list< std::string > &tokens)
 
std::string osmscout::UTF8StringToLocaleString (const std::string &text)
 
std::u32string osmscout::UTF8StringToU32String (const std::string &text)
 
std::wstring osmscout::UTF8StringToWString (const std::string &text)
 
std::string osmscout::WStringToLocaleString (const std::wstring &text)
 
std::string osmscout::WStringToUTF8String (const std::wstring &text)
 

Variables

const size_t osmscout::coordByteSize =7
 
const double osmscout::latConversionFactor =(double)maxRawCoordValue/180.0
 
const double osmscout::lonConversionFactor =(double)maxRawCoordValue/360.0
 

Detailed Description

General utility stuff like enhanced string operations, special data structures...

Typedef Documentation

◆ FileOffset

using osmscout::FileOffset = typedef uint64_t

Type for describing the position of data within a file.

◆ Id

using osmscout::Id = typedef uint64_t

Type to be used for libosmscout internal ids (unsigned numbers with 64 bit size).

◆ OSMId

using osmscout::OSMId = typedef int64_t

Type to be used for OSM ids (signed numbers with 64 bit size).

◆ TypeId

using osmscout::TypeId = typedef uint16_t

Type for describing a type of an way, area or node.

Function Documentation

◆ BitsNeededToEncodeNumber()

template<typename N >
uint8_t osmscout::BitsNeededToEncodeNumber ( number)

Returns the number of bytes needed to encode the number. The function calculates the number of bytes that contain information, dropping leading bytes that only contain zero.

Referenced by osmscout::TypeConfig::RegisterType().

◆ BitsToBytes()

template<typename N >
N osmscout::BitsToBytes ( bits)
inline

◆ ByteSizeToString()

std::string osmscout::ByteSizeToString ( FileOffset  size,
const Locale locale = Locale::ByEnvironmentSafe() 
)

Prints byte size with short, human readable form by ISO/IEC 80000 standard. It means that KiB stands for 1024 bytes, MiB for 1024^2, GiB 1024^3...

Returned string is locale aware, UTF-8 encoded

Referenced by osmscout::InstalledMapsModel::data(), and osmscout::AvailableMapsModelMap::getSizeHuman().

◆ BytesNeededToEncodeNumber()

template<typename N >
uint8_t osmscout::BytesNeededToEncodeNumber ( number)

Returns the number of bytes needed to encode the number. The function calculates the number of bytes that contain information, dropping leading bytes that only contain zero.

Referenced by osmscout::BytesNeededToAddressFileData(), and osmscout::TypeConfig::RegisterType().

◆ CountWords()

size_t osmscout::CountWords ( const std::string &  text)

◆ DecodeNumber()

template<typename N >
unsigned int osmscout::DecodeNumber ( const char *  buffer,
N &  number 
)
inline

Decode a variable length encoded number from the buffer back to the variable.

The methods returns the number of bytes read.

Referenced by osmscout::FileScanner::ReadInt16Number(), osmscout::FileScanner::ReadInt32Number(), and osmscout::FileScanner::ReadInt64Number().

◆ DecodeNumberSigned()

template<typename N >
unsigned int osmscout::DecodeNumberSigned ( const char *  buffer,
N &  number 
)
inline

Decode a signed variable length encoded number from the buffer back to the variable.

The methods returns the number of bytes read.

◆ DecodeNumberUnsigned()

template<typename N >
unsigned int osmscout::DecodeNumberUnsigned ( const char *  buffer,
N &  number 
)
inline

Decode an unsigned variable length encoded number from the buffer back to the variable.

The methods returns the number of bytes read.

◆ EncodeNumber() [1/2]

template<typename N >
unsigned int osmscout::EncodeNumber ( number,
char *  buffer 
)
inline

Encode a number into the given buffer using some variable length encoding.

The current implementation requires the buffer to have at least space for sizeof(N)*8/7 bytes for an unsigned number and sizeof(N)*8/7 + 1/8 bytes for a signed number

This are 5 bytes for a 32bit value and 10 bytes for a 64bit value.

The methods returns the number of bytes written.

Referenced by osmscout::FileWriter::WriteNumber().

◆ EncodeNumber() [2/2]

template<typename N , size_t S>
unsigned int osmscout::EncodeNumber ( number,
std::array< char, S > &  buffer 
)
inline

Encode a number into the given buffer using some variable length encoding.

The current implementation requires the buffer to have at least space for sizeof(N)*8/7 bytes for an unsigned number and sizeof(N)*8/7 + 1/8 bytes for a signed number

This are 5 bytes for a 32bit value and 10 bytes for a 64bit value.

The methods returns the number of bytes written.

◆ EncodeNumberSigned()

template<typename N >
unsigned int osmscout::EncodeNumberSigned ( number,
char *  buffer 
)
inline

Encode a signed number into the given buffer using some variable length encoding.

The first bit (if set) signals a negative number. The highest bit in a byte is set, if there is an additional byte following. So we use one bit for signaling signess and use 7 of 8 bytes per byte for data.

The current implementation thus requires the buffer to have at least space for sizeof(N)*8/7 + 1/8 bytes:

This are 5 bytes for a 32bit value and 10 bytes for a 64bit value.

The methods returns the number of bytes written.

◆ EncodeNumberUnsigned()

template<typename N >
unsigned int osmscout::EncodeNumberUnsigned ( number,
char *  buffer 
)
inline

Encode an unsigned number into the given buffer using some variable length encoding.

The highest bit in a byte is set, if there is an additional byte following. So we use 7 of 8 bytes per byte for data.

The current implementation requires the buffer to have at least space for sizeof(N)*8/7 bytes:

This are 5 bytes for a 32bit value and 10 bytes for a 64bit value.

The methods returns the number of bytes written.

◆ GetDigitValue()

bool osmscout::GetDigitValue ( char  digit,
size_t &  result 
)

Returns the numerical value of the given character, if the character is a digit in a numerical value. The current code allows digits in the range from 0-9 and a-f and A-F. And thus supports numerical bases from 1-16.

Referenced by osmscout::StringToNumberSigned(), and osmscout::StringToNumberUnsigned().

◆ GetFirstInStringList()

std::string osmscout::GetFirstInStringList ( const std::string &  stringList,
const std::string &  divider 
)

Assumes that the string consists of a number of values separated by one of the given divider. If the list consists of one entry, no divider is used.

Returns the first entry in the list

Note
stringList must not be empty
at least one divider must be given

Referenced by osmscout::ColorFeature::Parse().

◆ GroupStringListToStrings()

void osmscout::GroupStringListToStrings ( std::list< std::string >::const_iterator  token,
size_t  listSize,
size_t  parts,
std::list< std::list< std::string > > &  lists 
)

Given a list of strings, individual strings will be combined into a given number of sub groups (individual string concatenated and separated by a space).

If you pass a list of 5 strings to be divided into 3 parts, a list of string-list will be returned, where each list contains exactly 3 strings.

◆ InterleaveNumbers()

uint64_t osmscout::InterleaveNumbers ( uint32_t  a,
uint32_t  b 
)

Encodes the given numbers into a new number of twice the size that has the bits of each number alternating interleaved.

This can be used to convert two dimensional coordinates into one number, where coordinates close in 2D are close in the one dimensional projection, too.

Referenced by osmscout::Pixel::GetId().

◆ LocaleStringToUTF8String()

std::string osmscout::LocaleStringToUTF8String ( const std::string &  text)

Convert the given std::string in the current locale to a std::string containing a corresponding UTF8 character sequence

Parameters
textthe std::wstring to get converted
Returns
the converted std::string

References osmscout::LocaleStringToWString(), and osmscout::WStringToUTF8String().

◆ LocaleStringToWString()

std::wstring osmscout::LocaleStringToWString ( const std::string &  text)

Converts the given std::string with content in the current locale to a std::wstring

Parameters
textString to get converted
Returns
corresponding std::wstring

Referenced by osmscout::LocaleStringToUTF8String().

◆ PolygonCenter()

GeoCoord osmscout::PolygonCenter ( const Area area,
double  precision = 1 
)

A fast algorithm for finding polygon pole of inaccessibility, the most distant internal point from the polygon outline (not to be confused with centroid). Useful for optimal placement of a text label on a polygon.

Based on PolyLabel algorithm from Mapbox

References osmscout::Area::GetBoundingBox(), osmscout::Area::Ring::nodes, and osmscout::Area::VisitRings().

Referenced by osmscout::PolygonCenter().

◆ ReplaceString()

std::string osmscout::ReplaceString ( const std::string &  in,
const std::string &  search,
const std::string &  replacement 
)

Replace all occurrences of search in input string by some other string. When search is empty, unchanged input string is returned.

Parameters
in- input string
search
replacement
Returns

◆ SimplifyTokenList()

void osmscout::SimplifyTokenList ( std::list< std::string > &  tokens)

Simplifying a token list by merging tokens that start with an upper case letter followed by a token starting with a lower case letter.

◆ SplitString()

std::list< std::string > osmscout::SplitString ( const std::string &  stringList,
const std::string &  separator,
int  maxSize = -1 
)

Split string by separator. For arguments "asphalt;ground;gravel" and ";" return list of three...

Note
when stringList is empty, result is empty list
separator must not be empty
when string ends with separator, last (empty) element is omitted
when maxSize is negative, list will contains all elements

Referenced by osmscout::TagRegistry::GetGradeForSurface(), osmscout::OpeningHours::Parse(), osmscout::LanesFeature::Parse(), and osmscout::SplitDestinations().

◆ SplitStringAtSpace()

std::list< std::string > osmscout::SplitStringAtSpace ( const std::string &  input)

Converts the given string into a list of whitespace separated (std::isspace()) strings.

◆ StringToBool()

bool osmscout::StringToBool ( const char *  string,
bool &  value 
)

Convert the given string to a boolean value

Parameters
stringstring with a potential boolean value (either 'true' or 'false')
valuevalue to copy the result to if no error occurred
Returns
'true' if the value was parsed, else 'false'

Referenced by osmscout::ParseBoolArgument().

◆ StringToNumber() [1/3]

bool osmscout::StringToNumber ( const char *  string,
double &  value 
)

◆ StringToNumber() [2/3]

bool osmscout::StringToNumber ( const std::string &  string,
double &  value 
)

◆ StringToNumber() [3/3]

◆ TokenizeString()

void osmscout::TokenizeString ( const std::string &  input,
std::list< std::string > &  tokens 
)

Converts the given string into a list of whitespace or colon-separated strings.

Referenced by osmscout::LocationService::SearchForLocationByString().

◆ UTF8StringToLocaleString()

std::string osmscout::UTF8StringToLocaleString ( const std::string &  text)

Convert the given std::string in UTF-8 a std::string containing to corresponding string in the current locale.

Parameters
textthe std::wstring to get converted
Returns
the converted std::string

References osmscout::UTF8StringToWString(), and osmscout::WStringToLocaleString().

Referenced by osmscout::Place::GetDisplayString().

◆ UTF8StringToU32String()

std::u32string osmscout::UTF8StringToU32String ( const std::string &  text)

Convert the given std::string containign a UTF8 character sequence to a std::u32string

Parameters
textString to get converted
Returns
corresponding std::wstring

Referenced by osmscout::TextLoader::AddCharactersToTextureAtlas().

◆ UTF8StringToWString()

std::wstring osmscout::UTF8StringToWString ( const std::string &  text)

Convert the given std::string containign a UTF8 character sequence to a std::wstring

Parameters
textString to get converted
Returns
corresponding std::wstring

Referenced by osmscout::MapPainterCairo::Layout(), osmscout::MapPainterAgg::Layout(), and osmscout::UTF8StringToLocaleString().

◆ WStringToLocaleString()

std::string osmscout::WStringToLocaleString ( const std::wstring &  text)

Converts the given std::wstring to a std::string with content in the current locale

Parameters
textString to get converted
Returns
corresponding std::string

Referenced by osmscout::UTF8StringToLocaleString().

◆ WStringToUTF8String()

std::string osmscout::WStringToUTF8String ( const std::wstring &  text)

Convert the given std::wstring to a std::string containing a corresponding UTF8 character sequence

Parameters
textthe std::wstring to get converted
Returns
the converted std::string

Referenced by osmscout::Locale::FromStdLocale(), and osmscout::LocaleStringToUTF8String().

Variable Documentation

◆ coordByteSize

const size_t osmscout::coordByteSize =7

◆ latConversionFactor

const double osmscout::latConversionFactor =(double)maxRawCoordValue/180.0

Coordinates will be stored as unsigned long values in file. For the conversion the float value is shifted to positive value and afterwards multiplied by conversion factor to get long values without significant values after colon.

Referenced by osmscout::GeoCoord::EncodeToBuffer(), osmscout::Point::GetCoordFromId(), osmscout::GeoCoord::GetHash(), osmscout::Point::GetId(), osmscout::GeoCoord::GetId(), osmscout::IsValidToWrite(), osmscout::FileScanner::Read(), osmscout::FileWriter::Write(), and osmscout::FileWriter::WriteCoord().

◆ lonConversionFactor

const double osmscout::lonConversionFactor =(double)maxRawCoordValue/360.0

Coordinates will be stored as unsigned long values in file. For the conversion the float value is shifted to positive value and afterwards multiplied by conversion factor to get long values without significant values after colon.

Referenced by osmscout::GeoCoord::EncodeToBuffer(), osmscout::Point::GetCoordFromId(), osmscout::GeoCoord::GetHash(), osmscout::Point::GetId(), osmscout::GeoCoord::GetId(), osmscout::IsValidToWrite(), osmscout::FileScanner::Read(), osmscout::FileWriter::Write(), and osmscout::FileWriter::WriteCoord().