Example #1
0
void MeshObject::readObj(const char* objName)
{
    FILE *obj = fopen(objName,"r");
    char buffer[MAX_LINE_SIZE];

    if (obj)
    {

        while (fgets(buffer,MAX_LINE_SIZE,obj))
            getNextElement(buffer);
    }
}
void CircularBuffer::addRawValue(const RawValue::Data *value)
{
#ifdef DEBUG_CIRCBUF
    printf("CircularBuffer(0x%lX)::add: ", (unsigned long)this);
    RawValue::show(stdout, type, count, value); 
#endif
    if (!isValidTime(RawValue::getTime(value)))
    {
        LOG_MSG("CircularBuffer added bad time stamp!\n");
    }
    memcpy(getNextElement(), value, element_size);
}
Example #3
0
int HRSstreamNext(HRSstream_t s, char *data)
{
  int bytesread;

  if (s->filterOnly) {
    return getNextElement(s, data);    
  }
  else { /* sorted stream */
    bytesread = sfread(s->lfp, data, s->logicalSize);
    if (bytesread == 0)
      return 0;
    else if (bytesread != s->logicalSize) {
      HRSerrorExit1("stream read from %s failed.\n", s->streamName);
      /* won't get here */
      return 0;
    }
    else return 1;
  }
}
Example #4
0
int main(int argc, char* argv[])
{
  if (argc != 3)
  {
    std::cerr << "usage: PListMerger"
              << " <first-plist-content>"
              << " <second-plist-content>" << std::endl;
    return 1;
  }

  const std::vector<std::string> args{argv, argv + argc};

  const juce::ScopedPointer<juce::XmlElement> firstPlistElement =
    juce::XmlDocument::parse(args.at(1));
  if (!firstPlistElement || !firstPlistElement->hasTagName("plist"))
  {
    std::cerr << "Invalid first plist content, expected <plist> element" << std::endl;
    return 1;
  }

  const auto firstDictElement = firstPlistElement->getChildByName("dict");
  if (!firstDictElement)
  {
    std::cerr << "Invalid first plist content, expected <dict> element" << std::endl;
    return 1;
  }

  std::vector<std::string> keysInFirstPlist;

  for (auto childElement = firstDictElement->getFirstChildElement();
       childElement != nullptr; childElement = childElement->getNextElement())
  {
    if (childElement->getTagName() != "key" || childElement->getNumChildElements() != 1
        || !childElement->getFirstChildElement()->isTextElement())
    {
      std::cerr << "Invalid first plist content, expected <key> element with only one "
                   "text child element"
                << std::endl;
      return 1;
    }

    const auto key = childElement->getFirstChildElement()->getText().toStdString();

    if (std::find(keysInFirstPlist.begin(), keysInFirstPlist.end(), key)
        != keysInFirstPlist.end())
    {
      std::cerr << "Invalid first plist content, duplicated key \"" << key << "\""
                << std::endl;
      return 1;
    }

    keysInFirstPlist.push_back(key);

    childElement = childElement->getNextElement();
    if (childElement == nullptr)
    {
      std::cerr << "Invalid first plist content, missing value associated with key \""
                << key << "\"" << std::endl;
      return 1;
    }
  }

  const juce::ScopedPointer<juce::XmlElement> secondPlistElement =
    juce::XmlDocument::parse(args.at(2));
  if (!secondPlistElement || !secondPlistElement->hasTagName("plist"))
  {
    std::cerr << "Invalid second plist content, expected <plist> element" << std::endl;
    return 1;
  }

  const auto secondDictElement = secondPlistElement->getChildByName("dict");
  if (!secondDictElement)
  {
    std::cerr << "Invalid second plist content, expected <dict> element" << std::endl;
    return 1;
  }

  for (auto childElement = secondDictElement->getFirstChildElement();
       childElement != nullptr; childElement = childElement->getNextElement())
  {
    if (childElement->getTagName() != "key" || childElement->getNumChildElements() != 1
        || !childElement->getFirstChildElement()->isTextElement())
    {
      std::cerr << "Invalid second plist content, expected <key> element with only one "
                   "text child element"
                << std::endl;
      return 1;
    }

    const auto key = childElement->getFirstChildElement()->getText().toStdString();

    const auto isKeyAlreadyInFirstPlist =
      std::find(keysInFirstPlist.begin(), keysInFirstPlist.end(), key)
      != keysInFirstPlist.end();

    if (!isKeyAlreadyInFirstPlist)
    {
      firstDictElement->addChildElement(new juce::XmlElement(*childElement));
    }

    childElement = childElement->getNextElement();
    if (childElement == nullptr)
    {
      std::cerr << "Invalid second plist content, missing value associated with key \""
                << key << "\"" << std::endl;
      return 1;
    }

    if (!isKeyAlreadyInFirstPlist)
    {
      firstDictElement->addChildElement(new juce::XmlElement(*childElement));
    }
  }

  std::cout << firstPlistElement->createDocument(juce::String{}, false, false)
            << std::flush;

  return 0;
}
Example #5
0
xptr apply_before_delete_triggers_on_subtree(xptr node, node_triggers_map *fired_triggers)
{
   	if (tr_globals::internal_auth_switch == BLOCK_AUTH_CHECK) return node;

    schema_node_cptr scm_node = getSchemaNode(node);
    node_triggers_map attribute_fired_triggers;
    node_triggers_map element_fired_triggers;
    typedef std::pair< schema_node_xptr, std::vector<trigger_cell_xptr> > mapPair;
    std::pair< node_triggers_map::iterator, bool > mapRes;

    /*1. Evalute triggers for this node if there are some in fired_triggers map*/
    node_triggers_map::iterator mapIter;
    trigger_cell_cptr trc = XNULL;
    mapIter = fired_triggers->find(scm_node.ptr());
    xptr parent=nodeGetParent(node);
    if( mapIter != fired_triggers->end())
        for(std::vector<trigger_cell_xptr>::size_type i=0; i< mapIter->second.size(); i++)
        {
            trc = mapIter->second.at(i);
            if(trc->execute_trigger_action(XNULL, node, parent) == XNULL) return XNULL;
        }

    // if the node is attribute - it has no children to process
    if (scm_node->type == attribute) return node;

    /*2. Find all fired triggers for all the children of the node (attribute_fired_triggers and element_fired_triggers)*/
    sc_ref_item* scm_child = scm_node->children->first;
    while(scm_child !=NULL)
    {
        cat_list<trigger_cell_xptr>::item* scm_trc = scm_child->object.snode->trigger_list->first;
        if(scm_trc!=NULL)
        {
            std::vector<trigger_cell_xptr> triggers_vec;
            if(scm_child->object.snode->type == attribute)
                mapRes = attribute_fired_triggers.insert( mapPair (scm_child->object.snode, triggers_vec) );
            else
                mapRes = element_fired_triggers.insert( mapPair (scm_child->object.snode, triggers_vec) );
            while(scm_trc!=NULL)
            {
                if((scm_trc->object->trigger_event == TRIGGER_DELETE_EVENT) &&
                   (scm_trc->object->trigger_granularity == TRIGGER_FOR_EACH_STATEMENT) &&
                   (scm_trc->object->trigger_time == TRIGGER_BEFORE))
                      mapRes.first->second.push_back(scm_trc->object);
                scm_trc=scm_trc->next;
            }
        }
        scm_child=scm_child->next;
    }
    /*Call this function on all children recursively*/
    xptr attr_child = getFirstAttributeChild(node);
    while(attr_child!=XNULL)
    {
        if(apply_before_delete_triggers_on_subtree(attr_child, &attribute_fired_triggers) ==XNULL)
            return XNULL;
        attr_child = getNextAttribute(attr_child);
    }
    xptr elem_child = getFirstElementChild(node);
    while(elem_child!=XNULL)
    {
        if(apply_before_delete_triggers_on_subtree(elem_child, &element_fired_triggers) == XNULL)
            return XNULL;
        elem_child = getNextElement(elem_child);
    }
    return node;
}
Example #6
0
void HRSstreamStart(HRSstream_t s,
		    void *filterFunction,
                    int numSlices,
		    HRSslice_t slices)
{
  assert(s != NULL);

  if (s->type == HRS_BINARYSTREAM) {
    s->bs->filter = (int (*)(char, void *, char *, char *))filterFunction;
    openFirstBinaryFile(s->bs);
  }
  else if (s->type == HRS_GENERALSTREAM) {
    s->gs->filter = (int (*)(char, void *, Sfio_t *, char *))filterFunction;
    openFirstGeneralFile(s->gs);
  }
  else if (s->type == HRS_GENERATIVESTREAM) {
    s->gens->filter = (int (*)(char, void *, char *))filterFunction;
  }
  else if (s->type == HRS_MAPSTREAM) {
    s->ms->filter = (int (*)(char, void *, char *, char *))filterFunction;
  }

  if (numSlices == 0)
    /* filter only stream */
    s->filterOnly = 1;
  else {
    int from_pipe[2];
    int to_pipe[2];
    int keySize;
    int recSize;
    Sfio_t *tp;
    fchandle *fch;
    int i;

    s->filterOnly = 0;

    /* set up fixcut to munge the data */
    fch = fcopen();
    for (i=0; i < numSlices; i++) {
      int bStrSize = numDigits(slices[i].begin);
      int eStrSize = numDigits(slices[i].end);
      int strSize = bStrSize + 1 + eStrSize + 
	                    strlen(slices[i].description) + 1;
      char *str = HRSmalloc(strSize, "HRSstreamStart");

      sfsprintf(str, strSize, "%d,%d%s", slices[i].begin,
		slices[i].end, slices[i].description);

      if (fcslice(fch, 'k', str) != 0)
	HRSerrorExit1("Fixcut error: %s\n" , fcerror(fch));

      /* do we need to/can we free str here? */
    }

    if ((recSize = fcready(fch, s->logicalSize)) < 0)
      HRSerrorExit1("Fixcut error: %s\n" , fcerror(fch));

    keySize = recSize - s->logicalSize;

    pipe(from_pipe);
    pipe(to_pipe);
    if (fork() == 0) {
      /* child */
      extern int HRSpuntExit;
      int ac;
      char **av;

      HRSpuntExit = 1;   /* don't do any work on exit in the child */

      av = buildSortStr(s, keySize, 0, 1, &ac);
      close(to_pipe[1]);
      close(from_pipe[0]);
      close(0); dup(to_pipe[0]); close(to_pipe[0]);
      close(1); dup(from_pipe[1]); close(from_pipe[1]);

      amrRSORT(ac, av);
      _exit(1);

    }
    else {
      /* parent */
      char *logicalData;
      uchar *mungedData;

      close(to_pipe[0]);
      close(from_pipe[1]);

      tp = sfnew(NULL, NULL, SF_UNBOUND, to_pipe[1], SF_WRITE | SF_SHARE);

      logicalData = HRSmalloc(s->logicalSize, "HRSstreamStart");

      while (getNextElement(s, logicalData) != 0) {
	int v;

	if ((mungedData = fcbuild(fch, (uchar *) logicalData, NULL)) == NULL)
	  HRSerrorExit1("Fixcut error: %s\n" , fcerror(fch));

        v = sfwrite(tp, mungedData, recSize);
	if (v == 0)
	  HRSerrorExit1("stream write to %s failed\n", s->streamName);
      }
      sfclose(tp);
      fcclose(fch);

      s->lfp = 
	sfnew(NULL, NULL, SF_UNBOUND, from_pipe[0], SF_READ | SF_SHARE);

      HRSfree(logicalData);
    }
  }
}