16a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski/* 26a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Copyright (C) 2016 The Android Open Source Project 36a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * 46a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * you may not use this file except in compliance with the License. 66a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * You may obtain a copy of the License at 76a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * 86a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * 106a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * See the License for the specific language governing permissions and 146a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * limitations under the License. 156a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski */ 166a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 176a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#ifndef AAPT_FILTER_CONFIGFILTER_H 186a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#define AAPT_FILTER_CONFIGFILTER_H 196a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 206a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#include "ConfigDescription.h" 216a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 226a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#include <set> 236a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#include <utility> 246a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 256a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskinamespace aapt { 266a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 276a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski/** 286a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Matches ConfigDescriptions based on some pattern. 296a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski */ 306a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskiclass IConfigFilter { 316a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskipublic: 326a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski virtual ~IConfigFilter() = default; 336a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 346a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski /** 356a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Returns true if the filter matches the configuration, false otherwise. 366a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski */ 376a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski virtual bool match(const ConfigDescription& config) const = 0; 386a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski}; 396a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 406a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski/** 416a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Implements config axis matching. An axis is one component of a configuration, like screen 426a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * density or locale. If an axis is specified in the filter, and the axis is specified in 436a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * the configuration to match, they must be compatible. Otherwise the configuration to match is 446a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * accepted. 456a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * 466a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski * Used when handling "-c" options. 476a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski */ 486a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskiclass AxisConfigFilter : public IConfigFilter { 496a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskipublic: 506a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski void addConfig(ConfigDescription config); 516a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 526a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski bool match(const ConfigDescription& config) const override; 536a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 546a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinskiprivate: 556a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski std::set<std::pair<ConfigDescription, uint32_t>> mConfigs; 566a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski uint32_t mConfigMask = 0; 576a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski}; 586a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 596a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski} // namespace aapt 606a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski 616a008170cb18666e04c42856f992fc7a0afa1e1fAdam Lesinski#endif /* AAPT_FILTER_CONFIGFILTER_H */ 62