예제 #1
0
void
data_table_create(void)
{
  data_hash_table_create();
  data_patricia_trie_create();
  data_double_array_trie_create();
  data_array_create();
  data_view_create();
}
예제 #2
0
파일: file.c 프로젝트: JanDeVisser/obelix
data_t * _file_open(char *name) {
  data_t      *dummy = data_create(Bool, 0);
  array_t     *args = data_array_create(1);
  data_t      *f;

  array_push(args, data_create(String, "file.txt"));
  f = data_execute(dummy, "open", args, NULL);
  array_free(args);
  data_free(dummy);
  return f;
}
예제 #3
0
파일: types.c 프로젝트: JanDeVisser/obelix
data_t * execute(data_t *self, char *name, int numargs, ...) {
  va_list  arglist;
  array_t *args;
  data_t  *ret;
  data_t  *d;
  int      ix;
  int      type;
  long     intval;
  double   dblval;
  char    *ptr;
  
  args = data_array_create(numargs);
  va_start(arglist, numargs);
  for (ix = 0; ix < numargs; ix++) {
    type = va_arg(arglist, int);
    d = NULL;
    switch (type) {
      case Int:
        intval = va_arg(arglist, long);
        d = int_to_data(intval);
        break;
      case Float:
        intval = va_arg(arglist, double);
        d = data_create(Float, dblval);
        break;
      case String:
        ptr = va_arg(arglist, char *);
        d = data_create(String, ptr);
        break;
      case Bool:
        intval = va_arg(arglist, long);
        d = data_create(Bool, intval);
        break;
      default:
        debug("Cannot do type %d. Ignored", type);
        ptr = va_arg(arglist, char *);
        break;
    }
    if (d) {
      array_push(args, d);
    }
  }
  va_end(arglist);
  ret = data_execute(self, name, args, NULL);
  if (ret && data_is_exception(ret)) {
    debug("Error executing '%s'.'%s': %s", data_tostring(self),
	  name, data_tostring(ret));
  }
  array_free(args);
  return ret;
}
예제 #4
0
void data_new_address(TTPtr self, t_symbol *relativeAddress)
{
	WrappedModularInstancePtr	x = (WrappedModularInstancePtr)self;
	long		argc = 0; 
	t_atom		*argv = NULL;
	TTUInt32	number;
	TTUInt32	i;
	TTAddress	newAddress = relativeAddress->s_name;
    TTAddress   returnedAddress;
    TTNodePtr   returnedNode = NULL;
    TTNodePtr   returnedContextNode = NULL;
	t_symbol    *instanceAddress;
	TTObject    anObject;
	TTObject    aSubscriber;
	TTValue		v;
    
    x->useInternals = YES;
    x->internals->clear();
    x->internals->setThreadProtection(YES);
    x->cursor = kTTSymEmpty;
    x->arrayAddress = newAddress;
    
    if (x->arrayAddress.getType() == kAddressRelative) {
        
        number = jamoma_parse_bracket(relativeAddress, x->arrayFormatInteger, x->arrayFormatString);
        
        // don't resize to 0
        if (number && number <= MAX_ARRAY_SIZE) {
            
            // Starts iteration on internals
            x->iterateInternals = YES;
            
            x->arraySize = number;
            
            EXTRA->objectsSorted->clear();
            
            for (i = 1; i <= x->arraySize; i++) {
                
                jamoma_edit_numeric_instance(x->arrayFormatInteger, &instanceAddress, i);
                
                // create a data
#ifdef JMOD_MESSAGE
                data_array_create(self, anObject, kTTSym_message, i);
#endif
                
#if JMOD_RETURN
                data_array_create(self, anObject, kTTSym_return, i);
#endif
                
#ifndef JMOD_MESSAGE
#ifndef JMOD_RETURN
                data_array_create(self, anObject, kTTSym_parameter, i);
#endif
#endif

                if (!jamoma_subscriber_create((t_object*)x, anObject, TTAddress(instanceAddress->s_name),  aSubscriber, returnedAddress, &returnedNode, &returnedContextNode)) {
                    
                    if (aSubscriber.valid()) {
                        
                        // append the data to the internals table
                        v = TTValue(anObject);
                        v.append(TTSymbol(instanceAddress->s_name));
                        v.append(aSubscriber);
                        x->internals->append(TTSymbol(instanceAddress->s_name), v);
                        
                        // inverse objects order for iteration purpose (see in data_array_return_value : array mode)
                        EXTRA->objectsSorted->insert(0, anObject);
                    }
                }
            }
            
            // Ends iteration on internals
            x->iterateInternals = NO;
            
            // handle args
            jamoma_ttvalue_to_Atom(x->arrayArgs, &argc, &argv);
            if (argc && argv)
                attr_args_process(x, argc, argv);
            
            // select all datas
            wrappedModularClass_ArraySelect(self, gensym("*"), 0, NULL);
            
#ifndef JMOD_MESSAGE
            // init all datas created dynamically
            if (!EXTRA->firstArray)
                defer((t_object*)x, (method)wrappedModularClass_anything, _sym_init, 0, NULL);
#endif
        }
        else if (number > MAX_ARRAY_SIZE)
            object_error((t_object*)x, "the size is greater than the maximum array size (%d)", MAX_ARRAY_SIZE);
        
        EXTRA->firstArray = NO;
    }
    else
        object_error((t_object*)x, "can't register because %s is not a relative address", relativeAddress->s_name);
}