Esempio n. 1
0
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
}
Esempio n. 2
0
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;
  }
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}