Loading...
Searching...
No Matches
globus_object.h
/*
* Copyright 1999-2006 University of Chicago
*
* Licensed 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.
*/
#ifndef GLOBUS_OBJECT_H
#define GLOBUS_OBJECT_H
#include "globus_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/**********************************************************************
* Object API Types
* globus_object_type_t -- class definitions
* globus_object_t -- class instances
**********************************************************************/
typedef void (*globus_object_copy_func_t) (void * src_instance_data,
void ** dst_instance_data);
typedef void (*globus_object_destructor_func_t) (void * instance_data);
typedef struct globus_object_type_s {
const struct globus_object_type_s * const parent_type;
globus_object_copy_func_t const copy_func;
globus_object_destructor_func_t const destructor;
void * const class_data;
} globus_object_type_t;
typedef struct globus_object_s {
const globus_object_type_t * type;
struct globus_object_s * parent_object;
void * instance_data;
int ref_count;
} globus_object_t;
typedef char * (*globus_object_printable_string_func_t)
(globus_object_t * error);
/**********************************************************************
* Object Creation API
**********************************************************************/
extern globus_object_t *
globus_object_construct (const globus_object_type_t * create_type);
/* returns new object, or
* returns NULL on any failure */
extern globus_object_t *
globus_object_initialize_base (globus_object_t * object);
extern globus_object_t *
globus_object_construct_base ();
#define globus_object_static_initializer(object_type, \
parent_prototype) \
{ \
(object_type), \
(parent_prototype), \
((void *) NULL), \
1 \
}
extern globus_object_t *
globus_object_copy (const globus_object_t * object);
/* returns fresh copy, or
* returns NULL on error or if object is NULL */
void
globus_object_reference(globus_object_t * object);
extern void
globus_object_free (globus_object_t * object);
/* does nothing if object is NULL or globus_object_is_static(object) is true
*/
#define globus_object_type_static_initializer(parent_type, \
copy_func, \
destructor, \
class_data) \
{ \
(parent_type), \
(copy_func), \
(destructor), \
(class_data) \
}
#define globus_object_printable_type_static_initializer(pt,cf,df,s) \
globus_object_type_static_initializer((pt),(cf),(df),(void *)(s))
extern globus_object_t *
globus_object_initialize_printable (globus_object_t * object);
extern globus_object_t *
globus_object_construct_printable ();
/**********************************************************************
* Standard Object Type
**********************************************************************/
extern const globus_object_type_t GLOBUS_OBJECT_TYPE_BASE_DEFINITION;
#define GLOBUS_OBJECT_TYPE_BASE (&GLOBUS_OBJECT_TYPE_BASE_DEFINITION)
extern const globus_object_type_t
GLOBUS_OBJECT_TYPE_PRINTABLE_DEFINITION;
#define GLOBUS_OBJECT_TYPE_PRINTABLE \
(&GLOBUS_OBJECT_TYPE_PRINTABLE_DEFINITION)
/**********************************************************************
* Basic Static Object Value
**********************************************************************/
extern globus_object_t GLOBUS_OBJECT_BASE_STATIC_PROTOTYPE;
#define GLOBUS_OBJECT_BASE_PROTOTYPE (&GLOBUS_OBJECT_BASE_STATIC_PROTOTYPE)
extern globus_object_t
GLOBUS_OBJECT_PRINTABLE_STATIC_PROTOTYPE;
#define GLOBUS_OBJECT_PRINTABLE_PROTOTYPE \
(&GLOBUS_OBJECT_PRINTABLE_STATIC_PROTOTYPE)
/**********************************************************************
* Object Manipulation API
**********************************************************************/
extern const globus_object_type_t *
globus_object_get_type (const globus_object_t * object);
/* returns type of object, or
* returns NULL if object is NULL */
extern const globus_object_type_t *
globus_object_type_get_parent_type (const globus_object_type_t * type);
/* returns parent type of type, or
* returns NULL if type is NULL */
extern globus_bool_t
globus_object_is_static (const globus_object_t * object);
/* returns GLOBUS_TRUE if either object is initialized by
* globus_object_initialize_static() or
* returns GLOBUS_FALSE otherwise */
extern void *
globus_object_type_get_class_data (const globus_object_type_t * type);
/* returns class data (may be NULL), or
* returns NULL if object is NULL */
extern globus_bool_t
globus_object_type_match (const globus_object_type_t * subtype,
const globus_object_type_t * supertype);
/* returns GLOBUS_TRUE iff subtype is an ancestor of supertype,
* returns GLOBUS_FALSE otherwise */
extern globus_object_t *
globus_object_upcast (globus_object_t * object,
const globus_object_type_t * desired_type);
/* returns object representing the desired_type portion of the object if
* the object was constructed as an instance of desired_type (or one of its
* descendants), or
* returns NULL otherwise.
* objects returned are shared subsets of the original object. */
extern void
globus_object_set_local_instance_data (globus_object_t * object,
void * instance_data);
/* does nothing if object is NULL */
extern void *
globus_object_get_local_instance_data (const globus_object_t * object);
/* returns instance data of object (may be NULL), or
* returns NULL if object is NULL */
extern char *
globus_object_printable_to_string (globus_object_t * object);
extern globus_object_printable_string_func_t
globus_object_printable_get_string_func (globus_object_t * object);
#include "globus_module.h"
extern globus_module_descriptor_t globus_i_object_module;
#define GLOBUS_OBJECT_MODULE (&globus_i_object_module)
#ifdef __cplusplus
}
#endif
#endif /* GLOBUS_OBJECT_H */
globus_module.h
Reference Counting Module Activation and Deactivation.
globus_types.h
Common Primitive Types.
globus_bool_t
int globus_bool_t
Boolean type.
Definition globus_types.h:93