~xnox/ubuntu/trusty/gcc-arm-linux-androideabi/dima

« back to all changes in this revision

Viewing changes to android/frameworks/native/include/utils/PropertyMap.h

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs
  • Date: 2013-07-05 10:12:24 UTC
  • Revision ID: package-import@ubuntu.com-20130705101224-6qo3e8jbz8p31aa1
Tags: upstream-0.20130705.1
ImportĀ upstreamĀ versionĀ 0.20130705.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2010 The Android Open Source Project
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 *
 
8
 *      http://www.apache.org/licenses/LICENSE-2.0
 
9
 *
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
#ifndef _UTILS_PROPERTY_MAP_H
 
18
#define _UTILS_PROPERTY_MAP_H
 
19
 
 
20
#include <utils/KeyedVector.h>
 
21
#include <utils/String8.h>
 
22
#include <utils/Errors.h>
 
23
#include <utils/Tokenizer.h>
 
24
 
 
25
namespace android {
 
26
 
 
27
/*
 
28
 * Provides a mechanism for passing around string-based property key / value pairs
 
29
 * and loading them from property files.
 
30
 *
 
31
 * The property files have the following simple structure:
 
32
 *
 
33
 * # Comment
 
34
 * key = value
 
35
 *
 
36
 * Keys and values are any sequence of printable ASCII characters.
 
37
 * The '=' separates the key from the value.
 
38
 * The key and value may not contain whitespace.
 
39
 *
 
40
 * The '\' character is reserved for escape sequences and is not currently supported.
 
41
 * The '"" character is reserved for quoting and is not currently supported.
 
42
 * Files that contain the '\' or '"' character will fail to parse.
 
43
 *
 
44
 * The file must not contain duplicate keys.
 
45
 *
 
46
 * TODO Support escape sequences and quoted values when needed.
 
47
 */
 
48
class PropertyMap {
 
49
public:
 
50
    /* Creates an empty property map. */
 
51
    PropertyMap();
 
52
    ~PropertyMap();
 
53
 
 
54
    /* Clears the property map. */
 
55
    void clear();
 
56
 
 
57
    /* Adds a property.
 
58
     * Replaces the property with the same key if it is already present.
 
59
     */
 
60
    void addProperty(const String8& key, const String8& value);
 
61
 
 
62
    /* Returns true if the property map contains the specified key. */
 
63
    bool hasProperty(const String8& key) const;
 
64
 
 
65
    /* Gets the value of a property and parses it.
 
66
     * Returns true and sets outValue if the key was found and its value was parsed successfully.
 
67
     * Otherwise returns false and does not modify outValue.  (Also logs a warning.)
 
68
     */
 
69
    bool tryGetProperty(const String8& key, String8& outValue) const;
 
70
    bool tryGetProperty(const String8& key, bool& outValue) const;
 
71
    bool tryGetProperty(const String8& key, int32_t& outValue) const;
 
72
    bool tryGetProperty(const String8& key, float& outValue) const;
 
73
 
 
74
    /* Adds all values from the specified property map. */
 
75
    void addAll(const PropertyMap* map);
 
76
 
 
77
    /* Gets the underlying property map. */
 
78
    inline const KeyedVector<String8, String8>& getProperties() const { return mProperties; }
 
79
 
 
80
    /* Loads a property map from a file. */
 
81
    static status_t load(const String8& filename, PropertyMap** outMap);
 
82
 
 
83
private:
 
84
    class Parser {
 
85
        PropertyMap* mMap;
 
86
        Tokenizer* mTokenizer;
 
87
 
 
88
    public:
 
89
        Parser(PropertyMap* map, Tokenizer* tokenizer);
 
90
        ~Parser();
 
91
        status_t parse();
 
92
 
 
93
    private:
 
94
        status_t parseType();
 
95
        status_t parseKey();
 
96
        status_t parseKeyProperty();
 
97
        status_t parseModifier(const String8& token, int32_t* outMetaState);
 
98
        status_t parseCharacterLiteral(char16_t* outCharacter);
 
99
    };
 
100
 
 
101
    KeyedVector<String8, String8> mProperties;
 
102
};
 
103
 
 
104
} // namespace android
 
105
 
 
106
#endif // _UTILS_PROPERTY_MAP_H