Chromium Code Reviews| Index: chromeos/dbus/ibus/ibus_object.h |
| diff --git a/chromeos/dbus/ibus/ibus_object.h b/chromeos/dbus/ibus/ibus_object.h |
| index b6cf45cf8d007024355b559ba5548e57efdb3fed..044aa0105e4bfb418e48aa8985067f1e51687a17 100644 |
| --- a/chromeos/dbus/ibus/ibus_object.h |
| +++ b/chromeos/dbus/ibus/ibus_object.h |
| @@ -6,16 +6,21 @@ |
| #define CHROMEOS_DBUS_IBUS_IBUS_OBJECT_H_ |
| #include <string> |
| +#include <map> |
| #include "base/basictypes.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "chromeos/chromeos_export.h" |
| #include "chromeos/dbus/ibus/ibus_property.h" |
| #include "chromeos/dbus/ibus/ibus_text.h" |
| +namespace base { |
| +class Value; |
| +} // namespace base |
| + |
| namespace dbus { |
| class MessageReader; |
| class MessageWriter; |
| -} // dbus |
| +} // namespace dbus |
| namespace chromeos { |
| // TODO(nona): Remove ibus namespace after complete libibus removal. |
| @@ -75,6 +80,13 @@ namespace ibus { |
| // // Craetes reader for IBusText |
| // IBusObjectReader object_reader("IBusText", &reader); |
| // |
| +// // Initialize for reading attachment field. |
| +// object_reader.Init(); |
| +// |
| +// // Get attachment field. |
| +// base::Value* value; |
| +// object_reader.GetAttachment("annotation", &value); |
| +// |
| // std::string text; |
| // reader.PopString(&text); // Reading 1st value as string. |
| // |
| @@ -93,10 +105,6 @@ class CHROMEOS_EXPORT IBusObjectReader { |
| // to read attachment field. |
| bool Init(); |
| - // Reads IBusObject headers and checks if the type name is valid. |
| - // Returns true and sets up reader for attachment reading on success. |
| - bool InitWithAttachmentReader(dbus::MessageReader* reader); |
| - |
| // Reads IBusOBject with |reader| and checks if the type name is valid. |
| bool InitWithParentReader(dbus::MessageReader* reader); |
| @@ -129,6 +137,10 @@ class CHROMEOS_EXPORT IBusObjectReader { |
| // Pops a IBusPropertyList. |
| bool PopIBusPropertyList(ibus::IBusPropertyList* property_list); |
| + // Gets attachment entry corresponding to |key|. Do not free |value|. |
| + // Returns false if there is no entry. |
| + bool GetAttachment(const std::string& key, base::Value** value); |
|
satorux1
2012/11/13 04:37:37
What about returning a "const base::Value*". We ca
Seigo Nonaka
2012/11/13 06:22:17
Done.
|
| + |
| private: |
| enum CheckResult { |
| IBUS_OBJECT_VALID, // Already checked and valid type. |
| @@ -136,15 +148,12 @@ class CHROMEOS_EXPORT IBusObjectReader { |
| IBUS_OBJECT_NOT_CHECKED, // Not checked yet. |
| }; |
| - // Reads IBusObject headers without attachment and checks if the type name |
| - // is valid. |
| - bool InitWithoutAttachment(); |
| - |
| std::string type_name_; |
| dbus::MessageReader* original_reader_; |
| scoped_ptr<dbus::MessageReader> top_variant_reader_; |
| scoped_ptr<dbus::MessageReader> contents_reader_; |
| CheckResult check_result_; |
| + std::map<std::string, base::Value*> attachments_; |
| DISALLOW_COPY_AND_ASSIGN(IBusObjectReader); |
| }; |
| @@ -158,6 +167,13 @@ class CHROMEOS_EXPORT IBusObjectReader { |
| // // Creates writer for IBusText |
| // IBusObjectWriter object_writer("IBusText", "sv", &writer); |
| // |
| +// // Add some attachments. |
| +// base::Value* value = base::Value::CreateStringValue("Noun"); |
| +// object_writer.AddAttachment("annotation", *value); |
| +// |
| +// // Close header section. |
| +// object_writer.CloseHeader(); |
| +// |
| // const std::string text = "Sample Text"; |
| // writer.AppendString(text); |
| // |
| @@ -170,15 +186,28 @@ class CHROMEOS_EXPORT IBusObjectReader { |
| // object_writer.CloseAll(); |
| class CHROMEOS_EXPORT IBusObjectWriter { |
| public: |
| + enum WriterState { |
| + NOT_INITIALZED, // Created but not initialized. |
| + HEADER_OPEN, // Ready for writing attachment field. |
| + INITIALIZED // Ready for writing content values. |
| + }; |
| + |
| // |writer| must be released by caller. |
| IBusObjectWriter(const std::string& type_name, |
| const std::string& signature, |
| dbus::MessageWriter* writer); |
| virtual ~IBusObjectWriter(); |
| + // Closes header to write content values. |
| + void CloseHeader(); |
| + |
| // Appends IBusObject headers with |writer|, should be called once. |
| void InitWithParentWriter(dbus::MessageWriter* writer); |
| + // Adds an attachment, this function can be called only before CloseHeader |
| + // function call. |
| + bool AddAttachment(const std::string& key, const base::Value& value); |
| + |
| // The following functions delegate dbus::MessageReader's functions. |
| void AppendString(const std::string& input); |
| void AppendUint32(uint32 value); |
| @@ -194,9 +223,6 @@ class CHROMEOS_EXPORT IBusObjectWriter { |
| // Closes all opened containers. |
| void CloseAll(); |
| - // Returns true if writer is initialized. |
| - bool IsInitialized() const; |
| - |
| // Appends a IBusText. |
| void AppendIBusText(const ibus::IBusText& text); |
| @@ -217,8 +243,10 @@ class CHROMEOS_EXPORT IBusObjectWriter { |
| std::string type_name_; |
| std::string signature_; |
| dbus::MessageWriter* original_writer_; |
| + WriterState state_; |
| scoped_ptr<dbus::MessageWriter> top_variant_writer_; |
| scoped_ptr<dbus::MessageWriter> contents_writer_; |
| + scoped_ptr<dbus::MessageWriter> attachment_writer_; |
| DISALLOW_COPY_AND_ASSIGN(IBusObjectWriter); |
| }; |