summaryrefslogtreecommitdiff
path: root/sfntly/data/font_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'sfntly/data/font_data.h')
-rw-r--r--sfntly/data/font_data.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/sfntly/data/font_data.h b/sfntly/data/font_data.h
new file mode 100644
index 0000000..d02e8b7
--- /dev/null
+++ b/sfntly/data/font_data.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2011 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_DATA_H_
+#define SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_DATA_H_
+
+#include <limits.h>
+
+#include <vector>
+
+#include "sfntly/port/type.h"
+#include "sfntly/data/byte_array.h"
+#include "sfntly/port/refcount.h"
+
+namespace sfntly {
+
+struct DataSize {
+ enum {
+ kBYTE = 1,
+ kCHAR = 1,
+ kUSHORT = 2,
+ kSHORT = 2,
+ kUINT24 = 3,
+ kULONG = 4,
+ kLONG = 4,
+ kFixed = 4,
+ kFUNIT = 4,
+ kFWORD = 2,
+ kUFWORD = 2,
+ kF2DOT14 = 2,
+ kLONGDATETIME = 8,
+ kTag = 4,
+ kGlyphID = 2,
+ kOffset = 2
+ };
+};
+
+class FontData : virtual public RefCount {
+ public:
+ // Gets the maximum size of the FontData. This is the maximum number of bytes
+ // that the font data can hold and all of it may not be filled with data or
+ // even fully allocated yet.
+ // @return the maximum size of this font data
+ virtual int32_t Size() const;
+
+ // Sets limits on the size of the FontData. The FontData is then only
+ // visible within the bounds set.
+ // @param offset the start of the new bounds
+ // @param length the number of bytes in the bounded array
+ // @return true if the bounding range was successful; false otherwise
+ virtual bool Bound(int32_t offset, int32_t length);
+
+ // Sets limits on the size of the FontData. This is a offset bound only so if
+ // the FontData is writable and growable then there is no limit to that growth
+ // from the bounding operation.
+ // @param offset the start of the new bounds which must be within the current
+ // size of the FontData
+ // @return true if the bounding range was successful; false otherwise
+ virtual bool Bound(int32_t offset);
+
+ // Makes a slice of this FontData. The returned slice will share the data with
+ // the original <code>FontData</code>.
+ // @param offset the start of the slice
+ // @param length the number of bytes in the slice
+ // @return a slice of the original FontData
+ virtual CALLER_ATTACH FontData* Slice(int32_t offset, int32_t length) = 0;
+
+ // Makes a bottom bound only slice of this array. The returned slice will
+ // share the data with the original <code>FontData</code>.
+ // @param offset the start of the slice
+ // @return a slice of the original FontData
+ virtual CALLER_ATTACH FontData* Slice(int32_t offset) = 0;
+
+ // Gets the length of the data.
+ virtual int32_t Length() const;
+
+ protected:
+ // Constructor.
+ // @param ba the byte array to use for the backing data
+ explicit FontData(ByteArray* ba);
+
+ // Constructor.
+ // @param data the data to wrap
+ // @param offset the offset to start the wrap from
+ // @param length the length of the data wrapped
+ FontData(FontData* data, int32_t offset, int32_t length);
+
+ // Constructor.
+ // @param data the data to wrap
+ // @param offset the offset to start the wrap from
+ FontData(FontData* data, int32_t offset);
+ virtual ~FontData();
+
+ void Init(ByteArray* ba);
+
+ // Gets the offset in the underlying data taking into account any bounds on
+ // the data.
+ // @param offset the offset to get the bound compensated offset for
+ // @return the bound compensated offset
+ int32_t BoundOffset(int32_t offset);
+
+ // Gets the length in the underlying data taking into account any bounds on
+ // the data.
+ // @param offset the offset that the length is being used at
+ // @param length the length to get the bound compensated length for
+ // @return the bound compensated length
+ int32_t BoundLength(int32_t offset, int32_t length);
+
+ static const int32_t GROWABLE_SIZE = INT_MAX;
+
+ // TODO(arthurhsu): style guide violation: refactor this protected member
+ ByteArrayPtr array_;
+
+ private:
+ int32_t bound_offset_;
+ int32_t bound_length_;
+};
+typedef Ptr<FontData> FontDataPtr;
+
+} // namespace sfntly
+
+#endif // SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_DATA_H_