* Changed qsorec data store to an arrary of string pointers
    vice an array of strings.
    - new mxe implementation string handler changes from standard
      gnu string template
pull/4/head
David Freese 2015-08-31 21:29:53 -05:00
rodzic 2df24b8f68
commit d4b6308ab9
2 zmienionych plików z 41 dodań i 37 usunięć

Wyświetl plik

@ -45,7 +45,7 @@ friend std::ostream &operator<<( std::ostream &, const cQsoRec &);
friend std::istream &operator>>( std::istream &, cQsoRec & );
private:
string qsofield[NUMFIELDS];
string *qsofield[NUMFIELDS];
//bool normal; // sort ordering
public:
cQsoRec ();

Wyświetl plik

@ -42,16 +42,20 @@ static bool date_off = true;
bool cQsoDb::reverse = false;
cQsoRec::cQsoRec() {
for (int i=0;i < NUMFIELDS; i++)
qsofield[i] = "";
for (int i=0;i < NUMFIELDS; i++) {
qsofield[i] = new string;
qsofield[i]->clear();
}
}
cQsoRec::~cQsoRec () {
for (int i = 0; i < NUMFIELDS; i++)
delete qsofield[i];
}
void cQsoRec::clearRec () {
for (int i = 0; i < NUMFIELDS; i++)
qsofield[i].clear();
qsofield[i]->clear();
}
int cQsoRec::validRec() {
@ -59,27 +63,27 @@ int cQsoRec::validRec() {
}
void cQsoRec::checkBand() {
size_t flen = qsofield[FREQ].length(), blen = qsofield[BAND].length();
size_t flen = qsofield[FREQ]->length(), blen = qsofield[BAND]->length();
if (flen == 0 && blen != 0) {
for (size_t n = 0; n < blen; n++)
qsofield[BAND][n] = tolower(qsofield[BAND][n]);
qsofield[FREQ] = band_freq(qsofield[BAND].c_str());
(*qsofield[BAND])[n] = tolower((*qsofield[BAND])[n]);
*qsofield[FREQ] = band_freq((*qsofield[BAND]).c_str());
} else if (blen == 0 && flen != 0)
qsofield[BAND] = band_name(qsofield[FREQ].c_str());
*qsofield[BAND] = band_name((*qsofield[FREQ]).c_str());
}
void cQsoRec::checkDateTimes() {
size_t len1 = qsofield[TIME_ON].length(), len2 = qsofield[TIME_OFF].length();
size_t len1 = qsofield[TIME_ON]->length(), len2 = qsofield[TIME_OFF]->length();
if (len1 == 0 && len2 != 0)
qsofield[TIME_ON] = qsofield[TIME_OFF];
*qsofield[TIME_ON] = *qsofield[TIME_OFF];
else if (len1 != 0 && len2 == 0)
qsofield[TIME_OFF] = qsofield[TIME_ON];
len1 = qsofield[QSO_DATE].length();
len2 = qsofield[QSO_DATE_OFF].length();
*qsofield[TIME_OFF] = *qsofield[TIME_ON];
len1 = qsofield[QSO_DATE]->length();
len2 = qsofield[QSO_DATE_OFF]->length();
if (len1 == 0 && len2 != 0)
qsofield[QSO_DATE] = qsofield[QSO_DATE_OFF];
*qsofield[QSO_DATE] = *qsofield[QSO_DATE_OFF];
else if (len1 != 0 && len2 == 0)
qsofield[QSO_DATE_OFF] = qsofield[QSO_DATE];
*qsofield[QSO_DATE_OFF] = *qsofield[QSO_DATE];
}
// Sets the current time, with the right format.
@ -122,24 +126,24 @@ void cQsoRec::setFrequency(long long freq) {
void cQsoRec::putField (int n, const char *s){
if (n < 0 || n >= NUMFIELDS) return;
qsofield[n] = s;
qsofield[n]->assign(s);// = s;
}
void cQsoRec::putField (int n, const char *s, int len) {
if (n < 0 || n >= NUMFIELDS) return;
qsofield[n].assign(s, len);
qsofield[n]->assign(s, len);
}
void cQsoRec::addtoField (int n, const char *s){
if (n < 0 || n >= NUMFIELDS) return;
qsofield[n].append(s);
qsofield[n]->append(s);
}
void cQsoRec::trimFields () {
size_t p;
string s;
for (int i = 0; i < NUMFIELDS; i++) {
s = qsofield[i];
s = *qsofield[i];
//right trim string
p = s.length();
while (p && s[p-1] == ' ') {
@ -157,7 +161,7 @@ void cQsoRec::trimFields () {
for (p = 0; p < s.length(); p++)
s[p] = toupper(s[p]);
}
qsofield[i] = s;
*qsofield[i] = s;
}
}
@ -165,33 +169,33 @@ static const char *empty_field = "";
const char * cQsoRec::getField (int n) const {
if (n < 0 || n >= NUMFIELDS) return empty_field;
return (qsofield[n].c_str());
return (qsofield[n]->c_str());
}
const cQsoRec &cQsoRec::operator=(const cQsoRec &right) {
if (this != &right) {
for (int i = 0; i < NUMFIELDS; i++)
this->qsofield[i] = right.qsofield[i];
(this->qsofield[i])->assign(*(right.qsofield[i]));
}
return *this;
}
int compareTimes (const cQsoRec &r1, const cQsoRec &r2) {
if (date_off)
return r1.qsofield[TIME_OFF].compare( r2.qsofield[TIME_OFF] );
return r1.qsofield[TIME_ON].compare( r2.qsofield[TIME_ON] );
return (*r1.qsofield[TIME_OFF]).compare( (*r2.qsofield[TIME_OFF]) );
return (*r1.qsofield[TIME_ON]).compare( (*r2.qsofield[TIME_ON]) );
}
int compareDates (const cQsoRec &r1, const cQsoRec &r2) {
if (date_off)
return r1.qsofield[QSO_DATE_OFF].compare( r2.qsofield[QSO_DATE_OFF] );
return r1.qsofield[QSO_DATE].compare( r2.qsofield[QSO_DATE] );
return (*r1.qsofield[QSO_DATE_OFF]).compare( (*r2.qsofield[QSO_DATE_OFF]) );
return (*r1.qsofield[QSO_DATE]).compare( (*r2.qsofield[QSO_DATE]) );
}
int compareCalls (const cQsoRec &r1, const cQsoRec &r2) {
int cmp = 0;
const char * s1 = r1.qsofield[CALL].c_str();
const char * s2 = r2.qsofield[CALL].c_str();
const char * s1 = (*r1.qsofield[CALL]).c_str();
const char * s2 = (*r2.qsofield[CALL]).c_str();
const char * p1 = strpbrk (s1+1, "0123456789");
const char * p2 = strpbrk (s2+1, "0123456789");
@ -208,13 +212,13 @@ int compareCalls (const cQsoRec &r1, const cQsoRec &r2) {
}
int compareModes (const cQsoRec &r1, const cQsoRec &r2) {
return r1.qsofield[MODE].compare( r2.qsofield[MODE] );
return (r1.qsofield[MODE])->compare( *r2.qsofield[MODE] );
}
int compareFreqs (const cQsoRec &r1, const cQsoRec &r2) {
double f1, f2;
f1 = atof(r1.qsofield[FREQ].c_str());
f2 = atof(r2.qsofield[FREQ].c_str());
f1 = atof(r1.qsofield[FREQ]->c_str());
f2 = atof(r2.qsofield[FREQ]->c_str());
return (f1 == f2 ? 0 : f1 < f2 ? -1 : 1);
}
@ -280,7 +284,7 @@ static bool isVer3 = false;
ostream &operator<< (ostream &output, const cQsoRec &rec) {
for (int i = 0; i < EXPORT; i++)
output << rec.qsofield[i].c_str() << delim_out;
output << rec.qsofield[i]->c_str() << delim_out;
return output;
}
@ -288,7 +292,7 @@ istream &operator>> (istream &input, cQsoRec &rec ) {
static char buf[1024]; // Must be big enough for a field.
for (int i = 0; i < NUMFIELDS; i++) {
input.getline( buf, sizeof(buf), delim_in );
rec.qsofield[i] = buf ;
*rec.qsofield[i] = buf ;
}
return input;
}
@ -389,22 +393,22 @@ void cQsoDb::qsoUpdRec (int rnbr, cQsoRec *updrec) {
void cQsoDb::SortByDate (bool how) {
date_off = how;
compby = COMPDATE;
// qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
}
void cQsoDb::SortByCall () {
compby = COMPCALL;
// qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
}
void cQsoDb::SortByMode () {
compby = COMPMODE;
// qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
}
void cQsoDb::SortByFreq () {
compby = COMPFREQ;
// qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
qsort (qsorec, nbrrecs, sizeof (cQsoRec), compareqsos);
}
bool cQsoDb::qsoIsValidFile(const char *fname) {