⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sofs_02.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/io/SofSymbolTable/sofs_02.cc// version: $Id: sofs_02.cc,v 1.3 2000/10/03 13:05:25 picone Exp $//// isip include files//#include "SofSymbolTable.h"#include <Console.h>// method: diagnose//// arguments://  Integral::DEBUG level: (input) debug level for diagnostics//// return: a boolean value indicating status//boolean SofSymbolTable::diagnose(Integral::DEBUG level_a) {  //---------------------------------------------------------------------------  //  // 0. preliminaries  //  //---------------------------------------------------------------------------  // output the class name  //  if (level_a > Integral::NONE) {    SysString output(L"diagnosing class ");    output.concat(CLASS_NAME);    output.concat(L": ");    Console::put(output);    Console::increaseIndention();  }    //--------------------------------------------------------------------------  //  // 1. required public methods  //  //--------------------------------------------------------------------------    // set indentation  //  if (level_a > Integral::NONE) {    Console::put(L"testing required public methods...\n");    Console::increaseIndention();  }  // test default constructor  //  SofSymbolTable table_0;    // add some symbols to the table  //  SysString sym(L"Long");  for (long i = 0; i < 1; i++) {    table_0.add(sym);  }    // test the copy constructor and copy assign method  //  SofSymbolTable table_1(table_0);  // test the debug methods  //  table_1.setDebug(Integral::NONE);    if (level_a > Integral::BRIEF) {    table_1.debug(L"debug");  }  // test clear methods  //  table_1.clear();  if (table_1.getCount() != 0) {    return Error::handle(name(), L"clear", Error::TEST, __FILE__, __LINE__);  }     // reset indentation  //  if (level_a > Integral::NONE) {    Console::decreaseIndention();  }    //--------------------------------------------------------------------------  //  // 2. class-specific public methods:  //     extensions to required public methods  //  //--------------------------------------------------------------------------  // set indentation  //  if (level_a > Integral::NONE) {    Console::put(L"testing class-specific public methods: extensions to required methods...\n");    Console::increaseIndention();  }  // test assignCompact method  //  SofSymbolTable table_2;  table_2.assignCompact(table_0);    // get the memsize  //  long mem_size = table_2.memSize();    if (level_a > Integral::BRIEF) {    SysString numeric;    numeric.assign(mem_size);    SysString output(L"memSize of table_2: ");    output.concat(numeric);    Console::put(output);  }      // reset indentation  //  if (level_a > Integral::NONE) {    Console::decreaseIndention();  }    //--------------------------------------------------------------------------  //  // 3. class-specific public methods:  //     symbol table manipulation methods  //  //--------------------------------------------------------------------------  // set indentation  //  if (level_a > Integral::NONE) {    Console::put(L"testing class-specific public methods: table manipulation methods...\n");    Console::increaseIndention();  }    SofSymbolTable table0;  SofSymbolTable table1;  SofSymbolTable table2;    // start adding to the table  //  SysString n1(L"Long");  SysString n2(L"Short");  SysString n3(L"Float");  SysString n4(L"Long");  SysString n5(L"Char");  SysString n6(L"Decoder");  // add symbols  //  table0.add(n1);  table0.add(n2);  table0.add(n3);  table0.add(n4);  table0.add(n2);  table0.add(n5);  table0.add(n6);  table0.add(n1);  // check the counts  //  SysString symbol;  if (!table0.getSymbol(symbol, 0) || symbol.ne(n1)) {    symbol.debug(L"symbol");    return Error::handle(name(), L"add/getSymbol", Error::TEST, __FILE__,			 __LINE__);  }   if (!table0.getSymbol(symbol, 1) || symbol.ne(n2)) {    return Error::handle(name(), L"add/getSymbol", Error::TEST, __FILE__,			 __LINE__);  }    if (table0.getCount() != 5) {    return Error::handle(name(), L"add/getCount", Error::TEST, __FILE__,			 __LINE__);  }    // test getIndex  //  long ind = table0.getIndex(n1);    if (ind == SofSymbolTable::NO_SYMB) {    return Error::handle(name(), L"getIndex", Error::TEST, __FILE__, __LINE__);  }    // n1 and n4 are the same symbol "Long", their indices should be the same  //  if (table0.getIndex(n4) != ind) {    return Error::handle(name(), L"getIndex", Error::TEST, __FILE__, __LINE__);  }  // test remove methods  //  table0.remove(n1);  table0.remove(n5);  if (level_a > Integral::BRIEF) {    table0.debug(L"table0 after remove");  }   // check the counts  //  if (table0.getRefCount(n1) != 2) {    return Error::handle(name(), L"remove/getCount", Error::TEST,			 __FILE__, __LINE__);  }    if (table0.getRefCount(n3) != 1) {    return Error::handle(name(), L"remove/getCount", Error::TEST,			 __FILE__, __LINE__);  }    if (table0.getRefCount(n5) != 0) {    return Error::handle(name(), L"remove/getCount", Error::TEST,			 __FILE__, __LINE__);  }      if (table0.getCount() != 4) {    return Error::handle(name(), L"getCount", Error::TEST, __FILE__, __LINE__);  }  // test manual add method  //  table1.clear();      table1.add(6, 3, n5);    if (table1.getCount() != 1) {    return Error::handle(name(), L"manual add", Error::TEST, __FILE__,			 __LINE__);  }  table1.clear();  // test checking methods  //  SysString bad_name(L"oscar had");  if (table0.checkName(bad_name)) {    return Error::handle(name(), L"checkName", Error::TEST,			 __FILE__, __LINE__);  }    if (!table0.isEfficient() && level_a > Integral::BRIEF) {    Console::put(L"table0 not efficient");  }    // let's try to push out the length of the index greatly so  // growIndex will be used.  //  if (level_a > Integral::BRIEF) {    Console::put(L"testing larger table...");  }      SysString numeric;    // insert 300 unique names  //  for (long i = 0; i < 300; i++) {    numeric.assign((long)i);    numeric.insert(L"test", 0);    table2.add(numeric);  }  // let's check a few entries (random choices)  //  numeric.assign(L"test5");  if (table2.getIndex(numeric) != 5) {    return Error::handle(name(), L"growCapacity", Error::TEST, __FILE__,			 __LINE__);  }    // out of the first group  //  numeric.assign(L"test25");  if (table2.getIndex(numeric) != 25) {    return Error::handle(name(), L"growCapacity", Error::TEST, __FILE__,			 __LINE__);  }    // out of the second group  //  numeric.assign(L"test270");  if (table2.getIndex(numeric) != 270) {    return Error::handle(name(), L"growCapacity", Error::TEST, __FILE__,			 __LINE__);  }    // reset indentation  //  if (level_a > Integral::NONE) {    Console::decreaseIndention();  }    //---------------------------------------------------------------------------  //  // 3. class-specific public methods:  //     symbol table conversion methods  //  //---------------------------------------------------------------------------    // set indentation  //  if (level_a > Integral::NONE) {    Console::put(L"testing class-specific public methods: table conversion methods...\n");    Console::increaseIndention();  }    SofSymbolTable old_table;  SofSymbolTable new_table;  SysString those(L"those");  SysString that(L"that");  SysString these(L"these");  // add them into two tables in different order  //   old_table.add(those);  old_table.add(these);  old_table.add(those);  old_table.add(that);           // [those 2] [these 1 ] [that 1]    new_table.add(that);  new_table.add(these);  new_table.add(those);  new_table.add(that);          // [that 2 ] [these 1] [those 1]  // test convert method   //  long old_ind = old_table.getIndex(those);  long new_ind = new_table.getIndex(those);  if (new_ind != new_table.convert(old_table, old_ind)) {    return Error::handle(name(), L"convert", Error::TEST, __FILE__,			 __LINE__);  }  // generate the transform vector  //  new_table.transformInit(old_table);  // call the other convert method  //  if (new_ind != new_table.convert(old_ind)) {    return Error::handle(name(), L"convert", Error::TEST, __FILE__,			 __LINE__);  }  new_table.transformDelete();      // reset indentation  //  if (level_a > Integral::NONE) {    Console::decreaseIndention();  }    //---------------------------------------------------------------------------  //  // 4. print completion message  //  //---------------------------------------------------------------------------    // reset indentation  //  if (level_a > Integral::NONE) {    Console::decreaseIndention();  }    if (level_a > Integral::NONE) {    SysString output(L"diagnostics passed for class ");    output.concat(name());    output.concat(L"\n");    Console::put(output);  }    // exit gracefully  //  return true;    // exit gracefully  //  return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -