140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski/* 240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Copyright (C) 2014 The Android Open Source Project 340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * you may not use this file except in compliance with the License. 640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * You may obtain a copy of the License at 740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 1040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * See the License for the specific language governing permissions and 1440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * limitations under the License. 1540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski */ 1640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 1740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#ifndef H_ANDROID_SPLIT_RULE 1840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#define H_ANDROID_SPLIT_RULE 1940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "SplitDescription.h" 2140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/RefBase.h> 2340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/StrongPointer.h> 2440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/String8.h> 2540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/Vector.h> 2640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2740e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace split { 2840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2940e8eefbedcafc51948945647d746daaee092f16Adam Lesinskistruct Rule : public virtual android::RefBase { 3040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski inline Rule(); 31dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski Rule(const Rule& rhs); 3240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski enum Operator { 3440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski LESS_THAN = 1, 3540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski GREATER_THAN, 3640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski EQUALS, 3740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski CONTAINS_ANY, 3840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski CONTAINS_ALL, 3940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski IS_TRUE, 4040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski IS_FALSE, 4140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski AND_SUBRULES, 4240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski OR_SUBRULES, 4340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski ALWAYS_TRUE, 4440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski }; 4540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 4640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski Operator op; 4740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 4840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski enum Key { 4940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski NONE = 0, 5040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SDK_VERSION, 5140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SCREEN_DENSITY, 5240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski LANGUAGE, 5340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski NATIVE_PLATFORM, 5440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski TOUCH_SCREEN, 5540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SCREEN_SIZE, 5640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SCREEN_LAYOUT, 5740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski }; 5840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 5940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski Key key; 6040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski bool negate; 6140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 6240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::Vector<android::String8> stringArgs; 6340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::Vector<int> longArgs; 6440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::Vector<double> doubleArgs; 6540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::Vector<android::sp<Rule> > subrules; 6640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 6740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::String8 toJson(int indent=0) const; 6840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 6940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski static android::sp<Rule> simplify(android::sp<Rule> rule); 7040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski}; 7140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 7240e8eefbedcafc51948945647d746daaee092f16Adam LesinskiRule::Rule() 7340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski: op(ALWAYS_TRUE) 7440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski, key(NONE) 7540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski, negate(false) {} 7640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 7740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace split 7840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 7940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#endif // H_ANDROID_SPLIT_RULE 80