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