]> git.saurik.com Git - android/aapt.git/blobdiff - StringPool.h
am 5f958e9b: am 67b38c44: Cache resource ID lookups in aapt
[android/aapt.git] / StringPool.h
index 255bdbfc0a7f7a5bf194702e49501f5ddfff900e..16050b2711c3a65d1a9d6b44fc5b5a4391021acd 100644 (file)
 #include "Main.h"
 #include "AaptAssets.h"
 
 #include "Main.h"
 #include "AaptAssets.h"
 
-#include <utils/ResourceTypes.h>
+#include <androidfw/ResourceTypes.h>
 #include <utils/String16.h>
 #include <utils/TextOutput.h>
 #include <utils/String16.h>
 #include <utils/TextOutput.h>
+#include <utils/TypeHelpers.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -20,7 +21,7 @@
 #include <ctype.h>
 #include <errno.h>
 
 #include <ctype.h>
 #include <errno.h>
 
-#include <expat.h>
+#include <libexpat/expat.h>
 
 using namespace android;
 
 
 using namespace android;
 
@@ -79,16 +80,10 @@ public:
     };
 
     /**
     };
 
     /**
-     * If 'sorted' is true, then the final strings in the resource data
-     * structure will be generated in sorted order.  This allow for fast
-     * lookup with ResStringPool::indexOfString() (O(log n)), at the expense
-     * of support for styled string entries (which requires the same string
-     * be included multiple times in the pool).
-     *
      * If 'utf8' is true, strings will be encoded with UTF-8 instead of
      * left in Java's native UTF-16.
      */
      * If 'utf8' is true, strings will be encoded with UTF-8 instead of
      * left in Java's native UTF-16.
      */
-    explicit StringPool(bool sorted = false, bool utf8 = false);
+    explicit StringPool(bool utf8 = false);
 
     /**
      * Add a new string to the pool.  If mergeDuplicates is true, thenif
 
     /**
      * Add a new string to the pool.  If mergeDuplicates is true, thenif
@@ -96,9 +91,7 @@ public:
      * otherwise, or if the value doesn't already exist, a new entry is
      * created.
      *
      * otherwise, or if the value doesn't already exist, a new entry is
      * created.
      *
-     * Returns the index in the entry array of the new string entry.  Note that
-     * if this string pool is sorted, the returned index will not be valid
-     * when the pool is finally written.
+     * Returns the index in the entry array of the new string entry.
      */
     ssize_t add(const String16& value, bool mergeDuplicates = false,
             const String8* configTypeName = NULL, const ResTable_config* config = NULL);
      */
     ssize_t add(const String16& value, bool mergeDuplicates = false,
             const String8* configTypeName = NULL, const ResTable_config* config = NULL);
@@ -106,24 +99,14 @@ public:
     ssize_t add(const String16& value, const Vector<entry_style_span>& spans,
             const String8* configTypeName = NULL, const ResTable_config* config = NULL);
 
     ssize_t add(const String16& value, const Vector<entry_style_span>& spans,
             const String8* configTypeName = NULL, const ResTable_config* config = NULL);
 
-    ssize_t add(const String16& ident, const String16& value,
-                bool mergeDuplicates = false,
-                const String8* configTypeName = NULL, const ResTable_config* config = NULL);
-
     status_t addStyleSpan(size_t idx, const String16& name,
                           uint32_t start, uint32_t end);
     status_t addStyleSpans(size_t idx, const Vector<entry_style_span>& spans);
     status_t addStyleSpan(size_t idx, const entry_style_span& span);
 
     status_t addStyleSpan(size_t idx, const String16& name,
                           uint32_t start, uint32_t end);
     status_t addStyleSpans(size_t idx, const Vector<entry_style_span>& spans);
     status_t addStyleSpan(size_t idx, const entry_style_span& span);
 
-    size_t size() const;
-
-    const entry& entryAt(size_t idx) const;
-
-    size_t countIdentifiers() const;
-
     // Sort the contents of the string block by the configuration associated
     // with each item.  After doing this you can use mapOriginalPosToNewPos()
     // Sort the contents of the string block by the configuration associated
     // with each item.  After doing this you can use mapOriginalPosToNewPos()
-    // to find out the new position given the position originall returned by
+    // to find out the new position given the position originally returned by
     // add().
     void sortByConfig();
 
     // add().
     void sortByConfig();
 
@@ -156,9 +139,8 @@ public:
     const Vector<size_t>* offsetsForString(const String16& val) const;
 
 private:
     const Vector<size_t>* offsetsForString(const String16& val) const;
 
 private:
-    static int config_sort(const size_t* lhs, const size_t* rhs, void* state);
+    static int config_sort(void* state, const void* lhs, const void* rhs);
 
 
-    const bool                              mSorted;
     const bool                              mUTF8;
 
     // The following data structures represent the actual structures
     const bool                              mUTF8;
 
     // The following data structures represent the actual structures
@@ -185,13 +167,18 @@ private:
     // Unique set of all the strings added to the pool, mapped to
     // the first index of mEntryArray where the value was added.
     DefaultKeyedVector<String16, ssize_t>   mValues;
     // Unique set of all the strings added to the pool, mapped to
     // the first index of mEntryArray where the value was added.
     DefaultKeyedVector<String16, ssize_t>   mValues;
-    // Unique set of all (optional) identifiers of strings in the
-    // pool, mapping to indices in mEntries.
-    DefaultKeyedVector<String16, ssize_t>   mIdents;
     // This array maps from the original position a string was placed at
     // in mEntryArray to its new position after being sorted with sortByConfig().
     Vector<size_t>                          mOriginalPosToNewPos;
 };
 
     // This array maps from the original position a string was placed at
     // in mEntryArray to its new position after being sorted with sortByConfig().
     Vector<size_t>                          mOriginalPosToNewPos;
 };
 
+// The entry types are trivially movable because all fields they contain, including
+// the vectors and strings, are trivially movable.
+namespace android {
+    ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry);
+    ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style_span);
+    ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style);
+};
+
 #endif
 
 #endif