本文整理汇总了C++中DECREF函数的典型用法代码示例。如果您正苦于以下问题:C++ DECREF函数的具体用法?C++ DECREF怎么用?C++ DECREF使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DECREF函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TestBatchRunner_Destroy_IMP
void
TestBatchRunner_Destroy_IMP(TestBatchRunner *self) {
DECREF(self->formatter);
SUPER_DESTROY(self, TESTBATCHRUNNER);
}
示例2: QueryLexer_Tokenize_IMP
Vector*
QueryLexer_Tokenize_IMP(QueryLexer *self, String *query_string) {
QueryLexerIVARS *const ivars = QueryLexer_IVARS(self);
Vector *elems = Vec_new(0);
if (!query_string) { return elems; }
StringIterator *iter = Str_Top(query_string);
while (StrIter_Has_Next(iter)) {
ParserElem *elem = NULL;
if (StrIter_Skip_Whitespace(iter)) {
// Fast-forward past whitespace.
continue;
}
if (ivars->heed_colons) {
ParserElem *elem = S_consume_field(iter);
if (elem) {
Vec_Push(elems, (Obj*)elem);
}
}
int32_t code_point = StrIter_Next(iter);
switch (code_point) {
case '(':
elem = ParserElem_new(TOKEN_OPEN_PAREN, NULL);
break;
case ')':
elem = ParserElem_new(TOKEN_CLOSE_PAREN, NULL);
break;
case '+':
if (StrIter_Has_Next(iter)
&& !StrIter_Skip_Whitespace(iter)
) {
elem = ParserElem_new(TOKEN_PLUS, NULL);
}
else {
elem = ParserElem_new(TOKEN_STRING, (Obj*)Str_newf("+"));
}
break;
case '-':
if (StrIter_Has_Next(iter)
&& !StrIter_Skip_Whitespace(iter)
) {
elem = ParserElem_new(TOKEN_MINUS, NULL);
}
else {
elem = ParserElem_new(TOKEN_STRING, (Obj*)Str_newf("-"));
}
break;
case '"':
StrIter_Recede(iter, 1);
elem = S_consume_quoted_string(iter);
break;
case 'O':
StrIter_Recede(iter, 1);
elem = S_consume_keyword(iter, "OR", 2, TOKEN_OR);
if (!elem) {
elem = S_consume_text(iter);
}
break;
case 'A':
StrIter_Recede(iter, 1);
elem = S_consume_keyword(iter, "AND", 3, TOKEN_AND);
if (!elem) {
elem = S_consume_text(iter);
}
break;
case 'N':
StrIter_Recede(iter, 1);
elem = S_consume_keyword(iter, "NOT", 3, TOKEN_NOT);
if (!elem) {
elem = S_consume_text(iter);
}
break;
default:
StrIter_Recede(iter, 1);
elem = S_consume_text(iter);
break;
}
Vec_Push(elems, (Obj*)elem);
}
DECREF(iter);
return elems;
}
示例3: DefLexReader_Destroy_IMP
void
DefLexReader_Destroy_IMP(DefaultLexiconReader *self) {
DefaultLexiconReaderIVARS *const ivars = DefLexReader_IVARS(self);
DECREF(ivars->lexicons);
SUPER_DESTROY(self, DEFAULTLEXICONREADER);
}
示例4: Class_singleton
Class*
Class_singleton(String *class_name, Class *parent) {
if (Class_registry == NULL) {
Class_init_registry();
}
Class *singleton = (Class*)LFReg_fetch(Class_registry, class_name);
if (singleton == NULL) {
Vector *fresh_host_methods;
size_t num_fresh;
if (parent == NULL) {
String *parent_class = Class_find_parent_class(class_name);
if (parent_class == NULL) {
THROW(ERR, "Class '%o' doesn't descend from %o", class_name,
OBJ->name);
}
else {
parent = Class_singleton(parent_class, NULL);
DECREF(parent_class);
}
}
singleton = S_simple_subclass(parent, class_name);
// Allow host methods to override.
fresh_host_methods = Class_fresh_host_methods(class_name);
num_fresh = Vec_Get_Size(fresh_host_methods);
if (num_fresh) {
Hash *meths = Hash_new(num_fresh);
for (size_t i = 0; i < num_fresh; i++) {
String *meth = (String*)Vec_Fetch(fresh_host_methods, i);
Hash_Store(meths, meth, (Obj*)CFISH_TRUE);
}
for (Class *klass = parent; klass; klass = klass->parent) {
for (size_t i = 0; klass->methods[i]; i++) {
Method *method = klass->methods[i];
if (method->callback_func) {
String *name = Method_Host_Name(method);
if (Hash_Fetch(meths, name)) {
Class_Override(singleton, method->callback_func,
method->offset);
}
DECREF(name);
}
}
}
DECREF(meths);
}
DECREF(fresh_host_methods);
// Register the new class, both locally and with host.
if (Class_add_to_registry(singleton)) {
// Doing this after registering is racy, but hard to fix. :(
Class_register_with_host(singleton, parent);
}
else {
DECREF(singleton);
singleton = (Class*)LFReg_fetch(Class_registry, class_name);
if (!singleton) {
THROW(ERR, "Failed to either insert or fetch Class for '%o'",
class_name);
}
}
}
return singleton;
}
示例5: TestQPSyntax_run_tests
void
TestQPSyntax_run_tests(Folder *index)
{
uint32_t i;
TestBatch *batch = TestBatch_new(58);
IndexSearcher *searcher = IxSearcher_new((Obj*)index);
QueryParser *qparser = QParser_new(IxSearcher_Get_Schema(searcher),
NULL, NULL, NULL);
QParser_Set_Heed_Colons(qparser, true);
TestBatch_Plan(batch);
for (i = 0; leaf_test_funcs[i] != NULL; i++) {
kino_TestQPSyntax_test_t test_func = leaf_test_funcs[i];
TestQueryParser *test_case = test_func();
Query *tree = QParser_Tree(qparser, test_case->query_string);
Query *expanded = QParser_Expand_Leaf(qparser, test_case->tree);
Query *parsed = QParser_Parse(qparser, test_case->query_string);
Hits *hits = IxSearcher_Hits(searcher, (Obj*)parsed, 0, 10, NULL);
TEST_TRUE(batch, Query_Equals(tree, (Obj*)test_case->tree),
"tree() %s", (char*)CB_Get_Ptr8(test_case->query_string));
TEST_TRUE(batch, Query_Equals(expanded, (Obj*)test_case->expanded),
"expand_leaf() %s", (char*)CB_Get_Ptr8(test_case->query_string));
TEST_INT_EQ(batch, Hits_Total_Hits(hits), test_case->num_hits,
"hits: %s", (char*)CB_Get_Ptr8(test_case->query_string));
DECREF(hits);
DECREF(parsed);
DECREF(expanded);
DECREF(tree);
DECREF(test_case);
}
for (i = 0; syntax_test_funcs[i] != NULL; i++) {
kino_TestQPSyntax_test_t test_func = syntax_test_funcs[i];
TestQueryParser *test_case = test_func();
Query *tree = QParser_Tree(qparser, test_case->query_string);
Query *parsed = QParser_Parse(qparser, test_case->query_string);
Hits *hits = IxSearcher_Hits(searcher, (Obj*)parsed, 0, 10, NULL);
TEST_TRUE(batch, Query_Equals(tree, (Obj*)test_case->tree),
"tree() %s", (char*)CB_Get_Ptr8(test_case->query_string));
TEST_INT_EQ(batch, Hits_Total_Hits(hits), test_case->num_hits,
"hits: %s", (char*)CB_Get_Ptr8(test_case->query_string));
DECREF(hits);
DECREF(parsed);
DECREF(tree);
DECREF(test_case);
}
DECREF(batch);
DECREF(searcher);
DECREF(qparser);
}
示例6: Freezer_deserialize
Obj*
Freezer_deserialize(Obj *obj, InStream *instream) {
if (Obj_is_a(obj, STRING)) {
obj = (Obj*)Freezer_deserialize_string((String*)obj, instream);
}
else if (Obj_is_a(obj, BLOB)) {
obj = (Obj*)Freezer_deserialize_blob((Blob*)obj, instream);
}
else if (Obj_is_a(obj, VECTOR)) {
obj = (Obj*)Freezer_deserialize_varray((Vector*)obj, instream);
}
else if (Obj_is_a(obj, HASH)) {
obj = (Obj*)Freezer_deserialize_hash((Hash*)obj, instream);
}
else if (Obj_is_a(obj, INTEGER)) {
int64_t value = (int64_t)InStream_Read_C64(instream);
obj = (Obj*)Int_init((Integer*)obj, value);
}
else if (Obj_is_a(obj, FLOAT)) {
double value = InStream_Read_F64(instream);
obj = (Obj*)Float_init((Float*)obj, value);
}
else if (Obj_is_a(obj, BOOLEAN)) {
bool value = !!InStream_Read_U8(instream);
Obj *result = value ? INCREF(CFISH_TRUE) : INCREF(CFISH_FALSE);
// FIXME: This DECREF is essentially a no-op causing a
// memory leak.
DECREF(obj);
obj = result;
}
else if (Obj_is_a(obj, QUERY)) {
obj = (Obj*)Query_Deserialize((Query*)obj, instream);
}
else if (Obj_is_a(obj, DOC)) {
obj = (Obj*)Doc_Deserialize((Doc*)obj, instream);
}
else if (Obj_is_a(obj, DOCVECTOR)) {
obj = (Obj*)DocVec_Deserialize((DocVector*)obj, instream);
}
else if (Obj_is_a(obj, TERMVECTOR)) {
obj = (Obj*)TV_Deserialize((TermVector*)obj, instream);
}
else if (Obj_is_a(obj, SIMILARITY)) {
obj = (Obj*)Sim_Deserialize((Similarity*)obj, instream);
}
else if (Obj_is_a(obj, MATCHDOC)) {
obj = (Obj*)MatchDoc_Deserialize((MatchDoc*)obj, instream);
}
else if (Obj_is_a(obj, TOPDOCS)) {
obj = (Obj*)TopDocs_Deserialize((TopDocs*)obj, instream);
}
else if (Obj_is_a(obj, SORTSPEC)) {
obj = (Obj*)SortSpec_Deserialize((SortSpec*)obj, instream);
}
else if (Obj_is_a(obj, SORTRULE)) {
obj = (Obj*)SortRule_Deserialize((SortRule*)obj, instream);
}
else {
THROW(ERR, "Don't know how to deserialize a %o",
Obj_get_class_name(obj));
}
return obj;
}
示例7: StrIter_Destroy_IMP
void
StrIter_Destroy_IMP(StringIterator *self) {
DECREF(self->string);
SUPER_DESTROY(self, STRINGITERATOR);
}
示例8: BlobSortEx_Destroy_IMP
void
BlobSortEx_Destroy_IMP(BlobSortEx *self) {
BlobSortExIVARS *const ivars = BlobSortEx_IVARS(self);
DECREF(ivars->external);
SUPER_DESTROY(self, BLOBSORTEX);
}
示例9: TestQPLogic_Run_IMP
void
TestQPLogic_Run_IMP(TestQueryParserLogic *self, TestBatchRunner *runner) {
TestBatchRunner_Plan(runner, (TestBatch*)self, 258);
uint32_t i;
Folder *folder = S_create_index();
IndexSearcher *searcher = IxSearcher_new((Obj*)folder);
QueryParser *or_parser = QParser_new(IxSearcher_Get_Schema(searcher),
NULL, NULL, NULL);
String *AND = SSTR_WRAP_C("AND");
QueryParser *and_parser = QParser_new(IxSearcher_Get_Schema(searcher),
NULL, AND, NULL);
QParser_Set_Heed_Colons(or_parser, true);
QParser_Set_Heed_Colons(and_parser, true);
// Run logical tests with default boolop of OR.
for (i = 0; logical_test_funcs[i] != NULL; i++) {
LUCY_TestQPLogic_Logical_Test_t test_func = logical_test_funcs[i];
TestQueryParser *test_case_obj = test_func(BOOLOP_OR);
TestQueryParserIVARS *test_case = TestQP_IVARS(test_case_obj);
Query *tree = QParser_Tree(or_parser, test_case->query_string);
Query *parsed = QParser_Parse(or_parser, test_case->query_string);
Hits *hits = IxSearcher_Hits(searcher, (Obj*)parsed, 0, 10, NULL);
char *qstr = Str_To_Utf8(test_case->query_string);
TEST_TRUE(runner, Query_Equals(tree, (Obj*)test_case->tree),
"tree() OR %s", qstr);
TEST_INT_EQ(runner, Hits_Total_Hits(hits), test_case->num_hits,
"hits: OR %s", qstr);
free(qstr);
DECREF(hits);
DECREF(parsed);
DECREF(tree);
DECREF(test_case_obj);
}
// Run logical tests with default boolop of AND.
for (i = 0; logical_test_funcs[i] != NULL; i++) {
LUCY_TestQPLogic_Logical_Test_t test_func = logical_test_funcs[i];
TestQueryParser *test_case_obj = test_func(BOOLOP_AND);
TestQueryParserIVARS *test_case = TestQP_IVARS(test_case_obj);
Query *tree = QParser_Tree(and_parser, test_case->query_string);
Query *parsed = QParser_Parse(and_parser, test_case->query_string);
Hits *hits = IxSearcher_Hits(searcher, (Obj*)parsed, 0, 10, NULL);
char *qstr = Str_To_Utf8(test_case->query_string);
TEST_TRUE(runner, Query_Equals(tree, (Obj*)test_case->tree),
"tree() AND %s", qstr);
TEST_INT_EQ(runner, Hits_Total_Hits(hits), test_case->num_hits,
"hits: AND %s", qstr);
free(qstr);
DECREF(hits);
DECREF(parsed);
DECREF(tree);
DECREF(test_case_obj);
}
// Run tests for QParser_Prune().
for (i = 0; prune_test_funcs[i] != NULL; i++) {
LUCY_TestQPLogic_Prune_Test_t test_func = prune_test_funcs[i];
TestQueryParser *test_case_obj = test_func();
TestQueryParserIVARS *test_case = TestQP_IVARS(test_case_obj);
String *qstring = test_case->tree
? Query_To_String(test_case->tree)
: Str_new_from_trusted_utf8("(NULL)", 6);
char *qstr = Str_To_Utf8(qstring);
Query *tree = test_case->tree;
Query *wanted = test_case->expanded;
Query *pruned = QParser_Prune(or_parser, tree);
Query *expanded;
Hits *hits;
TEST_TRUE(runner, Query_Equals(pruned, (Obj*)wanted),
"prune() %s", qstr);
expanded = QParser_Expand(or_parser, pruned);
hits = IxSearcher_Hits(searcher, (Obj*)expanded, 0, 10, NULL);
TEST_INT_EQ(runner, Hits_Total_Hits(hits), test_case->num_hits,
"hits: %s", qstr);
free(qstr);
DECREF(hits);
DECREF(expanded);
DECREF(pruned);
DECREF(qstring);
DECREF(test_case_obj);
}
DECREF(and_parser);
DECREF(or_parser);
DECREF(searcher);
DECREF(folder);
}
示例10: Err_warn_mess
void
Err_warn_mess(CharBuf *message) {
fprintf(stderr, "%s", CB_Get_Ptr8(message));
DECREF(message);
}
示例11: RAMFileDes_destroy
void
RAMFileDes_destroy(RAMFileDes *self)
{
DECREF(self->buffers);
SUPER_DESTROY(self, RAMFILEDES);
}
示例12: SegWriter_Set_Del_Writer_IMP
void
SegWriter_Set_Del_Writer_IMP(SegWriter *self, DeletionsWriter *del_writer) {
SegWriterIVARS *const ivars = SegWriter_IVARS(self);
DECREF(ivars->del_writer);
ivars->del_writer = (DeletionsWriter*)INCREF(del_writer);
}
示例13: HeatMap_Destroy_IMP
void
HeatMap_Destroy_IMP(HeatMap *self) {
HeatMapIVARS *const ivars = HeatMap_IVARS(self);
DECREF(ivars->spans);
SUPER_DESTROY(self, HEATMAP);
}
示例14: SnowStop_Destroy_IMP
void
SnowStop_Destroy_IMP(SnowballStopFilter *self) {
SnowballStopFilterIVARS *const ivars = SnowStop_IVARS(self);
DECREF(ivars->stoplist);
SUPER_DESTROY(self, SNOWBALLSTOPFILTER);
}
示例15: _varintDestructor
static void _varintDestructor(void * privdata, void * value)
{
DICT_NOTUSED(privdata);
DECREF((varint_t*)value);
}