diff options
author | Peng Wu <alexepico@gmail.com> | 2010-09-27 16:00:46 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2010-09-27 16:00:46 +0800 |
commit | e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372 (patch) | |
tree | 9ef1ebec714beaa390e942e26f61965e872e2980 /utils | |
parent | 55d80b5ff7702b90fbe80ad1a65c2eb0797e1844 (diff) | |
download | libpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.tar.gz libpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.tar.xz libpinyin-e6233cbb2da9d2a766aa4f3a33bfa5ea214e4372.zip |
design tag utility
Diffstat (limited to 'utils')
-rw-r--r-- | utils/storage/Makefile.am | 6 | ||||
-rw-r--r-- | utils/storage/tag_utility.cpp | 29 | ||||
-rw-r--r-- | utils/storage/tag_utility.h | 20 |
3 files changed, 55 insertions, 0 deletions
diff --git a/utils/storage/Makefile.am b/utils/storage/Makefile.am index e9e9ca9..821a43b 100644 --- a/utils/storage/Makefile.am +++ b/utils/storage/Makefile.am @@ -32,3 +32,9 @@ gen_binary_files_LDADD = ../../src/libpinyin.la @GLIB2_LDFLAGS@ export_interpolation_SOURCES = export_interpolation.cpp export_interpolation_LDADD = ../../src/libpinyin.la @GLIB2_LDFLAGS@ + +noinst_LTLIBRARIES = libtagutils.la + +libtagutils_la_LDFLAGS = -static + +libtagutils_la_SOURCES = tag_utility.cpp diff --git a/utils/storage/tag_utility.cpp b/utils/storage/tag_utility.cpp new file mode 100644 index 0000000..6d15452 --- /dev/null +++ b/utils/storage/tag_utility.cpp @@ -0,0 +1,29 @@ +#include <glib.h> +#include "tag_utility.h" + + +/* internal taglib structure */ +struct tag_entry{ + int m_line_type; + const char * m_line_tag; + int m_num_of_values; + const char ** m_required_tags; + /* const char ** m_optional_tags; */ + const char ** m_ignored_tags; + +public: + tag_entry(int line_type, const char * line_tag, int num_of_values, + const char * required_tags[], const char * ignored_tags[]){ + m_line_type = line_type; m_line_tag = line_tag; + m_num_of_values = num_of_values; + m_required_tags = required_tags; + m_ignored_tags = ignored_tags; + } +}; + +void test(){ + TAGLIB_BEGIN_ADD_TAG(1, "\\data", 0); + TAGLIB_REQUIRED_TAGS = {"model", NULL}; + TAGLIB_IGNORED_TAGS = {"data", NULL}; + TAGLIB_END_ADD_TAG; +} diff --git a/utils/storage/tag_utility.h b/utils/storage/tag_utility.h index b852ad5..77c639b 100644 --- a/utils/storage/tag_utility.h +++ b/utils/storage/tag_utility.h @@ -51,4 +51,24 @@ bool taglib_pop_state(); bool taglib_fini(); +/* Useful macros to ease taglib_add_tag call, + * or else need to use C++0x-features. + */ + +#define TAGLIB_BEGIN_ADD_TAG(line_type, line_tag, num_of_values) \ + { \ + const int line_type_saved = line_type; \ + const char * line_tag_saved = line_tag; \ + const int num_of_values_saved = num_of_values; \ + ; + +#define TAGLIB_REQUIRED_TAGS const char * required_tags_saved[] +/* #define TAGLIB_OPTIONAL_TAGS const char * optional_tags_saved */ +#define TAGLIB_IGNORED_TAGS const char * ignored_tags_saved[] + +#define TAGLIB_END_ADD_TAG \ + taglib_add_tag(line_type_saved, line_tag_saved, num_of_values_saved, \ + required_tags_saved, ignored_tags_saved); \ + }; + #endif |