blob: eac2fb11e8c0da72974a9f7b5a3b8367487d972a [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
#define C_LUCY_NOMATCHQUERY
#include "Lucy/Util/ToolSet.h"
#include "Lucy/Search/NoMatchQuery.h"
#include "Lucy/Index/SegReader.h"
#include "Lucy/Index/Similarity.h"
#include "Lucy/Plan/Schema.h"
#include "Lucy/Search/NoMatchMatcher.h"
#include "Lucy/Search/Searcher.h"
#include "Lucy/Store/InStream.h"
#include "Lucy/Store/OutStream.h"
#include "Lucy/Util/Freezer.h"
NoMatchQuery*
NoMatchQuery_new() {
NoMatchQuery *self = (NoMatchQuery*)VTable_Make_Obj(NOMATCHQUERY);
return NoMatchQuery_init(self);
}
NoMatchQuery*
NoMatchQuery_init(NoMatchQuery *self) {
Query_init((Query*)self, 0.0f);
self->fails_to_match = true;
return self;
}
bool_t
NoMatchQuery_equals(NoMatchQuery *self, Obj *other) {
NoMatchQuery *twin = (NoMatchQuery*)other;
if (!Obj_Is_A(other, NOMATCHQUERY)) { return false; }
if (self->boost != twin->boost) { return false; }
if (!!self->fails_to_match != !!twin->fails_to_match) { return false; }
return true;
}
CharBuf*
NoMatchQuery_to_string(NoMatchQuery *self) {
UNUSED_VAR(self);
return CB_new_from_trusted_utf8("[NOMATCH]", 9);
}
Compiler*
NoMatchQuery_make_compiler(NoMatchQuery *self, Searcher *searcher,
float boost) {
return (Compiler*)NoMatchCompiler_new(self, searcher, boost);
}
void
NoMatchQuery_set_fails_to_match(NoMatchQuery *self, bool_t fails_to_match) {
self->fails_to_match = fails_to_match;
}
bool_t
NoMatchQuery_get_fails_to_match(NoMatchQuery *self) {
return self->fails_to_match;
}
Obj*
NoMatchQuery_dump(NoMatchQuery *self) {
NoMatchQuery_dump_t super_dump
= (NoMatchQuery_dump_t)SUPER_METHOD(NOMATCHQUERY, NoMatchQuery, Dump);
Hash *dump = (Hash*)CERTIFY(super_dump(self), HASH);
Hash_Store_Str(dump, "fails_to_match", 14,
(Obj*)CB_newf("%i64", (int64_t)self->fails_to_match));
return (Obj*)dump;
}
NoMatchQuery*
NoMatchQuery_load(NoMatchQuery *self, Obj *dump) {
Hash *source = (Hash*)CERTIFY(dump, HASH);
NoMatchQuery_load_t super_load
= (NoMatchQuery_load_t)SUPER_METHOD(NOMATCHQUERY, NoMatchQuery, Load);
NoMatchQuery *loaded = super_load(self, dump);
Obj *fails = Cfish_Hash_Fetch_Str(source, "fails_to_match", 14);
if (fails) {
loaded->fails_to_match = (bool_t)!!Obj_To_I64(fails);
}
else {
loaded->fails_to_match = true;
}
return loaded;
}
void
NoMatchQuery_serialize(NoMatchQuery *self, OutStream *outstream) {
OutStream_Write_I8(outstream, !!self->fails_to_match);
}
NoMatchQuery*
NoMatchQuery_deserialize(NoMatchQuery *self, InStream *instream) {
self = self ? self : (NoMatchQuery*)VTable_Make_Obj(NOMATCHQUERY);
NoMatchQuery_init(self);
self->fails_to_match = !!InStream_Read_I8(instream);
return self;
}
/**********************************************************************/
NoMatchCompiler*
NoMatchCompiler_new(NoMatchQuery *parent, Searcher *searcher,
float boost) {
NoMatchCompiler *self
= (NoMatchCompiler*)VTable_Make_Obj(NOMATCHCOMPILER);
return NoMatchCompiler_init(self, parent, searcher, boost);
}
NoMatchCompiler*
NoMatchCompiler_init(NoMatchCompiler *self, NoMatchQuery *parent,
Searcher *searcher, float boost) {
return (NoMatchCompiler*)Compiler_init((Compiler*)self, (Query*)parent,
searcher, NULL, boost);
}
NoMatchCompiler*
NoMatchCompiler_deserialize(NoMatchCompiler *self, InStream *instream) {
self = self ? self : (NoMatchCompiler*)VTable_Make_Obj(NOMATCHCOMPILER);
return (NoMatchCompiler*)Compiler_deserialize((Compiler*)self, instream);
}
Matcher*
NoMatchCompiler_make_matcher(NoMatchCompiler *self, SegReader *reader,
bool_t need_score) {
UNUSED_VAR(self);
UNUSED_VAR(reader);
UNUSED_VAR(need_score);
return (Matcher*)NoMatchMatcher_new();
}