+static std::vector<std::string> parsePlusMinusOptions(std::string const &Name, /*{{{*/
+ std::map<std::string, std::string> const &Options, std::vector<std::string> const &defaultValues)
+{
+ std::map<std::string, std::string>::const_iterator val = Options.find(Name);
+ std::vector<std::string> Values;
+ if (val != Options.end())
+ Values = VectorizeString(val->second, ',');
+ else
+ Values = defaultValues;
+
+ if ((val = Options.find(Name + "+")) != Options.end())
+ {
+ std::vector<std::string> const plusArch = VectorizeString(val->second, ',');
+ for (std::vector<std::string>::const_iterator plus = plusArch.begin(); plus != plusArch.end(); ++plus)
+ if (std::find(Values.begin(), Values.end(), *plus) == Values.end())
+ Values.push_back(*plus);
+ }
+ if ((val = Options.find(Name + "-")) != Options.end())
+ {
+ std::vector<std::string> const minusArch = VectorizeString(val->second, ',');
+ for (std::vector<std::string>::const_iterator minus = minusArch.begin(); minus != minusArch.end(); ++minus)
+ {
+ std::vector<std::string>::iterator kill = std::find(Values.begin(), Values.end(), *minus);
+ if (kill != Values.end())
+ Values.erase(kill);
+ }
+ }
+ return Values;
+}
+ /*}}}*/
+class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/
+{
+ metaIndex::TriState GetTriStateOption(std::map<std::string, std::string>const &Options, char const * const name) const
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(name);
+ if (opt != Options.end())
+ return StringToBool(opt->second, false) ? metaIndex::TRI_YES : metaIndex::TRI_NO;
+ return metaIndex::TRI_DONTCARE;
+ }
+
+ time_t GetTimeOption(std::map<std::string, std::string>const &Options, char const * const name) const
+ {
+ std::map<std::string, std::string>::const_iterator const opt = Options.find(name);
+ if (opt == Options.end())
+ return 0;
+ return strtoull(opt->second.c_str(), NULL, 10);
+ }
+
+ protected:
+
+ bool CreateItemInternal(std::vector<metaIndex *> &List, std::string const &URI,
+ std::string const &Dist, std::string const &Section,
+ bool const &IsSrc, std::map<std::string, std::string> const &Options) const
+ {