| /* $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. | |
| */ | |
| /** | |
| * etch_arrayval.h | |
| */ | |
| #ifndef ETCHARRAYVAL_H | |
| #define ETCHARRAYVAL_H | |
| #include "etchmsgutl.h" | |
| #include "etch_arraylist.h" | |
| #define ETCHARRAYVAL_READONLY TRUE | |
| #define ETCHARRAYVAL_NOTREADONLY FALSE | |
| /** | |
| * etch_arrayvalue | |
| * an array of values, where each value is a pointer to an etch object. | |
| */ | |
| struct etch_arrayvalue | |
| { | |
| unsigned int hashkey; | |
| unsigned short obj_type; | |
| unsigned short class_id; | |
| struct vtabmask* vtab; | |
| int (*destroy) (void*); | |
| void*(*clone) (void*); | |
| obj_gethashkey get_hashkey; | |
| struct objmask* parent; | |
| etchresult* result; | |
| unsigned int refcount; | |
| unsigned int length; | |
| unsigned char is_null; | |
| unsigned char is_copy; | |
| unsigned char is_static; | |
| unsigned char reserved; | |
| etch_arraylist* list; | |
| unsigned short content_obj_type; /* etch obj_type of a native value */ | |
| unsigned short content_class_id; /* etch class_id of a native value */ | |
| int dim; | |
| /* this object may be masked by etch_collection_mask to determine content | |
| * type and class, so do not add any fields above this comment */ | |
| unsigned short content_item_size; /* byte count of a native value */ | |
| unsigned char is_array_owned; /* arrayvalue owns natarray? */ | |
| signed char type_code; /* external content type */ | |
| etch_type* custom_struct_type; /* not owned */ | |
| etch_nativearray* natarray; /* see is_array_owned */ | |
| }; | |
| typedef struct etch_arrayvalue etch_arrayvalue; | |
| /** | |
| * new_arrayvalue_arraylist() | |
| * allocates and returns an arraylist configured appropriately for use as arrayvalue backing store | |
| */ | |
| etch_arraylist* new_arrayvalue_arraylist(const int initsize, const int deltsize, | |
| const int is_readonly, const int is_synchronized); | |
| /* public methods on etch_arrayvalue */ | |
| etch_arrayvalue* new_arrayvalue(const byte type_code, etch_type* custom_struct_type, | |
| const int dim, const int initsize, const int deltsize, | |
| const int is_readonly, const int is_synchronized); | |
| etch_arrayvalue* new_arrayvalue_from(etch_nativearray* natarray, | |
| const signed char type_code, etch_type* custom_struct_type, | |
| const int initsize, const int deltsize, | |
| const int is_readonly); | |
| etch_arrayvalue* new_arrayvalue_default(); | |
| int destroy_arrayvalue(etch_arrayvalue* thisp); | |
| ETCH_ARRAY_ELEMENT* new_array_element(const int objtype); | |
| int arrayvalue_add (etch_arrayvalue* thisp, ETCH_ARRAY_ELEMENT* content); | |
| int arrayvalue_count(etch_arrayvalue*); | |
| void* arrayvalue_get(etch_arrayvalue*, const int index); | |
| int arrayvalue_set_iterator(etch_arrayvalue*, etch_iterator*); | |
| void arrayvalue_set_static_content(etch_arrayvalue*, const int is_set); | |
| int arrayvalue_to_nativearray(etch_arrayvalue*); | |
| signed char arrayvalue_get_external_typecode (unsigned short, unsigned short); | |
| signed char etch_classid_to_arraytype (const unsigned short class_id); | |
| unsigned short etch_arraytype_to_classid (const signed char typecode); | |
| #endif /* #ifndef ETCHARRAYVAL_H */ |