Example #1
0
int main(int argc, char **argv) {
  vary("*cheez: %d+%d*", 0,
       24);          // Also tests that '0' is not special as an array ender
  vary("*albeit*");  // Should not fail with no var args in vararg function
  vary2('Q', "%d*", 85);

  int maxxi = getMaxi(6, 2, 5, 21, 4, -10, 19);
  printf("maxxi:%d*\n", maxxi);
  double maxxD = getMaxD(6, (double)2.1, (double)5.1, (double)22.1, (double)4.1,
                         (double)-10.1, (double)19.1, (double)2);
  printf("maxxD:%.2f*\n", (float)maxxD);

  // And, as a function pointer
  void (*vfp)(const char * s, ...) = argc == 1211 ? NULL : vary;
  vfp("*vfp:%d,%d*", 22, 199);

  // ensure lists work properly when copied, reinited etc.
  varargs_listoffsets_main();

  return 0;
}
Example #2
0
void generate_random_hills(ROOM_INDEX_DATA *room)
{
int i,j,k,l;

for(i=0;i<number_range(2,6);i++)
room->map.index[number_range(0,15)][number_range(0,25)].height = number_range(3,7);

for(l=0;l<9;l++)
for(j=0;j<16;j++)
for(k=0;k<26;k++)
vary(room,j,k);

}
Example #3
0
void generate_random_mountains(ROOM_INDEX_DATA *room)
{

int j,k,l;
for(l=0;l<9;l++)
for(j=0;j<16;j++)
for(k=0;k<26;k++)
{
l = number_range(1,100);
if(l == 6)
room->map.index[j][k].height = 7;
else
room->map.index[j][k].height = 0;
}
for(j=0;j<16;j++)
for(k=0;k<26;k++)
vary(room,j,k);
}
int main()
{
    int a[]={1,2,3,4,5},i;
    int *p=a; // also *p=&a[0] are same
    printf("%d\n",*p);
    printf("%d %d %d %d %d\n",*(p+2),*(a+2),a[2],*(2+a),p[2]);
    // [2]a gives error
    //printf("%p %p\n",a,++a); // error: lvalue required as increment operand
    vary(a); // a is passed as a pointer
    for(i=0;i<5;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    //printf("%d\n",a[-4]); // syntactically correct. garbage value
    //printf("%d\n",a[10]); // syntactically correct. garbage value
    // no array bounds checking
    //printf("%d %d\n",p[-2],a[-2]); // syntactically correct. garbage value
    return 0;
}
Example #5
0
/////////////////////
// static
QVector<QSharedPointer<MetaTypeVariant> >
MarshallRuby::VALUE2MTVariant(VALUE v)
{
    QVector<QSharedPointer<MetaTypeVariant> > rvs(1);
    QSharedPointer<MetaTypeVariant> rv;
    QString str, str2;
    void *ci = NULL;
    QObject *obj = NULL;

    VALUE v1, v2, v3;
    
    switch (TYPE(v)) {
    case T_NONE:  rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant()); break;
    case T_FIXNUM: {
        QVariant num = (int)FIX2INT(v);
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num));
    }; break;
    case T_STRING: {
        QVariant str = QString(RSTRING_PTR(v));
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::QString, &str));
    }; break;
    case T_FLOAT: {
        QVariant num = RFLOAT_VALUE(v);
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Double, &num));
    }; break;
    case T_NIL: {
        QVariant  num = 0;
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num));
    }; break;
    case T_TRUE: {
        QVariant ok = true;
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Bool, &ok));
    }; break;
    case T_FALSE: {
        QVariant ok = false;
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Bool, &ok));
    }; break;
    case T_OBJECT: {
        str = QString(rb_class2name(RBASIC_CLASS(v)));
        ci = Qom::inst()->getObject(v);
        // obj = dynamic_cast<QObject*>(ci);
        qDebug()<<"unimpl VALUE:"<<str<<ci<<obj;
        // rv = QVariant(QMetaType::VoidStar, ci);
        // rv = QVariant::fromValue(ci);
        QVariant vrv = QVariant::fromValue(ci);
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::VoidStar, &vrv));
    }; break;
    case T_ARRAY: {
        QStringList ary;
        // ary << "a123" << "b3456";
        qDebug()<<RARRAY_LEN(v)<<QT_VERSION;
        for (int i = 0; i < RARRAY_LEN(v); i++) {
            // FIXME: 也可能是对象数组,如Qt5::QString,但toString方法不好用。
            // FIXME: 如,[Qt5::QApplication.translate("MainWindow", "acbc", nil), "efgggggg", "hijjjjjjjj"]
            ary << VALUE2Variant(rb_ary_entry(v, i)).toString();
        }
        // rv = QVariant(ary);
        QVariant vary(ary);
        rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::QStringList, &vary));
    }; break;
    case T_STRUCT: { // for ruby range
        str = rb_class2name(RBASIC_CLASS(v));
        if (str == "Range") {
            // qDebug()<<"Range is struct???"<<BUILTIN_TYPE(v)
            //         <<rb_class2name(RBASIC_CLASS(v))
            //         <<RSTRUCT_LEN(v);
            v1 = RSTRUCT_GET(v, 0);
            v2 = RSTRUCT_GET(v, 1);
            v3 = RSTRUCT_GET(v, 2);
            // qDebug()<<TYPE(v1)<<TYPE(v2)<<TYPE(v3);
            // qDebug()<<FIX2INT(v1)<<FIX2INT(v2);

            // rv = QVariant(FIX2INT(v1));
            // rvs.append(QVariant(FIX2INT(v2)));
            QVariant num1 = FIX2INT(v1);
            QVariant num2 = FIX2INT(v2);
            rv = QSharedPointer<MetaTypeVariant>(new MetaTypeVariant(QMetaType::Int, &num1));
            QSharedPointer<MetaTypeVariant> mtv(new MetaTypeVariant(QMetaType::Int, &num2));
            rvs.append(mtv);
        } else {
            qDebug()<<"unsupported struct type:"<<str;
        }
    }; break;
    case T_CLASS:
    default:
        qDebug()<<"unknown VALUE type:"<<TYPE(v);
        break;
    }
    
    rvs[0] = rv;
    return (rvs);
}