
/*
 * 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.
 */

#ifndef AXIS2_UTIL_H
#define AXIS2_UTIL_H

#include <axutil_allocator.h>
#include <axutil_array_list.h>
#include <axutil_class_loader.h>
#include <axutil_dir_handler.h>
#include <axutil_dll_desc.h>
#include <axutil_env.h>
#include <axutil_error.h>
#include <axutil_file.h>
#include <axutil_file_handler.h>
#include <axutil_hash.h>
#include <axutil_linked_list.h>
#include <axutil_log.h>
#include <axutil_network_handler.h>
#include <axutil_param.h>
#include <axutil_param_container.h>
#include <axutil_property.h>
#include <axutil_qname.h>
#include <axutil_stack.h>
#include <axutil_stream.h>
#include <axutil_string.h>
#include <axutil_string_util.h>
#include <axutil_thread_pool.h>
#include <axutil_types.h>
#include <axutil_url.h>
#include <axutil_utils.h>
#include <axutil_uuid_gen.h>
#include <platforms/axutil_platform_auto_sense.h>

#ifdef __cplusplus
extern "C"
{
#endif

    /** @} */

#ifdef __cplusplus
}
#endif

#endif                          /* AXIS2_UTIL_H */
