null+****@clear*****
null+****@clear*****
2011年 11月 15日 (火) 16:29:32 JST
Susumu Yata 2011-11-15 07:29:32 +0000 (Tue, 15 Nov 2011) New Revision: 74a4d568a5080e3d4d7a972edc48b2537653c501 Log: Good news: grn_dat is now available on Windows as well. Modified files: lib/Makefile.am lib/dat.cpp lib/dat/Makefile.am lib/dat/file-impl.hpp Modified: lib/Makefile.am (+0 -2) =================================================================== --- lib/Makefile.am 2011-11-15 04:23:11 +0000 (bda6843) +++ lib/Makefile.am 2011-11-15 07:29:32 +0000 (a453309) @@ -36,10 +36,8 @@ libgroonga_la_LDFLAGS = \ -no-undefined \ $(WINDOWS_LDFLAGS) -if !OS_WIN32 libgroonga_la_LIBADD = \ dat/libgrndat.la -endif noinst_HEADERS = \ com.h \ Modified: lib/dat.cpp (+11 -48) =================================================================== --- lib/dat.cpp 2011-11-15 04:23:11 +0000 (d4678e4) +++ lib/dat.cpp 2011-11-15 07:29:32 +0000 (175caec) @@ -21,6 +21,17 @@ #include "io.h" #include "dat.h" #include "util.h" + +/* + When this code is compiled with MinGW, a macro "open" is defined to replace + "open()" by "_open()". This causes a critical problem because grn::dat::Trie + and grn::dat::CursorFactory have member functions named "open()". So, the + macro must be undefined before the following #includes. + */ +#ifdef open +# undef open +#endif + #include "dat/trie.hpp" #include "dat/cursor-factory.hpp" @@ -97,10 +108,8 @@ void grn_dat_fin(grn_ctx *ctx, grn_dat *dat) { CRITICAL_SECTION_FIN(dat->lock); -#ifndef WIN32 delete static_cast<grn::dat::Trie *>(dat->old_trie); delete static_cast<grn::dat::Trie *>(dat->trie); -#endif dat->old_trie = NULL; dat->trie = NULL; if (dat->io) { @@ -125,7 +134,6 @@ grn_dat_generate_trie_path(const char *base_path, char *trie_path, uint32_t file bool grn_dat_open_trie_if_needed(grn_ctx *ctx, grn_dat *dat) { -#ifndef WIN32 if (!dat) { ERR(GRN_INVALID_ARGUMENT, const_cast<char *>("dat is null")); return false; @@ -172,7 +180,6 @@ grn_dat_open_trie_if_needed(grn_ctx *ctx, grn_dat *dat) grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, file_id - 2); grn_io_remove(ctx, trie_path); } -#endif return true; } @@ -201,9 +208,7 @@ void grn_dat_cursor_init(grn_ctx *, grn_dat_cursor *cursor) { } void grn_dat_cursor_fin(grn_ctx *, grn_dat_cursor *cursor) { -#ifndef WIN32 delete static_cast<grn::dat::Cursor *>(cursor->cursor); -#endif cursor->dat = NULL; cursor->cursor = NULL; cursor->key = &grn::dat::Key::invalid_key(); @@ -335,7 +340,6 @@ grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key, if (!grn_dat_open_trie_if_needed(ctx, dat)) { return GRN_ID_NIL; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie); if (!trie) { return GRN_ID_NIL; @@ -349,7 +353,6 @@ grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key, ERR(grn_dat_translate_error_code(ex.code()), const_cast<char *>("grn::dat::Trie::search failed")); } -#endif return GRN_ID_NIL; } @@ -357,7 +360,6 @@ grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_size, void **, int *added) { -#ifndef WIN32 if (!grn_dat_open_trie_if_needed(ctx, dat)) { return GRN_ID_NIL; } @@ -406,9 +408,6 @@ grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key, const_cast<char *>("grn::dat::Trie::insert failed")); return GRN_ID_NIL; } -#else - return GRN_ID_NIL; -#endif } int @@ -417,7 +416,6 @@ grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize if (!grn_dat_open_trie_if_needed(ctx, dat)) { return 0; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie); if (!trie) { return 0; @@ -430,9 +428,6 @@ grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize std::memcpy(keybuf, key.ptr(), key.length()); } return (int)key.length(); -#else - return 0; -#endif } int @@ -441,7 +436,6 @@ grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return 0; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie); if (!trie) { return 0; @@ -457,9 +451,6 @@ grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk) grn_bulk_write(ctx, bulk, static_cast<const char *>(key.ptr()), key.length()); } return (int)key.length(); -#else - return 0; -#endif } grn_rc @@ -472,7 +463,6 @@ grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id, return GRN_INVALID_ARGUMENT; } -#ifndef WIN32 if (optarg && optarg->func) { const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); if (!trie->ith_entry(id).is_valid()) { @@ -492,7 +482,6 @@ grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id, const_cast<char *>("grn::dat::Trie::remove failed")); return GRN_INVALID_ARGUMENT; } -#endif return GRN_SUCCESS; } @@ -506,7 +495,6 @@ grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_siz return GRN_INVALID_ARGUMENT; } -#ifndef WIN32 if (optarg && optarg->func) { try { const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); @@ -533,7 +521,6 @@ grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_siz const_cast<char *>("grn::dat::Trie::remove failed")); return GRN_INVALID_ARGUMENT; } -#endif return GRN_SUCCESS; } @@ -546,7 +533,6 @@ grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id, } else if (!dat->trie) { return GRN_INVALID_ARGUMENT; } -#ifndef WIN32 try { try { grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); @@ -568,7 +554,6 @@ grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id, const_cast<char *>("grn::dat::Trie::update failed")); return GRN_INVALID_ARGUMENT; } -#endif return GRN_SUCCESS; } @@ -582,7 +567,6 @@ grn_dat_update(grn_ctx *ctx, grn_dat *dat, } else if (!dat->trie) { return GRN_INVALID_ARGUMENT; } -#ifndef WIN32 try { try { grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); @@ -604,7 +588,6 @@ grn_dat_update(grn_ctx *ctx, grn_dat *dat, const_cast<char *>("grn::dat::Trie::update failed")); return GRN_INVALID_ARGUMENT; } -#endif return GRN_SUCCESS; } @@ -614,12 +597,10 @@ grn_dat_size(grn_ctx *ctx, grn_dat *dat) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return 0; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie); if (trie) { return trie->num_keys(); } -#endif return 0; } @@ -633,7 +614,6 @@ grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat, return NULL; } -#ifndef WIN32 grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); if (!trie) { grn_dat_cursor * const dc = @@ -700,9 +680,6 @@ grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat, } dc->dat = dat; return dc; -#else - return NULL; -#endif } grn_id @@ -711,7 +688,6 @@ grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c) if (!c || !c->cursor) { return GRN_ID_NIL; } -#ifndef WIN32 try { grn::dat::Cursor * const cursor = static_cast<grn::dat::Cursor *>(c->cursor); const grn::dat::Key &key = cursor->next(); @@ -722,7 +698,6 @@ grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c) const_cast<char *>("grn::dat::Cursor::next failed")); return GRN_ID_NIL; } -#endif return c->curr_rec; } @@ -738,7 +713,6 @@ grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c) int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key) { -#ifndef WIN32 if (c) { const grn::dat::Key &key_ref = *static_cast<const grn::dat::Key *>(c->key); if (key_ref.is_valid()) { @@ -746,7 +720,6 @@ grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key) return (int)key_ref.length(); } } -#endif return 0; } @@ -759,7 +732,6 @@ grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c, } else if (!grn_dat_open_trie_if_needed(ctx, c->dat)) { return ctx->rc; } -#ifndef WIN32 grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(c->dat->trie); if (!trie) { return GRN_INVALID_ARGUMENT; @@ -773,7 +745,6 @@ grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c, const_cast<char *>("grn::dat::Trie::remove failed")); return GRN_INVALID_ARGUMENT; } -#endif return GRN_INVALID_ARGUMENT; } @@ -783,12 +754,10 @@ grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return GRN_ID_NIL; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); if (trie) { return trie->max_key_id(); } -#endif return GRN_ID_NIL; } @@ -798,7 +767,6 @@ grn_dat_truncate(grn_ctx *ctx, grn_dat *dat) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return ctx->rc; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie); if (!trie || !trie->max_key_id()) { return GRN_SUCCESS; @@ -817,7 +785,6 @@ grn_dat_truncate(grn_ctx *ctx, grn_dat *dat) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return ctx->rc; } -#endif return GRN_SUCCESS; } @@ -827,7 +794,6 @@ _grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id, uint32_t *key_size) if (!grn_dat_open_trie_if_needed(ctx, dat)) { return NULL; } -#ifndef WIN32 const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie); if (!trie) { return NULL; @@ -838,9 +804,6 @@ _grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id, uint32_t *key_size) } *key_size = key.length(); return static_cast<const char *>(key.ptr()); -#else - return NULL; -#endif } } // extern "C" Modified: lib/dat/Makefile.am (+0 -2) =================================================================== --- lib/dat/Makefile.am 2011-11-15 04:23:11 +0000 (8a378d6) +++ lib/dat/Makefile.am 2011-11-15 07:29:32 +0000 (fc1b975) @@ -1,6 +1,5 @@ DEFS += -D_REENTRANT $(GRN_DEFS) -if !OS_WIN32 noinst_LTLIBRARIES = libgrndat.la libgrndat_la_SOURCES = \ @@ -34,6 +33,5 @@ noinst_HEADERS = \ string.hpp \ trie.hpp \ vector.hpp -endif CLEANFILES = *.gcno *.gcda Modified: lib/dat/file-impl.hpp (+1 -1) =================================================================== --- lib/dat/file-impl.hpp 2011-11-15 04:23:11 +0000 (53efbfe) +++ lib/dat/file-impl.hpp 2011-11-15 07:29:32 +0000 (617d518) @@ -19,7 +19,7 @@ #define GRN_DAT_FILE_IMPL_HPP_ #ifdef WIN32 -#include <Windows.h> +#include <windows.h> #endif // WIN32 #include "dat.hpp"