static int jsonslError(jsonsl_t jsn, jsonsl_error_t err, struct jsonsl_state_st *state, char *at) { Parser REGAL_UNUSED *parser = reinterpret_cast<Parser *>(jsn->data); RegalAssert(parser); UNUSED_PARAMETER(parser); UNUSED_PARAMETER(err); UNUSED_PARAMETER(state); UNUSED_PARAMETER(at); Warning("JSON parsing error: ",jsonsl_strerror(err)); return 0; // zero to give up }
static void jsonslAction(jsonsl_t jsn, jsonsl_action_t action, struct jsonsl_state_st *state, const char *at) { Parser *parser = reinterpret_cast<Parser *>(jsn->data); RegalAssert(parser); UNUSED_PARAMETER(at); switch (action) { case JSONSL_ACTION_PUSH: break; case JSONSL_ACTION_POP: switch (state->type) { case JSONSL_T_HKEY: parser->onPush(std::string(jsn->base+state->pos_begin+1,state->pos_cur-state->pos_begin-1)); return; case JSONSL_T_OBJECT: break; case JSONSL_T_SPECIAL: if (state->special_flags&JSONSL_SPECIALf_TRUE) parser->onValue(true); else if (state->special_flags&JSONSL_SPECIALf_FALSE) parser->onValue(false); else if (state->special_flags&JSONSL_SPECIALf_NUMERIC) { if (jsn->base[state->pos_begin]=='-') parser->onValue(strtol(jsn->base+state->pos_begin,NULL,0)); else parser->onValue((long)strtoul(jsn->base+state->pos_begin,NULL,0)); } break; case JSONSL_T_STRING: parser->onValue(std::string(jsn->base+state->pos_begin+1,state->pos_cur-state->pos_begin-1)); break; default: break; } parser->onPop(); break; default: break; } }
REGAL_GLOBAL_BEGIN #include "RegalConfig.h" #include "RegalThread.h" #include "RegalContext.h" #include "RegalDispatcher.h" #include "RegalCacheShader.h" REGAL_GLOBAL_END REGAL_NAMESPACE_BEGIN static void REGAL_CALL cache_glShaderSource(GLuint shader, GLsizei count, const GLchar * const * string, const GLint *length) { RegalContext *_context = REGAL_GET_CONTEXT(); RegalAssert(_context); DispatchTableGL *_next = _context->dispatcher.cache.next(); RegalAssert(_next); if (Config::cache && Config::cacheShader) Cache::shaderSource(_next->call(&_next->glShaderSource), shader, count, string, length); else _next->call(&_next->glShaderSource)(shader, count, string, length); }
TextureState * TexC::GetBoundTexture_( GLenum textureUnit, GLenum target ) { size_t i = textureUnit - GL_TEXTURE0; if ( REGAL_EMU_MAX_TEXTURE_UNITS <= i ) { RegalAssert( i < REGAL_EMU_MAX_TEXTURE_UNITS ); return NULL; } TextureState* ts = textureUnitArrayState[ i ].GetBinding( target ); if ( ts != NULL ) { return ts; } return &textureZero; }
char * shaderSourceStrings(const GLsizei count, const GLchar **string, const GLint *length) { size_t total; /* Total size of copy (bytes) */ char *tmp; /* Copy of string array */ GLsizei i; /* Input iterator */ GLchar *j; /* Output iterator */ size_t k; /* Scratch space for string length */ if (count<=0) return NULL; /* Determine single-allocation memory size */ total = 0; for (i=0; i<count; ++i) total += length ? length[i] : (string[i] ? strlen(string[i]) : 0); total += count; /* One NUL-terminator per string */ total *= sizeof(GLchar); total += 1; /* NULL terminator */ /* Do the allocation */ tmp = (char *) malloc(total); /* Copy the strings */ j = tmp; for (i=0; i<count; ++i) { k = length ? length[i] : (string[i] ? strlen(string[i]) : 0); memcpy(j,string[i],k); j += k; } *(j++) = '\0'; RegalAssert(tmp+total == j); return tmp; }
void Dispatcher::push_back(DispatchTable &table, bool enabled) { // Disabling the missing table would be bad! RegalAssert(&table!=&missing || enabled==true); table._enabled = enabled; table._next = NULL; table._prev = NULL; if (size()) { table._prev = &back(); back()._next = &table; } _table.push_back(&table); // Cached front() and size() if (!_size++) _front = &table; }