DataType ParserTemplateBase::toDataPrefix(const ParserChar* prefixedBuffer, const ParserChar* prefixedBufferEnd, const ParserChar** buffer, const ParserChar* bufferEnd, bool& failed)
{
    const ParserChar* prefixBufferPos = prefixedBuffer;
    const ParserChar* prefixBufferStartPos = 0;
    while ( prefixBufferPos != prefixedBufferEnd )
    {
        if (!Utils::isWhiteSpace(*prefixBufferPos ) && !prefixBufferStartPos)
            prefixBufferStartPos = prefixBufferPos;
        ++prefixBufferPos;
    }

    //if prefixedBuffer contains only white spaces, we can ignore it.
    if ( !prefixBufferStartPos )
        return toData(buffer, bufferEnd, failed);

    //find first whitespace in buffer
    const ParserChar* bufferPos = *buffer;
    while ( !Utils::isWhiteSpace(*bufferPos) )
        ++bufferPos;

    size_t prefixBufferSize = prefixBufferPos - prefixBufferStartPos;
    size_t bufferSize = bufferPos - *buffer;
    size_t newBufferSize = prefixBufferSize + bufferSize;
    ParserChar* newBuffer =  (ParserChar*)mStackMemoryManager.newObject((newBufferSize + 1)*sizeof(ParserChar));
    memcpy(newBuffer, prefixBufferStartPos, prefixBufferSize*sizeof(ParserChar));
    memcpy(newBuffer + prefixBufferSize, *buffer, bufferSize*sizeof(ParserChar));
    newBuffer[newBufferSize] = ' ';
    ParserChar* newBufferPostParse = newBuffer;
    DataType value = toData( (const ParserChar**)&newBufferPostParse, newBuffer + newBufferSize + 1, failed);
    *buffer += (newBufferPostParse - newBuffer - prefixBufferSize);
    mStackMemoryManager.deleteObject();
    return value;
}
示例#2
0
 long ValueType<T>::copy(byte* buf, ByteOrder byteOrder) const
 {
     long offset = 0;
     typename ValueList::const_iterator end = value_.end();
     for (typename ValueList::const_iterator i = value_.begin(); i != end; ++i) {
         offset += toData(buf + offset, *i, byteOrder);
     }
     return offset;
 }
示例#3
0
文件: display.c 项目: cran/rggobi
USER_OBJECT_
RS_GGOBI(createDisplay)(USER_OBJECT_ stype, USER_OBJECT_ svars, 
  USER_OBJECT_ datasetId, USER_OBJECT_ useWindow)
{
  GGobiData *d;
  ggobid *gg;
  displayd *display = NULL;
  GType type;
  GGobiExtendedDisplayClass *klass;
  gboolean use_window = asCLogical(useWindow);

  d = toData(datasetId);
  g_return_val_if_fail(GGOBI_IS_DATA(d), NULL_USER_OBJECT);
  gg = d->gg;

  type = g_type_from_name(asCString(stype));
  klass = GGOBI_EXTENDED_DISPLAY_CLASS(g_type_class_peek(type));

  if(!klass) {
     PROBLEM "Unrecognized display type"
     ERROR;
  }

  if(klass->createWithVars && GET_LENGTH(svars)) {
     gint nvars, *vars, i;
     nvars = GET_LENGTH(svars);
     vars = g_malloc(sizeof(gint)*nvars);
     for(i = 0; i < nvars; i++)
       vars[i] = INTEGER_DATA(svars)[i];
     display = klass->createWithVars(use_window, false, nvars, vars, d, gg);
  } else if(klass->create)
     display = klass->create(use_window, false, NULL, d, gg);

  if(!display) {
    PROBLEM "Couldn't create the display"
    ERROR;
  }

  display_add(display, gg);

  gdk_flush();
  
  return(RS_displayInstance(display));
}
 ITopicImpl::ITopicImpl(const std::string &instanceName, spi::ClientContext *context)
         : proxy::ProxyImpl("hz:impl:topicService", instanceName, context) {
     partitionId = getPartitionId(toData(instanceName));
 }