blob: 962e69b78268bcfdc280c1ea44ceffaf1972bbf2 [file] [log] [blame]
/* $Id$
*
* 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.
*/
/*
* field.c -- methods on the etch_field object.
* an etch_field is an etch_id_name representing a field of a struct or message
* (i.e. a key for a value).
*/
#include "etch_field.h"
#include "etch_objecttypes.h"
/**
* an etch_field is for now simply a typedef of etch_id_name.
* all its methods except ctor are #defined as those of etch_id_name.
*/
etch_field* new_field(const wchar_t* name)
{
etchparentinfo* inheritlist = NULL;
etch_field* newobj = (etch_field*) new_id_name(name);
if (NULL == newobj) return NULL;
((etch_object*)newobj)->obj_type = ETCHTYPEB_FIELD;
((etch_object*)newobj)->class_id = CLASSID_ID_FIELD;
/* fetch cached inheritance list, or create if initial instantiation,
* and ensure id_name parent keys exist in the (one-based) list */
inheritlist = get_vtab_inheritance_list((etch_object*)newobj, 2, 1, CLASSID_VTAB_FIELD);
ETCH_ASSERT(((etch_object*)newobj)->vtab && ((etch_object*)newobj)->vtab->inherits_from);
inheritlist[1].o.obj_type = ((etch_object*)newobj)->obj_type;
inheritlist[1].c.class_id = CLASSID_ID_NAME;
return newobj;
}
/**
* new__static_field()
* create a field object whose destructor will have no effect.
*/
etch_field* new_static_field(const wchar_t* name)
{
etch_field* newfield = new_field(name);
set_etchobj_static_all(newfield);
return newfield;
}
/**
* destroy_static_field()
* etch_field destructor.
* this should not be set as the virtual dtor for a field, since the field
* would then not be quasi-static as desired. it should be invoked explicitly
*/
int destroy_static_field(etch_field* field)
{
clear_etchobj_static_all(field);
return destroy_field(field);
}