Пример #1
0
// Now, lets see how long it takes to use these implementations
int main(int argc, char** argv)
{
  struct cstruct cs; // chars
  struct sstruct ss; // shorts
  struct lstruct ls; // longs
  struct btype b;    // bits

  char csa[32];
  short ssa[32];
  long lsa[32];

  long count;
  long i;

  // For timing, we can vary the number of iterations run
  Assert(argc == 2, "Usage: flags <number_of_iterations>");

  count = atol(argv[1]);

  cs.pos[0] = true;
  ss.pos[0] = true;
  ls.pos[0] = true;
  csa[0] = true;
  ssa[0] = true;
  lsa[0] = true;
  b.f0 = true;

  // For each interation, we are going to test the time to read and write
  // the values by doing a copy from one array position to another.
  // To cut down on the overhead of the outer loop, we do 120 assignements
  // within the loop body.

  Settime();
  for (i=0; i<count; i++) {
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
  }
  cout << "Time for characters (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
}
  cout << "Time for shorts (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
  }
  cout << "Time for longs (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
  }
  cout << "Time for bitfields (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

 return 0;
}
Пример #2
0
void MainObject::DispatchCommand(QString cmd)
{
    bool processed=false;
    int line;
    QTime time;
    bool ok=false;
    bool overwrite=!edit_modified;
    QStringList cmds;
    QString verb;

    cmd=cmd.stripWhiteSpace();
    if(cmd.right(1)=="!") {
        overwrite=true;
        cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
    }
    cmds=cmds.split(" ",cmd);
    verb=cmds[0].lower();

    //
    // No loaded log needed for these
    //
    if(verb=="deletelog") {
        if(rda->user()->deleteLog()) {
            if(cmds.size()==2) {
                Deletelog(cmds[1]);
            }
            else {
                fprintf(stderr,"deletelog: invalid command arguments\n");
            }
        }
        else {
            fprintf(stderr,"deletelog: insufficient privileges [Delete Log]\n");
        }
        processed=true;
    }

    if((verb=="exit")||(verb=="quit")||(verb=="bye")) {
        if(overwrite) {
            exit(0);
        }
        else {
            OverwriteError(verb);
        }
        processed=true;
    }

    if((verb=="help")||(verb=="?")) {
        Help(cmds);
        processed=true;
    }

    if(verb=="listlogs") {
        ListLogs();
        processed=true;
    }

    if(verb=="listservices") {
        Listservices();
        processed=true;
    }

    if(verb=="load") {
        if(overwrite) {
            if(cmds.size()==2) {
                Load(cmds[1]);
            }
            else {
                fprintf(stderr,"load: invalid command arguments\n");
            }
        }
        else {
            OverwriteError("load");
        }
        processed=true;
    }

    if(verb=="new") {
        if(overwrite) {
            if(cmds.size()==2) {
                New(cmds[1]);
            }
            else {
                fprintf(stderr,"new: invalid command arguments\n");
            }
        }
        else {
            OverwriteError("new");
        }
        processed=true;
    }

    //
    // These need a log loaded
    //
    if((processed)||(edit_log_event!=NULL)) {
        if(verb=="addcart") {
            if(rda->user()->addtoLog()) {
                if(cmds.size()==3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)) {
                        unsigned cartnum=cmds[2].toUInt(&ok);
                        if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) {
                            Addcart(line,cartnum);
                        }
                        else {
                            fprintf(stderr,"addcart: invalid cart number\n");
                        }
                    }
                    else {
                        fprintf(stderr,"addcart: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"addcart: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,"addcart: insufficient privileges [Add Log Items]\n");
            }
            processed=true;
        }

        if(verb=="addchain") {
            if(rda->user()->addtoLog()) {
                if(cmds.size()==3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)) {
                        Addchain(line,cmds[2]);
                    }
                    else {
                        fprintf(stderr,"addchain: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"addchain: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,"addchain: insufficient privileges [Add Log Items]\n");
            }
            processed=true;
        }

        if(verb=="addmarker") {
            if(rda->user()->addtoLog()) {
                if(cmds.size()==2) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)) {
                        Addmarker(line);
                    }
                    else {
                        fprintf(stderr,"addmarker: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"addmarker: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,"addmarker: insufficient privileges [Add Log Items]\n");
            }
            processed=true;
        }

        if(verb=="addtrack") {
            if(rda->user()->addtoLog()) {
                if(cmds.size()==2) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)) {
                        Addtrack(line);
                    }
                    else {
                        fprintf(stderr,"addtrack: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"addtrack: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,"addtrack: insufficient privileges [Add Log Items]\n");
            }
            processed=true;
        }

        if(verb=="header") {
            Header();
            processed=true;
        }

        if(verb=="list") {
            List();
            processed=true;
        }

        if(verb=="remove") {
            if(rda->user()->removefromLog()) {
                if(cmds.size()==2) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        Remove(line);
                    }
                    else {
                        fprintf(stderr,"remove: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"remove: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,"remove: insufficient privileges [Delete Log Items]\n");
            }
            processed=true;
        }

        if(verb=="save") {
            if(rda->user()->arrangeLog()) {
                Save();
            }
            else {
                fprintf(stderr,"save: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="saveas") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==2) {
                    if(cmds[1].length()>64) {
                        fprintf(stderr,"saveas: log name too long\n");
                    }
                    Saveas(cmds[1]);
                }
                else {
                    fprintf(stderr,"saveas: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "saveas: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setautorefresh") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==2) {
                    QString arg=cmds[1].lower();
                    if((arg=="yes")||(arg=="true")||(arg=="y")) {
                        Setautorefresh(true);
                        processed=true;
                    }
                    if((arg=="no")||(arg=="false")||(arg=="n")) {
                        Setautorefresh(false);
                        processed=true;
                    }
                    if(!processed) {
                        fprintf(stderr,"setautorefresh: invalid command argument\n");
                    }
                }
                else {
                    fprintf(stderr,"setautorefresh: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setautorefresh: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setcart") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        unsigned cartnum=cmds[2].toUInt(&ok);
                        if(ok&&(cartnum<=RD_MAX_CART_NUMBER)) {
                            Setcart(line,cartnum);
                        }
                        else {
                            fprintf(stderr,"setcart: invalid cart number\n");
                        }
                    }
                    else {
                        fprintf(stderr,"setcart: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"setcart: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setcart: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setcomment") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()>=3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        cmds.remove(cmds.begin());
                        cmds.remove(cmds.begin());
                        Setcomment(line,cmds.join(" "));
                    }
                    else {
                        fprintf(stderr,"setcomment: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"setcomment: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setcomment: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setdesc") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()>=2) {
                    cmds.erase(cmds.begin());
                    Setdesc(cmds.join(" "));
                }
                else {
                    fprintf(stderr,"setdesc: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setdesc: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setenddate") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==1) {
                    Setenddate(QDate());
                }
                else {
                    if(cmds.size()==2) {
                        QDate date=QDate::fromString(cmds[1],Qt::ISODate);
                        if(date.isValid()) {
                            Setenddate(date);
                        }
                        else {
                            fprintf(stderr,"setenddate: invalid date format\n");
                        }
                    }
                    else {
                        fprintf(stderr,"setenddate: invalid command arguments\n");
                    }
                }
            }
            else {
                fprintf(stderr,
                        "setenddate: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setlabel") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        Setlabel(line,cmds[2]);
                    }
                    else {
                        fprintf(stderr,"setlabel: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"setlabel: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setlabel: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setpurgedate") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==1) {
                    Setpurgedate(QDate());
                }
                else {
                    if(cmds.size()==2) {
                        QDate date=QDate::fromString(cmds[1],Qt::ISODate);
                        if(date.isValid()) {
                            Setpurgedate(date);
                        }
                        else {
                            fprintf(stderr,"setpurgedate: invalid date format\n");
                        }
                    }
                    else {
                        fprintf(stderr,"setpurgedate: invalid command arguments\n");
                    }
                }
            }
            else {
                fprintf(stderr,
                        "setpurgedate: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setservice") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==2) {
                    Setservice(cmds[1]);
                }
                else {
                    fprintf(stderr,"setservice: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "setservice: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="setstartdate") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==1) {
                    Setstartdate(QDate());
                }
                else {
                    if(cmds.size()==2) {
                        QDate date=QDate::fromString(cmds[1],Qt::ISODate);
                        if(date.isValid()) {
                            Setstartdate(date);
                        }
                        else {
                            fprintf(stderr,"setstartdate: invalid date format\n");
                        }
                    }
                    else {
                        fprintf(stderr,"setstartdate: invalid command arguments\n");
                    }
                }
            }
            else {
                fprintf(stderr,
                        "setstartdate: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="settime") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()>=3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        RDLogLine::TimeType ttype=RDLogLine::NoTime;
                        if(cmds[2].lower()=="hard") {
                            ttype=RDLogLine::Hard;
                        }
                        if(cmds[2].lower()=="none") {
                            ttype=RDLogLine::Relative;
                        }
                        switch(ttype) {
                        case RDLogLine::Hard:
                            if(cmds.size()>=4) {
                                time=RDGetWebTime(cmds[3],&ok);
                                if(ok) {
                                    Settime(line,ttype,time);
                                }
                                else {
                                    fprintf(stderr,"settime: invalid time value\n");
                                }
                            }
                            else {
                                fprintf(stderr,"settime: missing time value\n");
                            }
                            break;

                        case RDLogLine::Relative:
                            Settime(line,ttype);
                            break;

                        case RDLogLine::NoTime:
                            fprintf(stderr,"settime: invalid time type\n");
                            break;
                        }
                    }
                    else {
                        fprintf(stderr,"settime: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"settime: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "settime: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="settrans") {
            if(rda->user()->arrangeLog()) {
                if(cmds.size()==3) {
                    line=cmds[1].toInt(&ok);
                    if(ok&&(line>=0)&&(line<edit_log_event->size())) {
                        RDLogLine::TransType trans=RDLogLine::NoTrans;
                        if(cmds[2].lower()=="play") {
                            trans=RDLogLine::Play;
                        }
                        if(cmds[2].lower()=="segue") {
                            trans=RDLogLine::Segue;
                        }
                        if(cmds[2].lower()=="stop") {
                            trans=RDLogLine::Stop;
                        }
                        if(trans!=RDLogLine::NoTrans) {
                            Settrans(line,trans);
                        }
                        else {
                            fprintf(stderr,"settrans: invalid transition type\n");
                        }
                    }
                    else {
                        fprintf(stderr,"settrans: invalid line number\n");
                    }
                }
                else {
                    fprintf(stderr,"settrans: invalid command arguments\n");
                }
            }
            else {
                fprintf(stderr,
                        "settrans: insufficient privileges [Rearrange Log Items]\n");
            }
            processed=true;
        }

        if(verb=="unload") {
            if(overwrite) {
                Unload();
            }
            else {
                OverwriteError("unload");
            }
            processed=true;
        }
    }
    else {
        fprintf(stderr,"%s: no log loaded\n",(const char *)verb);
        processed=true;
    }

    if(!processed) {
        fprintf(stderr,"invalid command\n");
    }
    PrintPrompt();
}
void main()  {

/*	
	int listsize = 9;    
	Node *Array = new Node[9];
	
	Array[0].key = 97;
	Array[1].key = 53;
	Array[2].key = 88;
	Array[3].key = 59;
	Array[4].key = 26;
	Array[5].key = 41;
	Array[6].key = 88;
	Array[7].key = 31;
	Array[8].key = 22;

	cout << "排序前:" << endl;
	Print<Node>(Array, listsize);
	RadixSort<Node>(Array, listsize, DStep, radix);
	cout << "排序后:" << endl;
	Print<Node>(Array, listsize);
*/	

	int input = -1;	   // 排序类型: -1 --不增(逆序) ; +1 - 不降(正序); 0 -- 随机

	Randomize();
 
	int listsize = 1000;
	Node *Array = new Node[ARRAYSIZE]; 

  /*
  // 也可以采用下列命令行的形式
  // <sortname> [+/-] <size_of_test> <threshold>
  //        -1 --不增 ; +1 - 不降; 无参数 --  0 随机
  // <size_of_test> 测试数据规模
  // <threshold> 快速排序、归并排序等某些需要阈值的排序

  int currarg;
  if ((argc < 2) || (argc > 4)) {
    cout << "Usage: <sortname> [+/-] <size> [<threshold>]\n";
    exit(-1);
  }
  currarg = 1;
  if (argv[currarg][0] == '-') {
    input = -1;
    currarg++;
  }
  else if (argv[currarg][0] == '+') {
    input = 1;
    currarg++;
  }
  listsize = atoi(argv[currarg++]);
  if (argc > currarg)
    THRESHOLD = atoi(argv[currarg]);
  if ((listsize > ARRAYSIZE) || (listsize < 0)) {
    cout << "Selected list size is too big\n";
    exit(-1);
  }
  cout << "Input: " << input << ", size: " << listsize << ", threshold: "
       << THRESHOLD << "\n";
  */

	int i, j;
	int k = ARRAYSIZE / listsize;

	if (input == -1)  {
		for (i=0; i<k; i++)							// 逆序
			for (j=0; j<listsize; j++)
				Array[i*listsize + j].key = listsize - j;
		}
	else if (input == 0)
		for (i=0; i<ARRAYSIZE; i++)
			Array[i].key = Random(32003);				// 随机
			// Array[i].key = Random(1000000);			// <1M的20位整数,随机	
		else {											// 正序
		for (i=0; i<k; i++)	 
			for (j=0; j<listsize; j++)
				Array[i*listsize + j].key = j;
		}

	Settime();
	for (i=0; i<ARRAYSIZE; i+=listsize)  {
//		cout << "排序前:" << endl;
//		PrintArray<Node>(&Array[i], i);
		RadixSort<Node>(&Array[i], listsize, DStep, radix);
//		cout << "排序后:" << endl;
//		PrintAddr<Node>(&Array[i], listsize);
	}

	cout << "Sort with list size " << listsize
	   << ", Array size " << ARRAYSIZE << " : " 
       << Gettime()/k << " seconds\n";

}