Skip to content

Commit

Permalink
- download wordnet during cmake
Browse files Browse the repository at this point in the history
- cleanup string formatting
  • Loading branch information
djmott committed Jul 31, 2016
1 parent cef615b commit ac569a5
Show file tree
Hide file tree
Showing 5 changed files with 129 additions and 90 deletions.
6 changes: 5 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,11 @@ endif()

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/xtd/xtd.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/include/xtd/xtd.hpp)


file(DOWNLOAD http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.bz2 ${CMAKE_BINARY_DIR}/WordNet-3.0.tar.bz2)
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/WordNet-3.0.tar.bz2
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/
)

if(NOT GTEST_FOUND)
message("Google test framework will be downloaded")
Expand Down
2 changes: 1 addition & 1 deletion include/xtd/mapped_file.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace xtd{
int _FileNum;
public:
mapped_file(const path& Path)
: _FileNum(xtd::crt_exception::throw_if(open(Path. ), [](int i){ return -1==i; }))
: _FileNum(xtd::crt_exception::throw_if(open(Path.string().c_str(), O_CREAT), [](int i){ return -1==i; }))
{}

template <typename _Ty> class mapped_page{
Expand Down
3 changes: 1 addition & 2 deletions include/xtd/nlp/wordnet.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ namespace xtd
using map = std::map<size_t, record>;
size_t file_offset;
std::string lemma, pos, synset_cnt, p_cnt, ptr_symbol, sense_cnt, tagsense_cnt, synset_offset;
bool load(const std::string& sFile, size_t & i) {
bool load(const std::string& , size_t & ) {
return false;
}
};
Expand Down Expand Up @@ -227,7 +227,6 @@ namespace xtd
t6.get();
t7.get();
t8.get();
auto x = _index_verb.records.size();
}
database(const database&) = delete;

Expand Down
207 changes: 121 additions & 86 deletions include/xtd/string.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,19 @@ namespace xtd{
@param oArgs variable elements appended together
*/

template <typename ... _ArgsT>
static xstring format(_ArgsT&&...oArgs){
return _::xstring_format<_ChT, _ArgsT...>::format(std::forward<_ArgsT>(oArgs)...);
static xstring format(){
return xstring((_ChT*)"");
}


template <typename _Ty, typename ... _ArgsT>
static xstring format(_Ty val, _ArgsT&&...oArgs){
xstring sRet = _::xstring_format<_ChT, const _Ty&>::format(static_cast<const _Ty&>(val));
sRet += format(std::forward<_ArgsT>(oArgs)...);
return sRet;
}


/**
Converts the string to lower case
@param loc The locale to use during conversion
Expand Down Expand Up @@ -183,130 +191,178 @@ namespace xtd{
#endif
};

#if (!DOXY_INVOKED)
namespace _{

//empty
namespace _{
template <typename _ChT> class xstring_format<_ChT>{
public:
template <typename ... _ArgTs> static xstring<_ChT> format(_ArgTs...){ return xstring<_ChT>(); }
static xstring<_ChT> format(){ return xstring<_ChT>(); }
};


#if (XTD_HAS_CODECVT || XTD_HAS_EXP_CODECVT)

template <typename ... _ArgTs> class xstring_format<char, const wchar_t *, _ArgTs...>{
#if (XTD_HAS_CODECVT || XTD_HAS_EXP_CODECVT)
template <> class xstring_format<char, const wchar_t * const &>{
public:
static inline string format(const wchar_t * src, _ArgTs...oArgs){
static inline string format(const wchar_t * const & src){
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> oConv;
return oConv.to_bytes(src) + xstring_format<char, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
return oConv.to_bytes(src);
}
};

template <typename ... _ArgTs> class xstring_format<wchar_t, const char *, _ArgTs...>{
template <> class xstring_format<wchar_t, const char * const &>{
public:
static inline wstring format(const char * src, _ArgTs...oArgs){
static inline wstring format(const char * const & src){
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> oConv;
return oConv.from_bytes(src) + xstring_format<wchar_t, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
return oConv.from_bytes(src);
}
};

#elif (XTD_HAS_ICONV)
#elif (XTD_HAS_ICONV)

template <typename ... _ArgTs> class xstring_format<char, const wchar_t *, _ArgTs...>{
template <> class xstring_format<char, const wchar_t * const &>{
public:
static string format(const wchar_t * src, _ArgTs...oArgs){
static string format(const wchar_t * const & src){
static iconv_helper oIconv("UTF-8", "WCHAR_T");
size_t srclen = wcslen(src);
string sRet(srclen, 0);
size_t retlen = srclen;
iconv(oIconv, nullptr, nullptr, nullptr, &retlen);
forever{
retlen = sRet.size();
auto pSrc = reinterpret_cast<const char *>(src);
auto iSrcLen = srclen * sizeof(wchar_t);
auto sRetPtr = &sRet[0];
auto iRet = iconv(oIconv, const_cast<char**>(&pSrc), &iSrcLen, &sRetPtr, &retlen);
if (static_cast<size_t>(-1) != iRet){
return sRet;
}
if (errno != E2BIG){
throw std::runtime_error("A string conversion error occurred");
}
sRet.resize(sRet.size() * 2);
auto pSrc = reinterpret_cast<const char *>(src);
auto iSrcLen = srclen * sizeof(wchar_t);
auto sRetPtr = &sRet[0];
auto iRet = iconv(oIconv, const_cast<char**>(&pSrc), &iSrcLen, &sRetPtr, &retlen);
if (static_cast<size_t>(-1) != iRet){
return sRet;
}
if (errno != E2BIG){
throw std::runtime_error("A string conversion error occurred");
}
sRet.resize(sRet.size() * 2);
}
}
};

template <typename ... _ArgTs> class xstring_format<wchar_t, const char *, _ArgTs...>{
template <> class xstring_format<wchar_t, const char * const &>{
public:
static inline wstring format(const char * src, _ArgTs...oArgs){
static inline wstring format(const char * const & src){
static iconv_helper oIconv("WCHAR_T", "UTF-8");
size_t srclen = strlen(src);
wstring sRet(srclen, 0);
size_t retlen = srclen;
iconv(oIconv, nullptr, nullptr, nullptr, &retlen);
forever{
retlen = sRet.size() * sizeof(wchar_t);
auto pSrc = const_cast<char*>(src);
auto iSrcLen = srclen;
auto sRetPtr = reinterpret_cast<char*>(&sRet[0]);
auto iRet = iconv(oIconv, &pSrc, &iSrcLen, &sRetPtr, &retlen);
if (static_cast<size_t>(-1) != iRet) {
return sRet;
}
if (errno != E2BIG){
throw std::runtime_error("A string conversion error occurred");
}
sRet.resize(sRet.size() * 2);
auto pSrc = const_cast<char*>(src);
auto iSrcLen = srclen;
auto sRetPtr = reinterpret_cast<char*>(&sRet[0]);
auto iRet = iconv(oIconv, &pSrc, &iSrcLen, &sRetPtr, &retlen);
if (static_cast<size_t>(-1) != iRet){
return sRet;
}
if (errno != E2BIG){
throw std::runtime_error("A string conversion error occurred");
}
sRet.resize(sRet.size() * 2);
}
}
};

#else
#else

template <typename ... _ArgTs> class xstring_format<char, const wchar_t *, _ArgTs...> {
template <> class xstring_format<char, const wchar_t * const &>{
public:
static string format(const wchar_t *src, _ArgTs...oArgs) {
static string format(const wchar_t * const & src){
size_t srclen = wcslen(src);
string sRet(srclen, 0);
forever {
forever{
srclen = wcstombs(&sRet[0], src, sRet.size());
if (static_cast<size_t>(-1) == srclen) {
throw std::runtime_error("A string conversion error occurred");
}
if (srclen < sRet.size()) {
break;
}
sRet.resize(srclen * 2);
if (static_cast<size_t>(-1) == srclen){
throw std::runtime_error("A string conversion error occurred");
}
if (srclen < sRet.size()){
break;
}
sRet.resize(srclen * 2);
}
sRet.resize(srclen);
return sRet;
}
};

template <typename ... _ArgTs> class xstring_format<wchar_t, const char *, _ArgTs...> {
template <> class xstring_format<wchar_t, const char * const &>{
public:

static inline wstring format(const char *src, _ArgTs...oArgs) {
static inline wstring format(const char * const & src){
size_t srclen = strlen(src);
wstring sRet(srclen, 0);
forever {
forever{
srclen = mbstowcs(&sRet[0], src, sRet.size());
if (static_cast<size_t>(-1) == srclen) {
throw std::runtime_error("A string conversion error occurred");
}
if (srclen < sRet.size()) {
break;
}
sRet.resize(srclen * 2);
if (static_cast<size_t>(-1) == srclen){
throw std::runtime_error("A string conversion error occurred");
}
if (srclen < sRet.size()){
break;
}
sRet.resize(srclen * 2);
}
sRet.resize(srclen);
return sRet;
}
};

#endif
#endif

template <typename _ChT> class xstring_format<_ChT, const _ChT * const &>{
public:
inline static xstring<_ChT> format(const _ChT * const & src){
return xstring<_ChT>(src);
}
};

template <typename _ChT, typename _Ch2> class xstring_format<_ChT, const xtd::xstring<_Ch2> &>{
public:
inline static xstring<_ChT> format(const xtd::xstring<_Ch2> & src){
return xstring<_ChT>::format(src.c_str());
}
};


template <> class xstring_format<char, const void * const &>{
public:
inline static string format(const void * const & value){
return std::to_string(reinterpret_cast<size_t>(value));
}
};


template <> class xstring_format<char, const int32_t &>{
public:
inline static string format(const int32_t & value){
return std::to_string(value);
}
};


template <> class xstring_format<char, const DWORD &>{
public:
inline static string format(const DWORD & value){
return std::to_string(value);
}
};


}

#if (0)
namespace _{

//empty
template <typename _ChT> class xstring_format<_ChT>{
public:
static xstring<_ChT> format(){ return xstring<_ChT>(); }
};




template <typename ... _ArgTs> class xstring_format<char, int8_t&, _ArgTs...>{
Expand Down Expand Up @@ -420,21 +476,6 @@ namespace xtd{
return std::to_wstring(value) + xstring_format<wchar_t, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
}
};
#if ((XTD_OS_WINDOWS | XTD_OS_MINGW) & XTD_OS)
template <typename ... _ArgTs> class xstring_format<char, DWORD&, _ArgTs...>{
public:
inline static string format(DWORD& value, _ArgTs&&...oArgs){
return std::to_string(value) + xstring_format<char, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
}
};

template <typename ... _ArgTs> class xstring_format<wchar_t, DWORD&, _ArgTs...>{
public:
inline static wstring format(DWORD& value, _ArgTs&&...oArgs){
return std::to_wstring(value) + xstring_format<wchar_t, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
}
};
#endif

template <int _Len, typename ... _ArgTs> class xstring_format<char, const wchar_t(&)[_Len], _ArgTs...>{
public:
Expand Down Expand Up @@ -480,12 +521,6 @@ namespace xtd{
};


template <typename _ChT, typename ... _ArgTs> class xstring_format<_ChT, const _ChT*&, _ArgTs...>{
public:
inline static xstring<_ChT> format(const _ChT*&src, _ArgTs&&...oArgs){
return xstring<_ChT>(src) + xstring_format<_ChT, _ArgTs...>::format(std::forward<_ArgTs>(oArgs)...);
}
};

template <typename _ChT, typename ... _ArgTs> class xstring_format<_ChT, const _ChT*, _ArgTs...>{
public:
Expand Down
1 change: 1 addition & 0 deletions include/xtd/xtd.hpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ namespace xtd{
#include <dlfcn.h>
#include <cxxabi.h>
#include <dirent.h>
using DWORD = unsigned long;
#endif

#if (XTD_OS_LINUX & XTD_OS)
Expand Down

0 comments on commit ac569a5

Please sign in to comment.