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_SPLIT_DESCRIPTION 1840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#define H_ANDROID_SPLIT_SPLIT_DESCRIPTION 1940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "aapt/ConfigDescription.h" 2140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "Abi.h" 2240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/String8.h> 2440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/Vector.h> 2540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2640e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace split { 2740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2840e8eefbedcafc51948945647d746daaee092f16Adam Lesinskistruct SplitDescription { 2940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SplitDescription(); 3040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski ConfigDescription config; 3240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski abi::Variant abi; 3340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski int compare(const SplitDescription& rhs) const; 3540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski inline bool operator<(const SplitDescription& rhs) const; 3640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski inline bool operator==(const SplitDescription& rhs) const; 3740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski inline bool operator!=(const SplitDescription& rhs) const; 3840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski bool match(const SplitDescription& o) const; 4040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski bool isBetterThan(const SplitDescription& o, const SplitDescription& target) const; 4140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 4240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski android::String8 toString() const; 4340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 4440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski static bool parse(const android::String8& str, SplitDescription* outSplit); 4540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski}; 4640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 4740e8eefbedcafc51948945647d746daaee092f16Adam Lesinskissize_t parseAbi(const android::Vector<android::String8>& parts, const ssize_t index, 4840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski SplitDescription* outSplit); 4940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 5040e8eefbedcafc51948945647d746daaee092f16Adam Lesinskibool SplitDescription::operator<(const SplitDescription& rhs) const { 5140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski return compare(rhs) < 0; 5240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 5340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 5440e8eefbedcafc51948945647d746daaee092f16Adam Lesinskibool SplitDescription::operator==(const SplitDescription& rhs) const { 5540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski return compare(rhs) == 0; 5640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 5740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 5840e8eefbedcafc51948945647d746daaee092f16Adam Lesinskibool SplitDescription::operator!=(const SplitDescription& rhs) const { 5940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski return compare(rhs) != 0; 6040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 6140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 6240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace split 6340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 6440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#endif // H_ANDROID_SPLIT_SPLIT_DESCRIPTION 65