Skip to content

Commit

Permalink
Fix issues for cygwin, mingw, and VC9
Browse files Browse the repository at this point in the history
  • Loading branch information
BenKaufmann committed Aug 24, 2016
1 parent 89d0e5a commit 84faf29
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 6 deletions.
2 changes: 1 addition & 1 deletion libclasp/clasp/clasp_facade.h
Expand Up @@ -25,7 +25,7 @@
#endif

#if !defined(CLASP_VERSION)
#define CLASP_VERSION "3.2.0-R52878"
#define CLASP_VERSION "3.2.0-R52888"
#endif
#if !defined(CLASP_LEGAL)
#define CLASP_LEGAL \
Expand Down
3 changes: 3 additions & 0 deletions libclasp/clasp/util/platform.h
Expand Up @@ -92,6 +92,9 @@ typedef uintptr_t uintp;
#ifndef INT16_MIN
#define INT16_MIN (-INT16_MAX - 1)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX (65535U)
#endif
#ifndef FUNC_NAME
#define FUNC_NAME __FILE__
#endif
Expand Down
2 changes: 1 addition & 1 deletion libclasp/src/program_builder.cpp
Expand Up @@ -335,7 +335,7 @@ ProgramParser* PBBuilder::doCreateParser() {
/////////////////////////////////////////////////////////////////////////////////////////
BasicProgramAdapter::BasicProgramAdapter(ProgramBuilder& prg) : prg_(&prg), inc_(false) {
int t = prg_->type();
CLASP_FAIL_IF(t != ProblemType::Sat && t != ProblemType::Pb, "unknown program type");
CLASP_FAIL_IF(t != Problem_t::Sat && t != Problem_t::Pb, "unknown program type");
}
void BasicProgramAdapter::initProgram(bool inc) { inc_ = inc; }
void BasicProgramAdapter::beginStep() { if (inc_ || prg_->frozen()) { prg_->updateProgram(); } }
Expand Down
2 changes: 1 addition & 1 deletion liblp/src/match_basic_types.cpp
Expand Up @@ -163,7 +163,7 @@ bool ProgramReader::parse(ReadMode m) {
if (!doParse()) { return false; }
stream()->skipWs();
require(!more() || incremental(), "invalid extra input");
} while (m == ReadMode::Complete && more());
} while (m == Complete && more());
return true;
}
bool ProgramReader::more() {
Expand Down
23 changes: 20 additions & 3 deletions libprogram_opts/src/string_convert.cpp
Expand Up @@ -29,7 +29,25 @@ inline long long strtoll(const char* str, char** endptr, int base) { return _st
#endif
#endif

#ifdef _WIN32
#if defined(__CYGWIN__) || defined (__MINGW32__)
#include <locale>
typedef std::locale locale_t;
inline double strtod_l(const char* x, char** end, const locale_t& loc) {
std::size_t xLen = std::strlen(x);
const char* err = x;
bk_lib::detail::input_stream<char> str(x, xLen);
str.imbue(loc);
double out;
if (str >> out) {
if (str.eof()) { err += xLen; }
else { err += static_cast<std::size_t>(str.tellg()); }
}
if (end) { *end = const_cast<char*>(err); }
return out;
}
inline void freelocale(const locale_t&) {}
inline locale_t default_locale() { return std::locale::classic(); }
#elif defined(_WIN32)
typedef _locale_t locale_t;
#define strtod_l _strtod_l
#define freelocale _free_locale
Expand All @@ -40,7 +58,6 @@ inline locale_t default_locale() { return newlocale(LC_ALL_MASK, "C", 0); }
#endif
static struct LocaleHolder {
~LocaleHolder() { freelocale(loc_); }
operator locale_t() const { return loc_; }
locale_t loc_;
} default_locale_g = { default_locale() };

Expand Down Expand Up @@ -188,7 +205,7 @@ int xconvert(const char* x, unsigned long long& out, const char** errPos, int) {
int xconvert(const char* x, double& out, const char** errPos, int) {
if (empty(x, errPos)) { return 0; }
char* err;
out = strtod_l(x, &err, default_locale_g);
out = strtod_l(x, &err, default_locale_g.loc_);
return parsed(err != x, err, errPos);
}

Expand Down

0 comments on commit 84faf29

Please sign in to comment.