Browse Source

fix build on msvc, second try

tags/20181228
nihuini 7 years ago
parent
commit
4e68a29eff
2 changed files with 30 additions and 14 deletions
  1. +15
    -7
      src/net.cpp
  2. +15
    -7
      src/paramdict.cpp

+ 15
- 7
src/net.cpp View File

@@ -228,24 +228,32 @@ int Net::load_param(FILE* fp)
return 0;
}

static inline int mem_sscanf_pn(const char*& ptr, const char* format, ...)
#if _MSC_VER
static inline int mem_sscanf_with_n(int* _internal_nconsumed_ptr, const char*& ptr, const char* format, ...)
{
va_list args;
va_start(args, format);

int nconsumed = 0;
int nscan = sscanf(ptr, format, args, &nconsumed);
ptr += nconsumed;
int _n = vsscanf(ptr, format, args);

va_end(args);

return nconsumed > 0 ? nscan : 0;
}
ptr += *_internal_nconsumed_ptr;

#define mem_sscanf(ptr, format, ...) mem_sscanf_pn(ptr, format "%n", __VA_ARGS__)
return *_internal_nconsumed_ptr > 0 ? _n : 0;
}
#define mem_sscanf(ptr, format, ...) mem_sscanf_with_n(&_internal_nconsumed, ptr, format "%n", __VA_ARGS__, &_internal_nconsumed)
#else
// return value from macro requires gcc extension https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
#define mem_sscanf(ptr, format, ...) ({int _b=0; int _n = sscanf(ptr, format "%n", __VA_ARGS__, &_b); ptr+=_b;_b>0?_n:0;})
#endif // _MSC_VER

int Net::load_param_mem(const char* _mem)
{
#if _MSC_VER
int _internal_nconsumed;
#endif

int magic = 0;
const char* mem = _mem;
mem_sscanf(mem, "%d", &magic);


+ 15
- 7
src/paramdict.cpp View File

@@ -174,24 +174,32 @@ int ParamDict::load_param(FILE* fp)
return 0;
}

static inline int mem_sscanf_pn(const char*& ptr, const char* format, ...)
#if _MSC_VER
static inline int mem_sscanf_with_n(int* _internal_nconsumed_ptr, const char*& ptr, const char* format, ...)
{
va_list args;
va_start(args, format);

int nconsumed = 0;
int nscan = sscanf(ptr, format, args, &nconsumed);
ptr += nconsumed;
int _n = vsscanf(ptr, format, args);

va_end(args);

return nconsumed > 0 ? nscan : 0;
}
ptr += *_internal_nconsumed_ptr;

#define mem_sscanf(ptr, format, ...) mem_sscanf_pn(ptr, format "%n", __VA_ARGS__)
return *_internal_nconsumed_ptr > 0 ? _n : 0;
}
#define mem_sscanf(ptr, format, ...) mem_sscanf_with_n(&_internal_nconsumed, ptr, format "%n", __VA_ARGS__, &_internal_nconsumed)
#else
// return value from macro requires gcc extension https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
#define mem_sscanf(ptr, format, ...) ({int _b=0; int _n = sscanf(ptr, format "%n", __VA_ARGS__, &_b); ptr+=_b;_b>0?_n:0;})
#endif // _MSC_VER

int ParamDict::load_param_mem(const char*& mem)
{
#if _MSC_VER
int _internal_nconsumed;
#endif

clear();

// 0=100 1=1.250000 -23303=5,0.1,0.2,0.4,0.8,1.0


Loading…
Cancel
Save