Exemple #1
0
int main(int argc, char **argv)
{
	QCoreApplication a(argc, argv);

	GetOpt opts;
	QString alphabet;
	QString inputFilename;
	QString outputFilename;
	opts.addOption('f', "input", &inputFilename);
	opts.addOption('o', "output", &outputFilename);
	opts.addOption('a', "alphabet", &alphabet);
	if (!opts.parse())
		return 1;

	if (alphabet.isNull())
		alphabet = "english";

	if (inputFilename.isNull())
		inputFilename = "gaddaginput.raw";

	if (outputFilename.isNull())
		outputFilename = "output.gaddag";

	QString alphabetFile = QString("../data/alphabets/%1.quackle_alphabet").arg(alphabet);
	UVcout << "Using alphabet file: " << QuackleIO::Util::qstringToString(alphabetFile) << endl;
	GaddagFactory factory(QuackleIO::Util::qstringToString(alphabetFile));

	QFile file(inputFilename);
	if (!file.exists())
	{
		UVcout << "Input gaddag does not exist: " << QuackleIO::Util::qstringToString(inputFilename) << endl;
		return false;
	}

	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		UVcout << "Could not open " << QuackleIO::Util::qstringToString(inputFilename) << endl;
		return false;
	}

	QTextStream stream(&file);
	stream.setCodec(QTextCodec::codecForName("UTF-8"));

	while (!stream.atEnd())
	{
		QString originalQString;
        stream >> originalQString;

		if (stream.atEnd())
			break;

		if (!factory.pushWord(QuackleIO::Util::qstringToString(originalQString)))
			UVcout << "not encodable without leftover: " << QuackleIO::Util::qstringToString(originalQString) << endl;
	}
	
	UVcout << "Sorting " << factory.wordCount() << " words..." << endl;
	factory.sortWords();

	UVcout << "Generating nodes...";
	factory.generate();

	UVcout << "Writing index...";
	factory.writeIndex(outputFilename.toUtf8().constData());

	UVcout << endl;

	UVcout << "Wrote " << factory.encodableWords() << " words over " << factory.nodeCount() << " nodes to " << QuackleIO::Util::qstringToString(outputFilename) << "." << endl;

	UVcout << "Hash: " << QString(QByteArray(factory.hashBytes(), 16).toHex()).toStdString() << endl;

	if (factory.unencodableWords() > 0)
		UVcout << "There were " << factory.unencodableWords() << " words left out." << endl;

	return 0;
}
Exemple #2
0
void setupOptionsCpp(GetOpt& gopt)
{
    gopt.addString(0, "cpp-hpath",    ".",      "Location for .hpp files");
    gopt.addString(0, "cpp-include",   "",       "Generated #include lines reference this folder");
}
Exemple #3
0
int main(int argc, char *argv[])
{
  Ensemble ensemble;

  // Note that ensemble is internally converted to pointer-type
  SyncFiles syncFiles(ensemble);

  std::string noteOpts;
//  Annotation *notes=0;

  std::string annotText;
  std::string outputText;

  std::string path;

  if( argc == 1 )
  {
    syncFiles.description();
    return 3;
  }

  GetOpt opt;
  opt.opterr=0;
  int copt;
  std::string str;
  std::string str0;
  std::string oStr("Ad:Ehl:mMP:p:St:T");
  oStr += "<--only-marked>";
  oStr += "<--help>";
  oStr += "<--line-feed>:";
  oStr += "<--note>:";

  while( (copt = opt.getopt(argc, argv, oStr.c_str() )) != -1 )
  {
    if( opt.longOption > 0 )
    {
      str0=opt.longOption;

      if( str0 == "--help" )
      {
        syncFiles.description();
        return 3;
      }

      if( str0 == "--line-feed" )
      {
        syncFiles.enableNewLine(opt.optarg);
        continue;
      }

      if( str0 == "--note" )
      {
        noteOpts=opt.optarg;
        continue;
      }

      if( str0 == "--only-marked" )
      {
        syncFiles.isPrintOnlyMarked=true;
        continue;
      }
    }

    switch ( copt )
    {
      case 'A':
        //obsolete
        break;
      case 'd':
        {
        str0=opt.optarg;
        std::string str("_");
        size_t p=0;

        if( (p=str0.find('/')) < std::string::npos )
          str = str0.replace(p, 0, "_") ; // is a range
        else if( (p=str0.find('-')) <  std::string::npos )
          str = str0.replace(p, 0, "_") ; // is a range
        else if( hdhC::isNumber(str0) )
          str += str0 ;  // end time
        else
          return 3;

        syncFiles.setTimeLimit(str) ;
        }
        break;
      case 'E':
        syncFiles.enablePrintEnsemble();
        break;
      case 'h':
        syncFiles.description();
        return 3;
        break;
      case 'l':
        syncFiles.setTimeLimit(opt.optarg);
        break;
      case 'm':
        syncFiles.enableMixingRefused();
        break;
      case 'M':
        syncFiles.enableModificationTimeTest();
        break;
      case 'P':
        path = opt.optarg ;
        syncFiles.setPath(path) ;
        break;
      case 'p':
        syncFiles.setQA_target(opt.optarg) ;
        break;
      case 'S':
        // printing date range of each file in output requested
        syncFiles.enablePrintDateRange();
        break;
      case 't':
        {
        str0=opt.optarg;
        std::string str("/");
        size_t p=0;

        if( (p=str0.find('-')) < std::string::npos )
          str = str0.replace(p, 0, "/") ; // is a range
        else if( (p=str0.find('/')) <  std::string::npos )
          str = str0 ;    // is a range separated by '/'
        else if( hdhC::isNumber(str0) )
          str += str0 ;  // end time
        else
          return 3;

        syncFiles.setTimeLimit(str) ;
        }
        break;
      case 'T':
        syncFiles.enablePrintTotalTimeRange() ;
        break;
      default:
        std::ostringstream ostr(std::ios::app);
        ostr << "syncFiles:getopt() unknown option -" ;
        ostr << copt;
        ostr << "\nreturned option -" << copt ;
        std::cout << ostr.str() << std::endl ;
        break;
    }
  }

  // Note= argc counts from 1, but argv[0] == this executable
  if( opt.optind == argc )
    syncFiles.readInput();
  else
    syncFiles.readArgv(opt.optind, argc, argv);

  // this does all
  return syncFiles.run();
}
Exemple #4
0
void
parseOptions(int argc, char *org_argv[], IObjContainer &ioc)
{
  GetOpt opt;
  opt.opterr=0;
  int copt;
  std::string str0("null");
  std::string str1;

//  std::vector<std::string> inputFilename;
  std::vector<std::string> outputFilename;

  // working with std::string is preferred
  std::vector<std::string> argv;

  for( int i=0 ; i < argc ; ++i)
    argv.push_back( org_argv[i] );

  // read options from file?
  readOptions(argv);
  int sz=argv.size();

  // printing is split, so remember
  bool isPrintTest=false;

  // getopt expects char*[].
  char **pargv = new char* [sz+1] ;
  for( int i=0 ; i < sz ; ++i )
    pargv[i] = const_cast<char*>(argv[i].c_str());

  while( (copt = opt.getopt(sz, pargv,
   "f:p:t:v:<--cpu-time><--help><--post><--printTest>")) != -1 )
  {
    if( opt.longOption > 0 )
      str0=opt.longOption;

    if( opt.longOption && str0 == "--help" )
    {
      Base::help();
//      CellStatistics::help();
      FD_interface::help();
      InFile::help();
//      Oper::help();
//      OutFile::help();
      QA::help();
//      TimeControl::help();
      exit(1);
    }

    if( opt.longOption && str0 == "--cpu-time" )
    {
      isCPU_time=true;
      continue;
    }

    if( opt.longOption && str0 == "--post" )
    {
      isPostProc=true;
      continue;
    }

    if( opt.longOption && str0 == "--printTest" )
    {
      isPrintTest=true;
      continue;
    }

    switch ( copt )
    {
      case 'f':
        ::NC_FILENAME = opt.optarg ;
        break;
      case 'p':
        ::NC_PATH = opt.optarg ;
        break;
      case 't':
        ::TABLE_PATH = opt.optarg ;
        break;
      default:
//      description();
        break;
    }
  }

  // Note: pargv are pointers to argv items.
  std::vector<std::string> aargv;
  for( int i=opt.optind ; i < sz ; ++i)
    aargv.push_back( pargv[i] );

  argv = aargv ;

  delete[] pargv ;

  // parse argv for instructions of making objects
  // and their linkage.
  Parse parse(argv);

  std::vector<std::vector<std::string> > linkList
       = parse.getLinkList();

  if( isPrintTest )
    parse.printList();  // exits

  // objects are created
  makeObject(linkList, ioc);

  // apply parameters to objects
  setObjProperties(linkList, ioc);

  linkObj(linkList, ioc);

  scanGdRelation(linkList, ioc);

  return ;
}
Exemple #5
0
int main(int argc, char **argv) {
	QCoreApplication a(argc, argv);

	GetOpt opts;
	QString alphabet;
	opts.addOption('a', "alphabet", &alphabet);
	if (!opts.parse())
		return 1;

	if (alphabet.isNull())
		alphabet = "english";

	Quackle::AlphabetParameters *alphas = 0;
	QString alphabetFile = QString("../data/alphabets/%1.quackle_alphabet").arg(alphabet);
	UVcout << "Using alphabet file: " << QuackleIO::Util::qstringToString(alphabetFile) << endl;
	QuackleIO::FlexibleAlphabetParameters *flexure = new QuackleIO::FlexibleAlphabetParameters;
	flexure->load(alphabetFile);
	alphas = flexure;

	QString leavesFilename = "superleaves.raw";
	QFile file(leavesFilename);
	if (!file.exists())
	{
		UVcout << "leaves file does not exist: " << QuackleIO::Util::qstringToString(leavesFilename) << endl;
		return false;
	}

	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		UVcout << "Could not open " << QuackleIO::Util::qstringToString(leavesFilename) << endl;
		return false;
	}

	QTextStream stream(&file);
	stream.setCodec(QTextCodec::codecForName("UTF-8"));

	ofstream out("encoded");

	int encodableLeaves = 0;
	int unencodableLeaves = 0;

  while (!stream.atEnd()) {
		QString leaveQString;
		stream >> leaveQString;
		double value;
		stream >> value;
		//UVcout << "value: " << value << endl;

		UVString leaveString = QuackleIO::Util::qstringToString(leaveQString);

		if (stream.atEnd())
			break;

		//UVcout << "read original string: " << originalString << endl;
		UVString leftover;
    Quackle::LetterString encodedLeave = alphas->encode(leaveString, &leftover);
		if (leftover.empty())
		{
			unsigned char leavelength = encodedLeave.length();
			out.write((char*)(&leavelength), 1);
			out.write(encodedLeave.begin(), encodedLeave.length());
			unsigned short int intvalue = (value + 128) * 256;
			//UVcout << "intvalue: " << intvalue << endl;
			out.write((char*)(&intvalue), 2);
			++encodableLeaves;
		}
		else
		{
			//UVcout << "not encodable without leftover: " << originalString << endl;
			++unencodableLeaves;
		}
    }

	file.close();
	delete alphas;

	UVcout << "encodable leaves: " << encodableLeaves << ", unencodable leaves: " << unencodableLeaves << endl;

}
Exemple #6
0
int MiniDawgMaker::executeFromArguments()
{
	GetOpt opts;
	QString alphabet;
	opts.addOption('a', "alphabet", &alphabet);
	if (!opts.parse())
		return 1;

	if (alphabet.isNull())
		alphabet = "english";

	Quackle::AlphabetParameters *alphas = 0;
	QString alphabetFile = QString("../data/alphabets/%1.quackle_alphabet").arg(alphabet);
	UVcout << "Using alphabet file: " << QuackleIO::Util::qstringToString(alphabetFile) << endl;
	QuackleIO::FlexibleAlphabetParameters *flexure = new QuackleIO::FlexibleAlphabetParameters;
	flexure->load(alphabetFile);
	alphas = flexure;

    root.t = false;
		root.insmallerdict = false;
		root.playability = 0;
    root.c = QUACKLE_BLANK_MARK;
    root.pointer = 0;
    root.lastchild = true;

	QString smallerDictFilename = "smaller.raw";
	QFile smallerDict(smallerDictFilename);
	if (!smallerDict.exists())
	{
		UVcout << "smaller dictionary does not exist: " << QuackleIO::Util::qstringToString(smallerDictFilename) << endl;
		return false;
	}

	if (!smallerDict.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		UVcout << "Could not open " << QuackleIO::Util::qstringToString(smallerDictFilename) << endl;
		return false;
	}

	QTextStream smallerStream(&smallerDict);
	smallerStream.setCodec(QTextCodec::codecForName("UTF-8"));
	
	while (!smallerStream.atEnd())
	{
		QString originalQString;
		smallerStream >> originalQString;
		//UVcout << "this word is in the smaller dictionary: " << QuackleIO::Util::qstringToString(originalQString) << endl;
		smallerMap[originalQString] = true;
	}

	QString playabilityFilename = "playabilities.raw";
	QFile playability(playabilityFilename);
	if (!playability.exists())
	{
		UVcout << "playability does not exist: " << QuackleIO::Util::qstringToString(playabilityFilename) << endl;
		return false;
	}

	if (!playability.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		UVcout << "Could not open " << QuackleIO::Util::qstringToString(playabilityFilename) << endl;
		return false;
	}

	QTextStream playabilityStream(&playability);
	playabilityStream.setCodec(QTextCodec::codecForName("UTF-8"));
	
	while (!playabilityStream.atEnd())
	{
		int pb;
		playabilityStream >> pb;
		QString originalQString;
		playabilityStream >> originalQString;
		//UVcout << "playability: " << QuackleIO::Util::qstringToString(originalQString) << " " << pb << endl;
		playabilityMap[originalQString] = pb;
	}

	QString dawgFilename = "dawginput.raw";
	QFile file(dawgFilename);
	if (!file.exists())
	{
		UVcout << "dawg does not exist: " << QuackleIO::Util::qstringToString(dawgFilename) << endl;
		return false;
	}

	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		UVcout << "Could not open " << QuackleIO::Util::qstringToString(dawgFilename) << endl;
		return false;
	}

	QTextStream stream(&file);
	stream.setCodec(QTextCodec::codecForName("UTF-8"));

	int encodableWords = 0;
	int unencodableWords = 0;

    while (!stream.atEnd())
	{
		QString originalQString;
    stream >> originalQString;

		bool inSmaller = smallerMap[originalQString];
		int pb = playabilityMap[originalQString];

		if (stream.atEnd())
			break;

		UVString originalString = QuackleIO::Util::qstringToString(originalQString);

		//UVcout << "read original string: " << originalString;
		//if (!inSmaller) UVcout << "#";
		//UVcout << endl;

		UVString leftover;
        Quackle::LetterString encodedWord = alphas->encode(originalString, &leftover);
		if (leftover.empty())
		{
			//for (Quackle::LetterString::iterator it = encodedWord.begin(); it != encodedWord.end(); ++it)
				//UVcout << "got encoded letter: " << (int)(*it) << endl;

			root.pushword(encodedWord, inSmaller, pb);
			++encodableWords;
		}
		else
		{
			UVcout << "not encodable without leftover: " << originalString << endl;
			++unencodableWords;
		}
    }

	file.close();
	delete alphas;

	UVcout << "encodable words: " << encodableWords << ", unencodable words: " << unencodableWords << endl;

    nodelist.push_back(&root);
    root.print("");    
	UVcout << "nodelist.size(): " << nodelist.size() << endl;

	minimize();

	ofstream out("output.dawg", ios::out | ios::binary);

    for (unsigned int i = 0; i < nodelist.size(); i++) {
        //cout << nodelist[i]->c << " " << nodelist[i]->pointer << " " << nodelist[i]->t << " " << nodelist[i]->lastchild << endl;
		Node* n = nodelist[i];
		unsigned int p;
		if (nodelist[i]->deleted)
		{
			p = (unsigned int)(nodelist[i]->cloneof->pointer);
			// n = nodelist[i]->cloneof;
		}
		else
			p = (unsigned int)(nodelist[i]->pointer);
        
        char bytes[7];
        unsigned char n1 = (p & 0x00FF0000) >> 16;
        unsigned char n2 = (p & 0x0000FF00) >>  8;
        unsigned char n3 = (p & 0x000000FF);
        unsigned char n4 = n->c - QUACKLE_FIRST_LETTER;
				
				unsigned int pb = n->playability;
				unsigned char n5 = (pb & 0x00FF0000) >> 16;
				unsigned char n6 = (pb & 0x0000FF00) >>  8;
				unsigned char n7 = (pb & 0x000000FF);

        if (n->t) {
            n4 |= 32;
        }
        if (n->lastchild) {
            n4 |= 64;
        }
				if (n->insmallerdict) {
						n4 |= 128;
				}

        bytes[0] = n1; bytes[1] = n2; bytes[2] = n3; bytes[3] = n4;
				bytes[4] = n5; bytes[5] = n6; bytes[6] = n7;
        out.write(bytes, 7);
    }
}