libStatGen Software 1
ParameterList Class Reference
Collaboration diagram for ParameterList:

Public Member Functions

 ParameterList (int s=36)
 
void Add (Parameter *p)
 
virtual void Read (int argc, char **argv, int start=1)
 
virtual int ReadWithTrailer (int argc, char **argv, int start=1)
 
virtual void Status ()
 
void Enforce (bool &var, bool value, const char *reason,...)
 
void Enforce (int &var, int value, const char *reason,...)
 
void Enforce (double &var, double value, const char *reason,...)
 
void Enforce (String &var, const char *value, const char *reason,...)
 

Public Attributes

char * string
 
String warnings
 
String messages
 

Protected Member Functions

void MakeString (int argc, char **argv, int start=1)
 
void HandlePhoneHome (int argc, char **argv, int start)
 

Protected Attributes

Parameter ** pl
 
int count
 
int size
 

Detailed Description

Definition at line 296 of file Parameters.h.

Constructor & Destructor Documentation

◆ ParameterList()

ParameterList::ParameterList ( int  s = 36)
inline

Definition at line 309 of file Parameters.h.

310 {
311 size = s;
312 count = 0;
313 pl = new Parameter * [size];
314 string = NULL;
315 }

◆ ~ParameterList()

ParameterList::~ParameterList ( )
virtual

Definition at line 772 of file Parameters.cpp.

773{
774 for (int i = 0; i < count; i++)
775 delete pl[i];
776 delete [] pl;
777 delete [] string;
778};

Member Function Documentation

◆ Add()

void ParameterList::Add ( Parameter p)

Definition at line 594 of file Parameters.cpp.

595{
596 if (count + 1 >= size)
597 error("Parameter list size should be increased");
598
599 p->SetWarningBuffer(warnings);
600 pl[count++] = p;
601};

◆ Enforce() [1/4]

void ParameterList::Enforce ( bool &  var,
bool  value,
const char *  reason,
  ... 
)

Definition at line 824 of file Parameters.cpp.

825{
826 if (var == value)
827 return;
828
829 var = value;
830
831 String buffer;
832
833 va_list ap;
834 va_start(ap, format);
835 buffer.vprintf(format, ap);
836 va_end(ap);
837
838 messages += buffer;
839}

◆ Enforce() [2/4]

void ParameterList::Enforce ( double &  var,
double  value,
const char *  reason,
  ... 
)

Definition at line 858 of file Parameters.cpp.

859{
860 if (var == value)
861 return;
862
863 var = value;
864
865 String buffer;
866
867 va_list ap;
868 va_start(ap, format);
869 buffer.vprintf(format, ap);
870 va_end(ap);
871
872 messages += buffer;
873}

◆ Enforce() [3/4]

void ParameterList::Enforce ( int &  var,
int  value,
const char *  reason,
  ... 
)

Definition at line 841 of file Parameters.cpp.

842{
843 if (var == value)
844 return;
845
846 var = value;
847
848 String buffer;
849
850 va_list ap;
851 va_start(ap, format);
852 buffer.vprintf(format, ap);
853 va_end(ap);
854
855 messages += buffer;
856}

◆ Enforce() [4/4]

void ParameterList::Enforce ( String var,
const char *  value,
const char *  reason,
  ... 
)

Definition at line 875 of file Parameters.cpp.

876{
877 if (var.SlowCompare(value) == 0)
878 return;
879
880 var = value;
881
882 String buffer;
883 va_list ap;
884 va_start(ap, format);
885 buffer.vprintf(format, ap);
886 va_end(ap);
887
888 messages += buffer;
889}

◆ HandlePhoneHome()

void ParameterList::HandlePhoneHome ( int  argc,
char **  argv,
int  start 
)
protected

Definition at line 730 of file Parameters.cpp.

731{
732 // Determine the tool name : args prior to start.
733 String programName = "";
734 for(int i = 0; i < start; i++)
735 {
736 if(i == 0)
737 {
738 programName = argv[i];
739 }
740 else
741 {
742 programName += ":";
743 programName += argv[i];
744 }
745 }
746
747 // Loop through and get the params
748 String params = "";
749 String version = "";
750
751 for (int i=0; i<count; i++)
752 {
753 pl[i]->addParamsToString(params);
754 // Check if phonehome is enabled.
755 if(!pl[i]->myVersion.IsEmpty() && (!pl[i]->myNoPhoneHome))
756 {
757 // Version specified & phoneHome enabled, so
758 // phonehome.
759 version = pl[i]->myVersion;
760 }
761 }
762
763 if(!version.IsEmpty())
764 {
765 PhoneHome::checkVersion(programName.c_str(),
766 version.c_str(),
767 params.c_str());
768 }
769}

◆ MakeString()

void ParameterList::MakeString ( int  argc,
char **  argv,
int  start = 1 
)
protected

Definition at line 712 of file Parameters.cpp.

713{
714 int len = 0;
715
716 for (int i=start; i<argc; i++)
717 len += strlen(argv[i]) + 1;
718
719 string = new char [len+1];
720 string[0] = 0;
721
722 for (int i=start; i<argc; i++)
723 {
724 strcat(string, argv[i]);
725 strcat(string, " ");
726 }
727}

◆ Read()

void ParameterList::Read ( int  argc,
char **  argv,
int  start = 1 
)
virtual

Definition at line 603 of file Parameters.cpp.

604{
605 MakeString(argc, argv, start);
606 for (int i=start; i < argc; i++)
607 {
608 bool success = false;
609
610 if (argv[i][0] == '-' && argv[i][1])
611 for (int j=0; j<count; j++)
612 {
613 success = tolower(argv[i][1]) == pl[j]->ch;
614
615 if (success)
616 {
617 if ((i+1 < argc) && pl[j]->TranslateExtras(argv[i]+2, argv[i+1]))
618 i++;
619 else if (argv[i][2] == 0 && (i+1 < argc) && (argv[i + 1][0] != '-'))
620 pl[j]->Translate(argv[++i]);
621 else
622 pl[j]->Translate(argv[i] + 2);
623
624 break;
625 }
626 }
627
628 if (!success)
629 {
630 String warning;
631
632 warning.printf("Command line parameter %s (#%d) ignored\n", argv[i], i);
633 warnings += warning;
634 }
635 }
636
637 if (warnings.Length())
638 {
639 ::warning("Problems encountered parsing command line:\n\n%s",
640 (const char *) warnings);
641 warnings.Clear();
642 }
643
644 HandlePhoneHome(argc, argv, start);
645}

◆ ReadWithTrailer()

int ParameterList::ReadWithTrailer ( int  argc,
char **  argv,
int  start = 1 
)
virtual

Definition at line 647 of file Parameters.cpp.

648{
649 MakeString(argc, argv, start);
650
651 int last_success = start - 1;
652 bool split = false;
653
654 for (int i=start; i < argc; i++)
655 {
656 bool success = false;
657
658 if (argv[i][0] == '-' && argv[i][1])
659 for (int j=0; j<count; j++)
660 {
661 success = tolower(argv[i][1]) == pl[j]->ch;
662
663 if (success)
664 {
665 if ((i+1 < argc) && pl[j]->TranslateExtras(argv[i]+2, argv[i+1]))
666 split = true;
667 else if (argv[i][2] == 0 && (i+1 < argc) && (argv[i + 1][0] != '-'))
668 pl[j]->Translate(argv[i + 1]), split = true;
669 else
670 pl[j]->Translate(argv[i] + 2);
671 break;
672 }
673 }
674
675 if (success)
676 for (last_success++; last_success < i; last_success++)
677 warnings.printf("Command line parameter %s (#%d) ignored\n",
678 argv[last_success], last_success);
679
680 if (split)
681 {
682 split = false;
683 last_success++;
684 i++;
685 }
686 }
687
688 if (warnings.Length())
689 {
690 ::warning("Problems encountered parsing command line:\n\n%s",
691 (const char *) warnings);
692 warnings.Clear();
693 }
694
695 HandlePhoneHome(argc, argv, start);
696
697 return last_success;
698};

◆ Status()

void ParameterList::Status ( )
virtual

Definition at line 701 of file Parameters.cpp.

702{
703 for (int i=0; i<count; i++)
704 pl[i]->Status();
705
706 fprintf(stderr, "\n");
707
708 if (messages.Length())
709 fprintf(stderr, "NOTES:\n%s\n", (const char *) messages);
710}

Member Data Documentation

◆ count

int ParameterList::count
protected

Definition at line 300 of file Parameters.h.

◆ messages

String ParameterList::messages

Definition at line 333 of file Parameters.h.

◆ pl

Parameter** ParameterList::pl
protected

Definition at line 299 of file Parameters.h.

◆ size

int ParameterList::size
protected

Definition at line 301 of file Parameters.h.

◆ string

char* ParameterList::string

Definition at line 307 of file Parameters.h.

◆ warnings

String ParameterList::warnings

Definition at line 332 of file Parameters.h.


The documentation for this class was generated from the following files: