FieldList operator&(const FieldList & one, const FieldList & two) { if( one.size() == two.size() ) { bool same = true; foreach( Field * f, one ) if( !two.contains(f) ) { same = false; break; } if( same ) return one; }
// Optmized to not copy(because of implicit sharing) if one already contains all of two FieldList operator|(const FieldList & one, const FieldList & two) { bool firstComplete = two.size() <= one.size(); FieldList ret; foreach( Field * f, two ) if( !one.contains(f) ) { if( firstComplete ) { firstComplete = false; ret = one; } ret += f; } return firstComplete ? one : ret; }
void be_structure::put_core_fields ( ostream & os, be_Tab & tab, const DDS_StdString & sptr, FieldList & coreFields, unsigned long uid ) { DDS::Boolean wroteOne = FALSE; DDS_StdString uids = BE_Globals::ulong_to_string(uid); DDS_StdString _in_ = (DDS_StdString)"_in_" + uids; FieldList::iterator it; // first, let's declare the core args for putting for (it = coreFields.begin(); it != coreFields.end(); it++) { (*it)->declare_for_struct_put (os, tab, sptr, uid); } // // now, let's initilize our put args // os << tab << "DDS::Codec::Param " << _in_ << "[" << coreFields.size() << "] =" << nl; os << tab << "{" << nl; tab.indent (); for (it = coreFields.begin(); it != coreFields.end(); it++) { if (wroteOne) { os << "," << nl; } (*it)->make_put_param (os, tab, sptr, uid); wroteOne = TRUE; } tab.outdent (); os << nl << tab << "};" << nl; // and finally, let's put 'em os << tab << "os.put (" << _in_ << ", " << coreFields.size () << XBE_Ev::arg (XBE_ENV_VARN) << ");" << nl; }
void Architecture::replaceRegSets(FieldList& fl) { for (size_t i = 0; i < fl.size(); ++i) { auto name = currentArch->regSymbolMap.find(fl.getField(i)); if (name != currentArch->regSymbolMap.end()) { fl.setField(i, name->second); } } }
void be_exception::getter ( ostream & os, be_Tab & tab, const DDS_StdString & sptr, unsigned long uid ) { DDS_StdString uids = BE_Globals::ulong_to_string(uid); if (m_marshalInCore) { get_core_fields(os, tab, sptr, m_fields, uid); } else { FieldList coreFields; FieldList::iterator it; for (it = m_fields.begin(); it != m_fields.end(); it++) { if ((*it)->is_core_marshaled()) { coreFields.push_back(*it); } else { if (coreFields.size()) { get_core_fields(os, tab, sptr, coreFields, uid++); coreFields.erase(); } (*it)->get_for_struct(os, tab, sptr, uid++); } } if (coreFields.size()) { get_core_fields(os, tab, sptr, coreFields, uid++); coreFields.erase(); } } }
static void SumRow( vector <double> & sums, const CSVRow & row, const FieldList & fl ) { for ( unsigned int i = 0; i < fl.size(); i++ ) { unsigned int fi = fl.at(i); if ( fi >= row.size() ) { CSVTHROW( "Invalid field index" ); } sums.at(i) += ALib::ToReal( row.at(fi) ); } }
FieldList ValidateCommand :: ReadFields( const string & line, unsigned int & pos ) const { SkipSpaces( line, pos ); FieldList fl; if ( pos < line.size() && line[pos] == '*' ) { pos++; return fl; } string sf; while( pos < line.size() && ! isspace( line[pos] ) ) { sf += line[pos++]; } pos++; vector <string> tmp; ALib::Split( sf, ',', tmp ); for ( unsigned int i = 0; i < tmp.size(); i++ ) { if ( ALib::IsInteger( tmp[i] ) ) { int n = ALib::ToInteger( tmp[i] ); if ( n > 0 ) { fl.push_back ( n - 1 ); continue; } } CSVTHROW( "Invalid field list: " << sf ); } if ( fl.size() == 0 ) { CSVTHROW( "Need at least one field in rule: " << line ); } return fl; }
bool DatabaseUtils::GetDatabaseResults(const MediaType &mediaType, const FieldList &fields, const std::unique_ptr<dbiplus::Dataset> &dataset, DatabaseResults &results) { if (dataset->num_rows() == 0) return true; const dbiplus::result_set &resultSet = dataset->get_result_set(); unsigned int offset = results.size(); if (fields.empty()) { DatabaseResult result; for (unsigned int index = 0; index < resultSet.records.size(); index++) { result[FieldRow] = index + offset; results.push_back(result); } return true; } if (resultSet.record_header.size() < fields.size()) return false; std::vector<int> fieldIndexLookup; fieldIndexLookup.reserve(fields.size()); for (FieldList::const_iterator it = fields.begin(); it != fields.end(); ++it) fieldIndexLookup.push_back(GetFieldIndex(*it, mediaType)); results.reserve(resultSet.records.size() + offset); for (unsigned int index = 0; index < resultSet.records.size(); index++) { DatabaseResult result; result[FieldRow] = index + offset; unsigned int lookupIndex = 0; for (FieldList::const_iterator it = fields.begin(); it != fields.end(); ++it) { int fieldIndex = fieldIndexLookup[lookupIndex++]; if (fieldIndex < 0) return false; std::pair<Field, CVariant> value; value.first = *it; if (!GetFieldValue(resultSet.records[index]->at(fieldIndex), value.second)) CLog::Log(LOGWARNING, "GetDatabaseResults: unable to retrieve value of field %s", resultSet.record_header[fieldIndex].name.c_str()); if (value.first == FieldYear && (mediaType == MediaTypeTvShow || mediaType == MediaTypeEpisode)) { CDateTime dateTime; dateTime.SetFromDBDate(value.second.asString()); if (dateTime.IsValid()) { value.second.clear(); value.second = dateTime.GetYear(); } } result.insert(value); } result[FieldMediaType] = mediaType; if (mediaType == MediaTypeMovie || mediaType == MediaTypeVideoCollection || mediaType == MediaTypeTvShow || mediaType == MediaTypeMusicVideo) result[FieldLabel] = result.at(FieldTitle).asString(); else if (mediaType == MediaTypeEpisode) { std::ostringstream label; label << (int)(result.at(FieldSeason).asInteger() * 100 + result.at(FieldEpisodeNumber).asInteger()); label << ". "; label << result.at(FieldTitle).asString(); result[FieldLabel] = label.str(); } else if (mediaType == MediaTypeAlbum) result[FieldLabel] = result.at(FieldAlbum).asString(); else if (mediaType == MediaTypeSong) { std::ostringstream label; label << (int)result.at(FieldTrackNumber).asInteger(); label << ". "; label << result.at(FieldTitle).asString(); result[FieldLabel] = label.str(); } else if (mediaType == MediaTypeArtist) result[FieldLabel] = result.at(FieldArtist).asString(); results.push_back(result); } return true; }