C++ API Reference
Transcription
C++ API Reference
C++ A P I Reference Release 6.3 C++ A P I Reference ObjectStore Release 6.3 for all platforms, October 2005 © 2005 Progress Software Corporation. All rights reserved. Progress® software products are copyrighted and all rights are reserved by Progress Software Corporation. This manual is also copyrighted and all rights are reserved. This manual may not, in whole or in part, be copied, photocopied, translated, or reduced to any electronic medium or machine-readable form without prior consent, in writing, from Progress Software Corporation. The information in this manual is subject to change without notice, and Progress Software Corporation assumes no responsibility for any errors that may appear in this document. The references in this manual to specific platforms supported are subject to change. A (and design), Allegrix, Allegrix (and design), Apama, Business Empowerment, DataDirect (and design), DataDirect Connect, DataDirect Connect OLE DB, DirectAlert, EasyAsk, EdgeXtend, Empowerment Center, eXcelon, Fathom,, IntelliStream, O (and design), ObjectStore, OpenEdge, PeerDirect, P.I.P., POSSENET, Powered by Progress, Progress, Progress Dynamics, Progress Empowerment Center, Progress Empowerment Program, Progress Fast Track, Progress OpenEdge, Partners in Progress, Partners en Progress, Persistence, Persistence (and design), ProCare, Progress en Partners, Progress in Progress, Progress Profiles, Progress Results, Progress Software Developers Network, ProtoSpeed, ProVision, SequeLink, SmartBeans, SpeedScript, Stylus Studio, Technical Empowerment, WebSpeed, and Your Software, Our Technology-Experience the Connection are registered trademarks of Progress Software Corporation or one of its subsidiaries or affiliates in the U.S. and/or other countries. AccelEvent, A Data Center of Your Very Own, AppsAlive, AppServer, ASPen, ASP-in-a-Box, BusinessEdge, Cache-Forward, DataDirect, DataDirect Connect64, DataDirect Technologies, DataDirect XQuery, DataXtend, Future Proof, ObjectCache, ObjectStore Event Engine, ObjectStore Inspector, ObjectStore Performance Expert, POSSE, ProDataSet, Progress Business Empowerment, Progress DataXtend, Progress for Partners, Progress ObjectStore, PSE Pro, PS Select, SectorAlliance, SmartBrowser, SmartComponent, SmartDataBrowser, SmartDataObjects, SmartDataView, SmartDialog, SmartFolder, SmartFrame, SmartObjects, SmartPanel, SmartQuery, SmartViewer, SmartWindow, WebClient, and Who Makes Progress are trademarks or service marks of Progress Software Corporation or one of its subsidiaries or affiliates in the U.S. and other countries. Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. Any other trademarks or trade names contained herein are the property of their respective owners. ObjectStore includes software developed by the Apache Software Foundation (http://www.apache.org/). Copyright 2000-2003 The Apache Software Foundation. All rights reserved. The names "Ant," "Xerces," and "Apache Software Foundation" must not be used to endorse or promote products derived from the Products without prior written permission. Any product derived from the Products may not be called "Apache", nor may "Apache" appear in their name, without prior written permission. For written permission, please contact [email protected]. September 2005 Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Chapter 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ObjectStore Database Services . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Chapter 2 Class Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ObjectStore classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 basic_undo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 basic_undo::basic_undo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 basic_undo::get_exception() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 basic_undo::has_exception() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 basic_undo::~basic_undo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 objectstore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 objectstore::acquire_address_space(). . . . . . . . . . . . . . . . . . . . . . . . . 54 objectstore::acquire_lock() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 objectstore::add_missing_dispatch_table_handler() . . . . . . . . . . . . . . . 57 objectstore::change_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 objectstore::clear_persistent_to_transient_pointers() . . . . . . . . . . . . . . 58 objectstore::embedded_server_available() . . . . . . . . . . . . . . . . . . . . . 59 objectstore::enable_damaged_dope_repair(). . . . . . . . . . . . . . . . . . . . 59 objectstore::enable_DLL_schema(). . . . . . . . . . . . . . . . . . . . . . . . . . . 60 objectstore::export_object() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 objectstore::find_DLL_schema(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 objectstore::free_memory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 objectstore::get_address_space_generation_number() . . . . . . . . . . . . . 62 objectstore::get_all_servers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 objectstore::get_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . . . 62 objectstore::get_always_check_server_connection_at_commit() . . . . . . 63 objectstore::get_application_schema_pathname() . . . . . . . . . . . . . . . . 64 objectstore::get_as_intervals() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 objectstore::get_asmarkers_useless() . . . . . . . . . . . . . . . . . . . . . . . . 64 objectstore::get_auto_open_mode(). . . . . . . . . . . . . . . . . . . . . . . . . . 64 Release 6.3 3 Contents objectstore::get_autoload_DLLs_function() . . . . . . . . . . . . . . . . . . . . . . 64 objectstore::get_cache_file(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 objectstore::get_cache_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 objectstore::get_client_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 objectstore::get_decache_soft_pointers_after_address_space_release() . 65 objectstore::get_default_address_space_partition_size() . . . . . . . . . . . . 65 objectstore::get_export_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 objectstore::get_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 objectstore::get_incremental_schema_installation(). . . . . . . . . . . . . . . . 67 objectstore::get_locator_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 objectstore::get_lock_option(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 objectstore::get_lock_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 objectstore::get_lock_timeout(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 objectstore::get_log_file(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 objectstore::get_n_servers() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 objectstore::get_null_illegal_pointers(). . . . . . . . . . . . . . . . . . . . . . . . . 69 objectstore::get_object_range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 objectstore::get_page_size(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 objectstore::get_pointer_numbers(). . . . . . . . . . . . . . . . . . . . . . . . . . . 70 objectstore::get_propagate_on_commit() . . . . . . . . . . . . . . . . . . . . . . . 70 objectstore::get_retain_persistent_addresses() . . . . . . . . . . . . . . . . . . . 71 objectstore::get_simple_auth_ui() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 objectstore::get_suppress_invalid_hard_pointer_errors() . . . . . . . . . . . . 71 objectstore::get_transaction_max_retries() . . . . . . . . . . . . . . . . . . . . . 71 objectstore::get_transaction_priority() . . . . . . . . . . . . . . . . . . . . . . . . . 71 objectstore::get_transient_delete_function(). . . . . . . . . . . . . . . . . . . . . 72 objectstore::get_union_variant() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 objectstore::ignore_locator_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 objectstore::initialize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 objectstore::initialize_for_sessions() . . . . . . . . . . . . . . . . . . . . . . . . . . 73 objectstore::is_damaged_dope_repair_enabled(). . . . . . . . . . . . . . . . . . 75 objectstore::is_DLL_schema_enabled() . . . . . . . . . . . . . . . . . . . . . . . . 75 objectstore::is_multiple_session_mode() . . . . . . . . . . . . . . . . . . . . . . . 75 objectstore::is_persistent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 objectstore::is_single_session_mode() . . . . . . . . . . . . . . . . . . . . . . . . . 75 objectstore::is_unassigned_contiguous_address_space() . . . . . . . . . . . . 76 objectstore::load_DLL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 objectstore::lock_as_used. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 objectstore::lock_cluster_read. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4 4 objectstore::lock_cluster_write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 C++ A P I Reference Contents objectstore::lock_database_read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 objectstore::lock_database_write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 objectstore::lock_page_write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 objectstore::lock_segment_read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 objectstore::lock_segment_write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 objectstore::lookup_DLL_symbol() . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 objectstore::network_servers_available() . . . . . . . . . . . . . . . . . . . . . . 79 objectstore::own_page_write. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 objectstore::propagate_log() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 objectstore::release_cleared_persistent_to_transient_pointers() . . . . . . 79 objectstore::release_maintenance() . . . . . . . . . . . . . . . . . . . . . . . . . . 80 objectstore::release_major() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 objectstore::release_minor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 objectstore::release_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 objectstore::release_persistent_addresses() . . . . . . . . . . . . . . . . . . . . 81 objectstore::reset_persistent_addresses() . . . . . . . . . . . . . . . . . . . . . . 81 objectstore::retain_persistent_addresses() . . . . . . . . . . . . . . . . . . . . . 81 objectstore::return_all_pages() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 objectstore::return_memory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 objectstore::set_allocation_strategy(). . . . . . . . . . . . . . . . . . . . . . . . . 82 objectstore::set_always_check_server_connection_at_commit() . . . . . . 82 objectstore::set_always_null_illegal_pointers() . . . . . . . . . . . . . . . . . . 83 objectstore::set_application_schema_pathname() . . . . . . . . . . . . . . . . 83 objectstore::set_asmarkers_useless(). . . . . . . . . . . . . . . . . . . . . . . . . 83 objectstore::set_autoload_DLLs_function() . . . . . . . . . . . . . . . . . . . . . 83 objectstore::set_auto_open_mode() . . . . . . . . . . . . . . . . . . . . . . . . . . 83 objectstore::set_cache_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 objectstore::set_cache_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 objectstore::set_client_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 objectstore::set_current_schema_key() . . . . . . . . . . . . . . . . . . . . . . . 86 objectstore::set_decache_soft_pointers_after_address_space_release() . 86 objectstore::set_default_address_space_partition_size() . . . . . . . . . . . 87 objectstore::set_fetch_policy(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 objectstore::set_handle_transient_faults() . . . . . . . . . . . . . . . . . . . . . 88 objectstore::set_incremental_schema_installation() . . . . . . . . . . . . . . . 88 objectstore::set_locator_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 objectstore::set_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 objectstore::set_lock_timeout() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 objectstore::set_log_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 objectstore::set_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . . . 90 Release 6.3 5 Contents objectstore::set_pathname_encoding() . . . . . . . . . . . . . . . . . . . . . . . . 90 objectstore::set_persistent_to_transient_pointer(). . . . . . . . . . . . . . . . . 90 objectstore::set_propagate_on_commit() . . . . . . . . . . . . . . . . . . . . . . . 91 objectstore::set_reserve_as_mode() . . . . . . . . . . . . . . . . . . . . . . . . . . 91 objectstore::set_retain_persistent_addresses() . . . . . . . . . . . . . . . . . . . 91 objectstore::set_simple_auth_ui() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 objectstore::set_suppress_invalid_hard_pointer_errors() . . . . . . . . . . . . 92 objectstore::set_transaction_max_retries(). . . . . . . . . . . . . . . . . . . . . . 92 objectstore::set_transaction_priority() . . . . . . . . . . . . . . . . . . . . . . . . . 92 objectstore::set_transient_delete_function() . . . . . . . . . . . . . . . . . . . . . 93 objectstore::set_union_variant() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 objectstore::shutdown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 objectstore::unload_DLL(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 objectstore::which_product() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 objectstore_exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 objectstore_exception::signal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 objectstore_exception::vsignal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 os_access_modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 os_access_modifier::create(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 os_access_modifier::get_base_member() . . . . . . . . . . . . . . . . . . . . . . . 97 os_access_modifier::set_base_member() . . . . . . . . . . . . . . . . . . . . . . . 97 os_address_space_marker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 os_address_space_marker::get_current(). . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::get_level() . . . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::get_next(). . . . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::get_previous() . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::of(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::os_address_space_marker() . . . . . . . . . . . . 99 os_address_space_marker::release() . . . . . . . . . . . . . . . . . . . . . . . . . . 99 os_address_space_marker::retain() . . . . . . . . . . . . . . . . . . . . . . . . . . 100 os_address_space_marker::~os_address_space_marker() . . . . . . . . . . 100 os_anonymous_indirect_type . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::create(). . . . . . . . . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::get_target_type(). . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::is_const() . . . . . . . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::is_volatile() . . . . . . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::set_is_const() . . . . . . . . . . . . . . . . . . . 101 os_anonymous_indirect_type::set_is_volatile( ) . . . . . . . . . . . . . . . . . . 101 os_app_schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6 6 os_app_schema::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 C++ A P I Reference Contents os_application_schema_info . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 os_archiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 os_archiver::os_archiver(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 os_archiver::~os_archiver() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 os_archiver::add_db_to_archive() . . . . . . . . . . . . . . . . . . . . . . . . . . .104 os_archiver::change_time_interval() . . . . . . . . . . . . . . . . . . . . . . . . .104 os_archiver::get_current_archive_file_name() . . . . . . . . . . . . . . . . . . .104 os_archiver::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 os_archiver::remove_db_from_archive(). . . . . . . . . . . . . . . . . . . . . . .105 os_archiver::start_archiver() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 os_archiver::stop_archiver() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 os_archiver::take_a_snapshot() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 os_archiver_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 os_archiver_options::os_archiver_options(). . . . . . . . . . . . . . . . . . . . .107 os_archiver_options::~os_archiver_options() . . . . . . . . . . . . . . . . . . .107 os_archiver_options::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107 os_array_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 os_array_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 os_array_type::get_element_type() . . . . . . . . . . . . . . . . . . . . . . . . . .108 os_array_type::get_number_of_elements(). . . . . . . . . . . . . . . . . . . . .108 os_array_type::set_element_type() . . . . . . . . . . . . . . . . . . . . . . . . . .108 os_array_type::set_number_of_elements() . . . . . . . . . . . . . . . . . . . . .108 os_authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 os_authentication::get_nt_registry_location() . . . . . . . . . . . . . . . . . . .109 os_authentication::set_nt_registry_location() . . . . . . . . . . . . . . . . . . .109 os_backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 os_backup::os_backup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 os_backup::~os_backup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 os_backup::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 os_backup::start_and_run_backup() . . . . . . . . . . . . . . . . . . . . . . . . .110 os_backup::start_backup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 os_backup::stop_backup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 os_backup_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 os_backup_options::os_backup_options() . . . . . . . . . . . . . . . . . . . . . .115 os_backup_options::~os_backup_options() . . . . . . . . . . . . . . . . . . . . .115 os_backup_options::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 os_base_class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 os_base_class::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 os_base_class::get_access() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 os_base_class::get_class() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 Release 6.3 7 Contents os_base_class::get_offset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 os_base_class::get_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::get_virtual_base_class_pointer_offset() . . . . . . . . . . . . 117 os_base_class::is_virtual() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::Private . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::Protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::Public . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::set_access() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::set_class() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 os_base_class::set_offset(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 os_base_class::set_virtual_base_class_no_pointer() . . . . . . . . . . . . . . 118 os_base_class::set_virtual_base_class_pointer_offset() . . . . . . . . . . . . 118 os_base_class::set_virtuals_redefined() . . . . . . . . . . . . . . . . . . . . . . . 118 os_base_class::virtual_base_class_has_pointer() . . . . . . . . . . . . . . . . 118 os_base_class::virtuals_redefined() . . . . . . . . . . . . . . . . . . . . . . . . . . 118 os_class_type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 os_class_type::Anonymous_union . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 os_class_type::Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 os_class_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 os_class_type::declares_get_os_typespec_function() . . . . . . . . . . . . . . 120 os_class_type::defines_virtual_functions() . . . . . . . . . . . . . . . . . . . . . 120 os_class_type::find_base_class() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 os_class_type::find_member_variable() . . . . . . . . . . . . . . . . . . . . . . . 120 os_class_type::get_access_of_get_os_typespec_function(). . . . . . . . . . 121 os_class_type::get_allocated_virtual_base_classes() . . . . . . . . . . . . . . 121 os_class_type::get_base_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . 121 os_class_type::get_class_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 os_class_type::get_dispatch_table_pointer_offset() . . . . . . . . . . . . . . . 122 os_class_type::get_dispatch_table_pointer_offset_other_compiler() . . . 122 os_class_type::get_indirect_virtual_base_classes() . . . . . . . . . . . . . . . 122 os_class_type::get_members() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 os_class_type::get_most_derived_class() . . . . . . . . . . . . . . . . . . . . . . 123 os_class_type::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 os_class_type::get_pragmas(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 os_class_type::get_size_as_base() . . . . . . . . . . . . . . . . . . . . . . . . . . 125 os_class_type::get_source_position(). . . . . . . . . . . . . . . . . . . . . . . . . 125 os_class_type::has_constructor() . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 os_class_type::has_destructor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 os_class_type::has_dispatch_table() . . . . . . . . . . . . . . . . . . . . . . . . . 126 8 8 os_class_type::has_dispatch_table_other_compiler() . . . . . . . . . . . . . . 126 C++ A P I Reference Contents os_class_type::introduces_virtual_functions() . . . . . . . . . . . . . . . . . . .126 os_class_type::is_abstract() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 os_class_type::is_forward_definition() . . . . . . . . . . . . . . . . . . . . . . . .126 os_class_type::is_persistent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 os_class_type::is_template_class() . . . . . . . . . . . . . . . . . . . . . . . . . .126 os_class_type::operator os_instantiated_class_type&() . . . . . . . . . . . .127 os_class_type::set_access_of_get_os_typespec_function() . . . . . . . . . .127 os_class_type::set_base_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . .127 os_class_type::set_class_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 os_class_type::set_declares_get_os_typespec_function() . . . . . . . . . . .127 os_class_type::set_defines_virtual_functions() . . . . . . . . . . . . . . . . . .127 os_class_type::set_dispatch_table_pointer_offset() . . . . . . . . . . . . . . .128 os_class_type::set_has_constructor() . . . . . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_has_destructor() . . . . . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_indirect_virtual_base_classes() . . . . . . . . . . . . . . .128 os_class_type::set_introduces_virtual_functions() . . . . . . . . . . . . . . . .128 os_class_type::set_is_abstract() . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_is_forward_definition() . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_is_persistent() . . . . . . . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_members() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 os_class_type::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 os_class_type::set_pragmas() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 os_class_type::set_source_position() . . . . . . . . . . . . . . . . . . . . . . . . .129 os_class_type::Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 os_class_type::Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 os_close_database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 os_cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 os_cluster::database_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 os_cluster::destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 os_cluster::get_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . . . .131 os_cluster::get_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 os_cluster::get_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 os_cluster::get_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . . .132 os_cluster::get_number() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::get_transient_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::is_deleted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::is_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::is_transient_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 os_cluster::release_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 Release 6.3 9 Contents os_cluster::retain_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 os_cluster::return_memory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 os_cluster::segment_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 os_cluster::session_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 os_cluster::set_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . . . . 135 os_cluster::set_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 os_cluster::set_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 os_cluster::set_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . . . 136 os_cluster::set_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 os_cluster::size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 os_cluster::with() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 os_cluster_cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 os_cluster_cursor::os_cluster_cursor() . . . . . . . . . . . . . . . . . . . . . . . . 138 os_cluster_cursor::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 os_cluster_cursor::next() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 os_cluster_cursor::reset(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 os_cluster_with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 os_cluster_with::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 os_compact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 os_compact::augment_cluster_split_avoidance() . . . . . . . . . . . . . . . . . 141 os_compact::augment_post_compact_transformers() . . . . . . . . . . . . . 141 os_compact::compact() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 os_compact::initialize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 os_compact::set_address_space_release_interval() . . . . . . . . . . . . . . . 144 os_compact::set_avoid_page_boundary(). . . . . . . . . . . . . . . . . . . . . . 144 os_compact::set_explanation_level() . . . . . . . . . . . . . . . . . . . . . . . . . 144 os_compact::set_malloc_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 os_compact::set_maplet_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 os_compact::set_maximum_cluster_size() . . . . . . . . . . . . . . . . . . . . . 145 os_compact::set_maximum_memory_size() . . . . . . . . . . . . . . . . . . . . 145 os_compact::shutdown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 os_comp_schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 os_comp_schema::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 os_database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 os_database::affiliate(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 os_database::change_affiliation() . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 os_database::change_schema_key() . . . . . . . . . . . . . . . . . . . . . . . . . 149 os_database::close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 os_database::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 10 10 os_database::create_root() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 C++ A P I Reference Contents os_database::create_segment() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 os_database::destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 os_database::find_root(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 os_database::freeze_schema_key() . . . . . . . . . . . . . . . . . . . . . . . . . .153 os_database::get_affiliated_databases() . . . . . . . . . . . . . . . . . . . . . . .154 os_database::get_affiliation_index_of() . . . . . . . . . . . . . . . . . . . . . . .154 os_database::get_all_databases() . . . . . . . . . . . . . . . . . . . . . . . . . . .154 os_database::get_all_roots() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 os_database::get_all_segments(). . . . . . . . . . . . . . . . . . . . . . . . . . . .155 os_database::get_all_segments_and_permissions() . . . . . . . . . . . . . . .155 os_database::get_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . .156 os_database::get_application_info() . . . . . . . . . . . . . . . . . . . . . . . . . .156 os_database::get_default_segment() . . . . . . . . . . . . . . . . . . . . . . . . .156 os_database::get_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 os_database::get_file_host_name() . . . . . . . . . . . . . . . . . . . . . . . . . .157 os_database::get_fragmentation() . . . . . . . . . . . . . . . . . . . . . . . . . . .157 os_database::get_host_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 os_database::get_incremental_schema_installation() . . . . . . . . . . . . . .158 os_database::get_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 os_database::get_n_databases() . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 os_database::get_n_roots() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 os_database::get_n_segments() . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 os_database::get_new_segment_reference_policy(). . . . . . . . . . . . . . .159 os_database::get_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . .159 os_database::get_open_mode(). . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 os_database::get_path_to() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 os_database::get_pathname() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 os_database::get_required_DLL_identifiers(). . . . . . . . . . . . . . . . . . . .160 os_database::get_schema_database() . . . . . . . . . . . . . . . . . . . . . . . .161 os_database::get_sector_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 os_database::get_segment() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 os_database::get_segments() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 os_database::get_transient_database() . . . . . . . . . . . . . . . . . . . . . . .161 os_database::has_affiliation_to() . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 os_database::insert_required_DLL_identifier(). . . . . . . . . . . . . . . . . . .162 os_database::insert_required_DLL_identifiers() . . . . . . . . . . . . . . . . . .162 os_database::is_open(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 os_database::is_open_multi_db_mvcc() . . . . . . . . . . . . . . . . . . . . . . .162 os_database::is_open_mvcc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163 os_database::is_open_read_only() . . . . . . . . . . . . . . . . . . . . . . . . . . .163 Release 6.3 11 Contents os_database::is_open_single_db_mvcc() . . . . . . . . . . . . . . . . . . . . . . 163 os_database::is_open_update(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 os_database::is_transient_database() . . . . . . . . . . . . . . . . . . . . . . . . 163 os_database::lookup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 os_database::of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 os_database::open() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 os_database::open_multi_db_mvcc() . . . . . . . . . . . . . . . . . . . . . . . . . 165 os_database::open_mvcc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 os_database::release_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 os_database::retain_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 os_database::remove_required_DLL_identifier() . . . . . . . . . . . . . . . . . 167 os_database::return_memory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 os_database::session_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 os_database::set_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . . 168 os_database::set_application_info() . . . . . . . . . . . . . . . . . . . . . . . . . . 168 os_database::set_default_segment() . . . . . . . . . . . . . . . . . . . . . . . . . 168 os_database::set_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 os_database::set_incremental_schema_installation() . . . . . . . . . . . . . . 169 os_database::set_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 os_database::set_new_segment_reference_policy(). . . . . . . . . . . . . . . 170 os_database::set_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . . 170 os_database::set_schema_database() . . . . . . . . . . . . . . . . . . . . . . . . 170 os_database::set_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 os_database::set_size_in_sectors() . . . . . . . . . . . . . . . . . . . . . . . . . . 171 os_database::size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 os_database::size_in_sectors() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 os_database::time_created(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 os_database_root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::find() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::get_typespec() . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::get_value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 os_database_root::release_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . 173 os_database_root::retain_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . 173 os_database_root::set_value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 os_database_root::~os_database_root() . . . . . . . . . . . . . . . . . . . . . . 174 os_database_schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 os_database_schema::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 12 12 os_database_schema::get_for_update() . . . . . . . . . . . . . . . . . . . . . . . 175 C++ A P I Reference Contents os_database_schema::install(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 os_Database_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 os_Database_table::find_reference() . . . . . . . . . . . . . . . . . . . . . . . . .176 os_Database_table::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 os_Database_table::insert() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 os_Database_table::is_ignored() . . . . . . . . . . . . . . . . . . . . . . . . . . . .177 os_dbutil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 os_dbutil::chgrp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 os_dbutil::chmod() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 os_dbutil::chown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 os_dbutil::close_all_connections() . . . . . . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::close_all_server_connections() . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::close_server_connection() . . . . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::cmgr_remove_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::cmgr_shutdown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::cmgr_stat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 os_dbutil::compare_schemas() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 os_dbutil::copy_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182 os_dbutil::disk_free() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182 os_dbutil::expand_global() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182 os_dbutil::file_db_pathname() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 os_dbutil::get_client_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 os_dbutil::get_sector_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 os_dbutil::hostof() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 os_dbutil::initialize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 os_dbutil::install_backrest_control_c_handler() . . . . . . . . . . . . . . . . . .183 os_dbutil::list_directory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184 os_dbutil::make_link() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184 os_dbutil::mkdir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 os_dbutil::osdbcontrol() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 os_dbutil::ossize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186 os_dbutil::osverifydb() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187 os_dbutil::osverifydb_one_segment() . . . . . . . . . . . . . . . . . . . . . . . . .188 os_dbutil::rehost_all_links() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189 os_dbutil::rehost_link(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189 os_dbutil::remove() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 os_dbutil::rename() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 os_dbutil::rmdir(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 os_dbutil::set_application_schema_path(). . . . . . . . . . . . . . . . . . . . . .190 os_dbutil::set_client_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191 Release 6.3 13 Contents os_dbutil::split_pathname() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 os_dbutil::start_backrest_logging() . . . . . . . . . . . . . . . . . . . . . . . . . . 191 os_dbutil::stat(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 os_dbutil::stop_backrest_logging() . . . . . . . . . . . . . . . . . . . . . . . . . . 192 os_dbutil::svr_checkpoint(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 os_dbutil::svr_client_kill(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 os_dbutil::svr_debug() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 os_dbutil::svr_machine() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 os_dbutil::svr_ping() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 os_dbutil::svr_shutdown() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 os_dbutil::svr_stat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 os_deadlock_exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 os_deadlock_exception::get_application_names() . . . . . . . . . . . . . . . . 203 os_deadlock_exception::get_fault_addr() . . . . . . . . . . . . . . . . . . . . . . 204 os_deadlock_exception::get_hostnames(). . . . . . . . . . . . . . . . . . . . . . 204 os_deadlock_exception::get_lock_type() . . . . . . . . . . . . . . . . . . . . . . 204 os_deadlock_exception::get_pids() . . . . . . . . . . . . . . . . . . . . . . . . . . 204 os_deadlock_exception::number_of_blockers() . . . . . . . . . . . . . . . . . . 204 os_DLL_finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_finder::equal_DLL_identifiers() . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_finder::equal_DLL_identifiers_same_prefix() . . . . . . . . . . . . . . 205 os_DLL_finder::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_finder::load_DLL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_finder::register_() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_finder::unregister() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 os_DLL_schema_info. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 os_DLL_schema_info::add_DLL_identifier(). . . . . . . . . . . . . . . . . . . . . 206 os_DLL_schema_info::DLL_loaded(). . . . . . . . . . . . . . . . . . . . . . . . . . 206 os_DLL_schema_info::DLL_unloaded() . . . . . . . . . . . . . . . . . . . . . . . . 207 os_Dumper_reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_database() . . . . . . . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_database_number() . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_offset() . . . . . . . . . . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_segment() . . . . . . . . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_segment_number() . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::get_string() . . . . . . . . . . . . . . . . . . . . . . . . . . 208 os_Dumper_reference::is_valid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 os_Dumper_reference::operator void*() . . . . . . . . . . . . . . . . . . . . . . . 209 os_Dumper_reference::operator =() . . . . . . . . . . . . . . . . . . . . . . . . . 209 14 14 os_Dumper_reference::operator ==() . . . . . . . . . . . . . . . . . . . . . . . . 209 C++ A P I Reference Contents os_Dumper_reference::operator <(). . . . . . . . . . . . . . . . . . . . . . . . . .209 os_Dumper_reference::operator >(). . . . . . . . . . . . . . . . . . . . . . . . . .209 os_Dumper_reference::operator !=() . . . . . . . . . . . . . . . . . . . . . . . . .209 os_Dumper_reference::operator >=() . . . . . . . . . . . . . . . . . . . . . . . .210 os_Dumper_reference::operator <=() . . . . . . . . . . . . . . . . . . . . . . . .210 os_Dumper_reference::operator !() . . . . . . . . . . . . . . . . . . . . . . . . . .210 os_Dumper_reference::os_Dumper_reference(). . . . . . . . . . . . . . . . . .210 os_Dumper_reference::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . .210 os_Dumper_specialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 os_Dumper_specialization::get_specialization_name() . . . . . . . . . . . . .211 os_Dumper_specialization::operator ()() . . . . . . . . . . . . . . . . . . . . . . .211 os_Dumper_specialization::should_use_default_constructor() . . . . . . . .212 os_dynamic_extent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 os_dynamic_extent::insert() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213 os_dynamic_extent::os_dynamic_extent() . . . . . . . . . . . . . . . . . . . . .213 os_dynamic_extent::~os_dynamic_extent() . . . . . . . . . . . . . . . . . . . .214 os_dynamic_extent::remove() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214 os_enum_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 os_enum_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 os_enum_type::get_enumerator() . . . . . . . . . . . . . . . . . . . . . . . . . . .215 os_enum_type::get_enumerators() . . . . . . . . . . . . . . . . . . . . . . . . . .215 os_enum_type::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 os_enum_type::get_pragmas() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 os_enum_type::get_source_position() . . . . . . . . . . . . . . . . . . . . . . . .216 os_enum_type::set_enumerators() . . . . . . . . . . . . . . . . . . . . . . . . . .216 os_enum_type::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 os_enum_type::set_pragmas() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 os_enum_type::set_source_position() . . . . . . . . . . . . . . . . . . . . . . . .216 os_enumerator_literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 os_enumerator_literal::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217 os_enumerator_literal::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . .217 os_enumerator_literal::get_value() . . . . . . . . . . . . . . . . . . . . . . . . . .217 os_enumerator_literal::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . .217 os_enumerator_literal::set_value() . . . . . . . . . . . . . . . . . . . . . . . . . .217 os_evolve_subtype_fun_binding . . . . . . . . . . . . . . . . . . . . . . . . 218 os_evolve_subtype_fun_binding::os_evolve_subtype_fun_binding(). . . .218 os_export_id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 os_export_id::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 os_export_id::get_value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 os_export_id::is_null() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 Release 6.3 15 Contents os_export_id::operator ==() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 os_export_id_cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 os_export_id_cursor::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . 220 os_export_id_cursor::next() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 os_export_id_cursor::os_export_id_cursor() . . . . . . . . . . . . . . . . . . . . 220 os_export_id_cursor::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 os_export_id_cursor::~os_export_id_cursor() . . . . . . . . . . . . . . . . . . . 221 os_failover_server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 os_failover_server::get_logical_server_hostname() . . . . . . . . . . . . . . . 222 os_failover_server::get_online_server_hostname() . . . . . . . . . . . . . . . 222 os_failover_server::get_reconnect_retry_interval() . . . . . . . . . . . . . . . 222 os_failover_server::get_reconnect_timeout() . . . . . . . . . . . . . . . . . . . 222 os_failover_server::set_reconnect_timeout_and_interval() . . . . . . . . . . 223 os_field_member_variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 os_field_member_variable::create(). . . . . . . . . . . . . . . . . . . . . . . . . . 224 os_field_member_variable::get_offset() . . . . . . . . . . . . . . . . . . . . . . . 224 os_field_member_variable::get_size() . . . . . . . . . . . . . . . . . . . . . . . . 224 os_field_member_variable::set_size() . . . . . . . . . . . . . . . . . . . . . . . . 224 os_Fixup_dumper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 os_Fixup_dumper::dump_info(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 os_Fixup_dumper::duplicate() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 os_Fixup_dumper::get_number_elements() . . . . . . . . . . . . . . . . . . . . 225 os_Fixup_dumper::get_object_to_fix() . . . . . . . . . . . . . . . . . . . . . . . . 225 os_Fixup_dumper::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 os_Fixup_dumper::~os_Fixup_dumper() . . . . . . . . . . . . . . . . . . . . . . 226 os_function_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 os_function_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 os_function_type::equal_signature() . . . . . . . . . . . . . . . . . . . . . . . . . 227 os_function_type::get_arg_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 os_function_type::get_arg_list_kind() . . . . . . . . . . . . . . . . . . . . . . . . 227 os_function_type::get_return_type() . . . . . . . . . . . . . . . . . . . . . . . . . 228 os_function_type::set_arg_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 os_function_type::set_arg_list_kind() . . . . . . . . . . . . . . . . . . . . . . . . 228 os_function_type::set_return_type() . . . . . . . . . . . . . . . . . . . . . . . . . 228 os_indirect_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 os_indirect_type::get_target_type(). . . . . . . . . . . . . . . . . . . . . . . . . . 229 os_indirect_type::set_target_type() . . . . . . . . . . . . . . . . . . . . . . . . . . 229 os_instantiated_class_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 os_instantiated_class_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . 230 16 16 os_instantiated_class_type::get_instantiation() . . . . . . . . . . . . . . . . . . 230 C++ A P I Reference Contents os_instantiated_class_type::set_instantiation() . . . . . . . . . . . . . . . . . .230 os_int64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 os_int64::os_int64() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 os_int64::get_high(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 os_int64::get_low() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 os_int64::sprint() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231 os_integral_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 os_integral_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 os_integral_type::create_defaulted_char() . . . . . . . . . . . . . . . . . . . . .232 os_integral_type::create_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 os_integral_type::create_long() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 os_integral_type::create_short() . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 os_integral_type::create_signed_char() . . . . . . . . . . . . . . . . . . . . . . .233 os_integral_type::create_unsigned_char() . . . . . . . . . . . . . . . . . . . . .233 os_integral_type::is_signed() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 os_literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 os_literal::create_char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_enum_literal() . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_pointer_literal() . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_signed_char(). . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_signed_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_signed_long() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_signed_short() . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_unsigned_char() . . . . . . . . . . . . . . . . . . . . . . . . . . .234 os_literal::create_unsigned_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::create_unsigned_long() . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::create_unsigned_short() . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::create_wchar_t() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::get_char_value(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::get_enum_literal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 os_literal::get_pointer_literal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 os_literal::get_signed_integral_value() . . . . . . . . . . . . . . . . . . . . . . . .236 os_literal::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 os_literal::get_unsigned_integral_value() . . . . . . . . . . . . . . . . . . . . . .236 os_literal::get_wchar_t_value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 os_literal_template_actual_arg . . . . . . . . . . . . . . . . . . . . . . . . . 237 os_literal_template_actual_arg::create(). . . . . . . . . . . . . . . . . . . . . . .237 os_literal_template_actual_arg::get_literal() . . . . . . . . . . . . . . . . . . . .237 os_literal_template_actual_arg::set_literal() . . . . . . . . . . . . . . . . . . . .237 Release 6.3 17 Contents os_lock_timeout_exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 os_lock_timeout_exception::get_application_names() . . . . . . . . . . . . . 238 os_lock_timeout_exception::get_fault_addr() . . . . . . . . . . . . . . . . . . . 238 os_lock_timeout_exception::get_hostnames(). . . . . . . . . . . . . . . . . . . 239 os_lock_timeout_exception::get_lock_type(). . . . . . . . . . . . . . . . . . . . 239 os_lock_timeout_exception::get_pids() . . . . . . . . . . . . . . . . . . . . . . . 239 os_lock_timeout_exception::number_of_blockers() . . . . . . . . . . . . . . . 239 os_member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::Access_modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::Field_variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::get_access(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::get_defining_class() . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 os_member::is_unspecified() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 os_member::Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 os_member::operator const os_access_modifier&() . . . . . . . . . . . . . . . 241 os_member::operator const os_field_member_variable&() . . . . . . . . . . 241 os_member::operator const os_member_function&() . . . . . . . . . . . . . . 241 os_member::operator const os_member_type&() . . . . . . . . . . . . . . . . 241 os_member::operator const os_member_variable&() . . . . . . . . . . . . . . 241 os_member::operator const os_relationship_member_variable&() . . . . . 242 os_member::operator os_access_modifier&() . . . . . . . . . . . . . . . . . . . 242 os_member::operator os_field_member_variable&() . . . . . . . . . . . . . . 242 os_member::operator os_member_function&() . . . . . . . . . . . . . . . . . . 242 os_member::operator os_member_type&(). . . . . . . . . . . . . . . . . . . . . 242 os_member::operator os_member_variable&() . . . . . . . . . . . . . . . . . . 242 os_member::operator os_relationship_member_variable&() . . . . . . . . . 242 os_member::Private . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 os_member::Protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member::Public . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member::Relationship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member::set_access() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member::Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member::Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 os_member_function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 os_member_function::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 os_member_function::get_call_linkage() . . . . . . . . . . . . . . . . . . . . . . 244 os_member_function::get_function_kind() . . . . . . . . . . . . . . . . . . . . . 244 18 18 os_member_function::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 C++ A P I Reference Contents os_member_function::get_source_position() . . . . . . . . . . . . . . . . . . . .245 os_member_function::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_const() . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_inline() . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_overloaded() . . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_pure_virtual() . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_static() . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 os_member_function::is_virtual() . . . . . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::is_volatile() . . . . . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_call_linkage() . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_const() . . . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_inline() . . . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_overloaded() . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_pure_virtual() . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_static() . . . . . . . . . . . . . . . . . . . . . . . . .246 os_member_function::set_is_virtual() . . . . . . . . . . . . . . . . . . . . . . . .247 os_member_function::set_is_volatile() . . . . . . . . . . . . . . . . . . . . . . . .247 os_member_function::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . .247 os_member_function::set_source_position() . . . . . . . . . . . . . . . . . . . .247 os_member_function::set_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 os_member_namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 os_member_namespace::create() . . . . . . . . . . . . . . . . . . . . . . . . . . .248 os_member_namespace::get_namespace(). . . . . . . . . . . . . . . . . . . . .248 os_member_namespace::set_namespace() . . . . . . . . . . . . . . . . . . . . .248 os_member_type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 os_member_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 os_member_type::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 os_member_type::set_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 os_member_variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 os_member_variable::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 os_member_variable::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . .250 os_member_variable::get_offset() . . . . . . . . . . . . . . . . . . . . . . . . . . .250 os_member_variable::get_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 os_member_variable::get_source_position() . . . . . . . . . . . . . . . . . . . .251 os_member_variable::get_storage_class() . . . . . . . . . . . . . . . . . . . . .251 os_member_variable::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 os_member_variable::is_field() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 os_member_variable::is_persistent() . . . . . . . . . . . . . . . . . . . . . . . . .251 os_member_variable::is_static() . . . . . . . . . . . . . . . . . . . . . . . . . . . .251 os_member_variable::operator const os_field_member_variable&() . . . .252 Release 6.3 19 Contents os_member_variable::operator const os_relationship_member_variable&()252 os_member_variable::operator os_field_member_variable&() . . . . . . . . 252 os_member_variable::operator os_relationship_member_variable&(). . . 252 os_member_variable::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 os_member_variable::set_offset() . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 os_member_variable::set_source_position() . . . . . . . . . . . . . . . . . . . . 252 os_member_variable::set_storage_class() . . . . . . . . . . . . . . . . . . . . . 253 os_member_variable::set_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 os_mop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 os_mop::bind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 os_mop::copy_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::find_namespace(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::find_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::get_failure_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::get_neutralized_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . 255 os_mop::get_transient_schema() . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 os_mop::initialize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 os_mop::initialize_object_metadata(). . . . . . . . . . . . . . . . . . . . . . . . . 256 os_mop::reset(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 os_named_indirect_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 os_named_indirect_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 os_named_indirect_type::get_name() . . . . . . . . . . . . . . . . . . . . . . . . 257 os_named_indirect_type::get_source_position() . . . . . . . . . . . . . . . . . 257 os_named_indirect_type::set_name() . . . . . . . . . . . . . . . . . . . . . . . . 257 os_named_indirect_type::set_source_position() . . . . . . . . . . . . . . . . . 257 os_namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 os_namespace::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 os_namespace::get_enclosing_namespace() . . . . . . . . . . . . . . . . . . . . 258 os_namespace::get_members(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 os_namespace::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 os_namespace::set_enclosing_namespace() . . . . . . . . . . . . . . . . . . . . 258 os_namespace::set_members() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 os_namespace::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 os_notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 os_notification::assign() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 os_notification::get_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 os_notification::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 os_notification::_get_fd() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 20 20 os_notification::get_location() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 C++ A P I Reference Contents os_notification::get_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 os_notification::notify_immediate() . . . . . . . . . . . . . . . . . . . . . . . . . .261 os_notification::notify_on_commit() . . . . . . . . . . . . . . . . . . . . . . . . . .262 os_notification::os_notification() . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 os_notification::queue_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 os_notification::receive(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264 os_notification::set_queue_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . .265 os_notification::subscribe() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265 os_notification::unsubscribe() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266 os_object_cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 os_object_cursor::current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 os_object_cursor::first() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 os_object_cursor::more() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 os_object_cursor::next() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 os_object_cursor::os_object_cursor() . . . . . . . . . . . . . . . . . . . . . . . . .269 os_object_cursor::release_address_space() . . . . . . . . . . . . . . . . . . . .269 os_object_cursor::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269 os_object_cursor::set() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270 os_object_cursor::~os_object_cursor(). . . . . . . . . . . . . . . . . . . . . . . .270 os_path_to_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 os_path_to_data::add() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271 os_path_to_data::bit_offset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271 os_path_to_data::byte_offset(); . . . . . . . . . . . . . . . . . . . . . . . . . . . .271 os_path_to_data::get_root() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271 os_path_to_data::get_total_number_of_elements() . . . . . . . . . . . . . . .272 os_path_to_data::has_array_components() . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::is_base_path () . . . . . . . . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::is_member_variable_path(). . . . . . . . . . . . . . . . . . .272 os_path_to_data::local_path() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::make() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::minor_subscript(). . . . . . . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272 os_path_to_data::outer_collocated_path() . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::outer_path() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::pop() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::to_bit_field() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::to_dope() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::to_static_member() . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::to_subscript() . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 os_path_to_data::type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 Release 6.3 21 Contents os_path_to_data::unique_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 os_pathname_and_segment_number . . . . . . . . . . . . . . . . . . . . . 275 os_pathname_and_segment_number::database_pathname . . . . . . . . . 275 os_pathname_and_segment_number::os_pathname_and_segment_number() 275 os_pathname_and_segment_number::segment_number . . . . . . . . . . . 275 os_pathname_segment_cluster . . . . . . . . . . . . . . . . . . . . . . . . . 276 os_pathname_segment_cluster::database_pathname . . . . . . . . . . . . . 276 os_pathname_segment_cluster::os_pathname_segment_cluster() . . . . 276 os_pathname_segment_cluster::cluster_number . . . . . . . . . . . . . . . . . 276 os_pathname_segment_cluster::segment_number . . . . . . . . . . . . . . . 276 os_persistent_to_transient_pointer_manager. . . . . . . . . . . . . . . . 277 os_persistent_to_transient_pointer_manager::release() . . . . . . . . . . . . 277 os_Planning_action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 os_Planning_action::operator ()() . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 os_pointer_literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_literal::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_literal::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_literal::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_literal::set_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_literal::set_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 os_pointer_to_member_type . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 os_pointer_to_member_type::create() . . . . . . . . . . . . . . . . . . . . . . . . 280 os_pointer_to_member_type::get_target_class(). . . . . . . . . . . . . . . . . 280 os_pointer_to_member_type::set_target_class() . . . . . . . . . . . . . . . . . 280 os_pointer_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 os_pointer_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 os_pointer_type::get_target_type() . . . . . . . . . . . . . . . . . . . . . . . . . . 281 os_pointer_type::set_target_type() . . . . . . . . . . . . . . . . . . . . . . . . . . 281 os_pragma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 os_pragma::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 os_pragma::get_string(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 os_pragma::is_recognized() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 os_rawfs_entry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_abs_path() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_creation_time() . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_group_name() . . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_link_host() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_link_path() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 22 os_rawfs_entry::get_n_sectors() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 os_rawfs_entry::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 22 C++ A P I Reference Contents os_rawfs_entry::get_permission() . . . . . . . . . . . . . . . . . . . . . . . . . . .283 os_rawfs_entry::get_server_host(). . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::get_user_name() . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::is_db() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::is_dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::is_link() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::operator =() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::os_rawfs_entry() . . . . . . . . . . . . . . . . . . . . . . . . . . .284 os_rawfs_entry::~os_rawfs_entry() . . . . . . . . . . . . . . . . . . . . . . . . . .285 os_rawfs_entry::OSU_DATABASE . . . . . . . . . . . . . . . . . . . . . . . . . . . .285 os_rawfs_entry::OSU_DIRECTORY . . . . . . . . . . . . . . . . . . . . . . . . . . .285 os_rawfs_entry::OSU_LINK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285 os_real_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 os_real_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286 os_real_type::create_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286 os_real_type::create_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286 os_real_type::create_long_double() . . . . . . . . . . . . . . . . . . . . . . . . . .286 os_recover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 os_recover::os_recover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287 os_recover::~os_recover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287 os_recover::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287 os_recover::start_and_run_recover() . . . . . . . . . . . . . . . . . . . . . . . . .287 os_recover::start_recover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 os_recover::stop_recover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 os_recover_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 os_recover_options::os_recover_options() . . . . . . . . . . . . . . . . . . . . .292 os_recover_options::~os_recover_options() . . . . . . . . . . . . . . . . . . . .292 os_recover_options::reset(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292 os_Reference<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 os_Reference<T>::get_os_typespec() . . . . . . . . . . . . . . . . . . . . . . . .293 os_Reference<T>::operator =(). . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference<T>::operator !() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference<T>::operator T*() . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference<T>::operator –>() . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference<T>::os_Reference() . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference<T>::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294 os_Reference_cross_session<T> . . . . . . . . . . . . . . . . . . . . . . . . 295 os_Reference_cross_session<T>::get_os_typespec() . . . . . . . . . . . . . .295 os_Reference_cross_session<T>::operator =() . . . . . . . . . . . . . . . . . .295 Release 6.3 23 Contents os_Reference_cross_session<T>::operator T*() . . . . . . . . . . . . . . . . . 295 os_Reference_cross_session<T>::operator –>() . . . . . . . . . . . . . . . . . 296 os_Reference_cross_session<T>::os_Reference_cross_session() . . . . . 296 os_Reference_cross_session<T>::resolve() . . . . . . . . . . . . . . . . . . . . 296 os_reference_cross_session . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 os_reference_cross_session::dump() . . . . . . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::get_database() . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::load() . . . . . . . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::operator =() . . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::operator ==() . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::operator !() . . . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::operator !=() . . . . . . . . . . . . . . . . . . . . . 298 os_reference_cross_session::operator <() . . . . . . . . . . . . . . . . . . . . . 299 os_reference_cross_session::operator >() . . . . . . . . . . . . . . . . . . . . . 299 os_reference_cross_session::operator <=() . . . . . . . . . . . . . . . . . . . . 299 os_reference_cross_session::operator >=() . . . . . . . . . . . . . . . . . . . . 299 os_reference_cross_session::os_reference_cross_session() . . . . . . . . . 299 os_reference_cross_session::~os_reference_cross_session() . . . . . . . . 299 os_reference_cross_session::resolve() . . . . . . . . . . . . . . . . . . . . . . . . 300 os_reference_internal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 os_reference_internal::dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 os_reference_internal::get_database() . . . . . . . . . . . . . . . . . . . . . . . . 301 os_reference_internal::get_database_key() . . . . . . . . . . . . . . . . . . . . 301 os_reference_internal::hash() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::operator ==(). . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::operator !() . . . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::operator !=() . . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::operator <() . . . . . . . . . . . . . . . . . . . . . . . . . . 302 os_reference_internal::operator >() . . . . . . . . . . . . . . . . . . . . . . . . . . 303 os_reference_internal::operator <=(). . . . . . . . . . . . . . . . . . . . . . . . . 303 os_reference_internal::operator >=(). . . . . . . . . . . . . . . . . . . . . . . . . 303 os_reference_internal::~os_reference_internal() . . . . . . . . . . . . . . . . . 303 os_reference_internal::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 os_Reference_protected<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 os_Reference_protected<T>::get_os_typespec(). . . . . . . . . . . . . . . . . 304 os_Reference_protected<T>::operator =() . . . . . . . . . . . . . . . . . . . . . 304 os_Reference_protected<T>::operator T*() . . . . . . . . . . . . . . . . . . . . 305 os_Reference_protected<T>::operator –>() . . . . . . . . . . . . . . . . . . . . 305 24 24 os_Reference_protected<T>::os_Reference_protected() . . . . . . . . . . . 305 C++ A P I Reference Contents os_Reference_protected<T>::resolve(). . . . . . . . . . . . . . . . . . . . . . . .305 os_reference_protected_internal . . . . . . . . . . . . . . . . . . . . . . . . 306 os_reference_protected_internal::deleted() . . . . . . . . . . . . . . . . . . . . .306 os_reference_protected_internal::dump() . . . . . . . . . . . . . . . . . . . . . .306 os_reference_protected_internal::get_database() . . . . . . . . . . . . . . . .306 os_reference_protected_internal::get_database_key() . . . . . . . . . . . . .307 os_reference_protected_internal::hash(). . . . . . . . . . . . . . . . . . . . . . .307 os_reference_protected_internal::load() . . . . . . . . . . . . . . . . . . . . . . .307 os_reference_protected_internal::operator ==() . . . . . . . . . . . . . . . . .307 os_reference_protected_internal::operator !() . . . . . . . . . . . . . . . . . . .307 os_reference_protected_internal::operator !=() . . . . . . . . . . . . . . . . . .307 os_reference_protected_internal::operator <() . . . . . . . . . . . . . . . . . .308 os_reference_protected_internal::operator >() . . . . . . . . . . . . . . . . . .308 os_reference_protected_internal::operator <=() . . . . . . . . . . . . . . . . .308 os_reference_protected_internal::operator >=() . . . . . . . . . . . . . . . . .308 os_reference_protected_internal::~os_reference_protected_internal() . .308 os_reference_protected_internal::resolve() . . . . . . . . . . . . . . . . . . . . .309 os_reference_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 os_reference_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .310 os_relationship_member_variable . . . . . . . . . . . . . . . . . . . . . . . 311 os_relationship_member_variable::get_related_class(). . . . . . . . . . . . .311 os_relationship_member_variable::get_related_member() . . . . . . . . . .311 os_release_cluster_pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 os_release_database_pointer . . . . . . . . . . . . . . . . . . . . . . . . . . 313 os_release_root_pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 os_release_segment_pointer. . . . . . . . . . . . . . . . . . . . . . . . . . . 315 os_replicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 os_replicator::os_replicator(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 os_replicator::~os_replicator() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 os_replicator::change_time_interval() . . . . . . . . . . . . . . . . . . . . . . . .316 os_replicator::get_statistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316 os_replicator::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 os_replicator::reset_statistics() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 os_replicator::start_replicator() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 os_replicator::stop_replicator() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317 os_replicator_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 os_replicator_options::os_replicator_options(). . . . . . . . . . . . . . . . . . .320 os_replicator_options::~os_replicator_options() . . . . . . . . . . . . . . . . .320 os_replicator_options::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320 os_replicator_statistic_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Release 6.3 25 Contents os_replicator_statistic_info::os_replicator_statistic_info() . . . . . . . . . . . 321 os_replicator_statistic_info::~os_replicator_statistic_info(). . . . . . . . . . 322 os_replicator_statistic_info::format_and_print_statistics() . . . . . . . . . . 322 os_replicator_statistic_info::format_statistics() . . . . . . . . . . . . . . . . . . 322 os_replicator_statistic_info::get_replica_ID() . . . . . . . . . . . . . . . . . . . 322 os_restore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 os_restore::os_restore() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 os_restore::~os_restore(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 os_restore::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 os_restore::start_and_run_restore() . . . . . . . . . . . . . . . . . . . . . . . . . 324 os_restore::start_restore() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 os_restore::stop_restore() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 os_restore_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 os_restore_options::os_restore_options() . . . . . . . . . . . . . . . . . . . . . . 328 os_restore_options::~os_restore_options(). . . . . . . . . . . . . . . . . . . . . 328 os_restore_options::reset(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 os_retain_address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 os_retain_address::os_retain_address() . . . . . . . . . . . . . . . . . . . . . . . 329 os_retain_address::release() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 os_retain_address::retaining() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 os_retain_address::set_retain(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 os_schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 os_schema::find_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 os_schema::get_classes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 os_schema::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 os_schema::operator const os_app_schema&() . . . . . . . . . . . . . . . . . . 330 os_schema::operator const os_comp_schema&(). . . . . . . . . . . . . . . . . 330 os_schema::operator const os_database_schema&() . . . . . . . . . . . . . . 331 os_schema::operator os_app_schema&() . . . . . . . . . . . . . . . . . . . . . . 331 os_schema::operator os_comp_schema&() . . . . . . . . . . . . . . . . . . . . . 331 os_schema::operator os_database_schema&() . . . . . . . . . . . . . . . . . . 331 os_schema_evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 os_schema_evolution::augment_classes_to_be_removed() . . . . . . . . . 335 os_schema_evolution::augment_cluster_split_avoidance() . . . . . . . . . . 335 os_schema_evolution::augment_dll_schema_db_names() . . . . . . . . . . 335 os_schema_evolution::augment_optional classes() . . . . . . . . . . . . . . . 336 os_schema_evolution::augment_pre_evol_transformers() . . . . . . . . . . 336 os_schema_evolution::augment_post_evol_transformers(). . . . . . . . . . 336 os_schema_evolution::evolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 26 26 os_schema_evolution::get_enclosing_object(). . . . . . . . . . . . . . . . . . . 340 C++ A P I Reference Contents os_schema_evolution::get_evolved_schema() . . . . . . . . . . . . . . . . . . .340 os_schema_evolution::get_evolved_schema_db_name() . . . . . . . . . . .340 os_schema_evolution::get_explanation_level() . . . . . . . . . . . . . . . . . .340 os_schema_evolution::get_path_to_member() . . . . . . . . . . . . . . . . . .340 os_schema_evolution::get_unevolved_schema() . . . . . . . . . . . . . . . . .341 os_schema_evolution::get_work_database() . . . . . . . . . . . . . . . . . . . .341 os_schema_evolution::initialize() . . . . . . . . . . . . . . . . . . . . . . . . . . . .341 os_schema_evolution::set_address_space_release_interval() . . . . . . . .341 os_schema_evolution::set_avoid_page_boundary() . . . . . . . . . . . . . . .341 os_schema_evolution::set_disable_transformer_class_checks(). . . . . . .342 os_schema_evolution::set_evolved_schema_db_name(). . . . . . . . . . . .342 os_schema_evolution::set_explanation_level() . . . . . . . . . . . . . . . . . .342 os_schema_evolution::set_malloc_size(). . . . . . . . . . . . . . . . . . . . . . .343 os_schema_evolution::set_maplet_size() . . . . . . . . . . . . . . . . . . . . . .343 os_schema_evolution::set_maximum_cluster_size() . . . . . . . . . . . . . .343 os_schema_evolution::set_maximum_memory_size() . . . . . . . . . . . . .343 os_schema_evolution::set_obsolete_index_handler() . . . . . . . . . . . . . .343 os_schema_evolution::set_obsolete_query_handler() . . . . . . . . . . . . . .343 os_schema_evolution::set_optimize_checkpoints(). . . . . . . . . . . . . . . .345 os_schema_evolution::set_pre_evolution_setup_hook() . . . . . . . . . . . .345 os_schema_evolution::set_resolve_ambiguous_void_pointers() . . . . . . .345 os_schema_evolution::set_task_list_file_name() . . . . . . . . . . . . . . . . .345 os_schema_evolution::set_untranslatable_pointer_handler(). . . . . . . . .345 os_schema_evolution::shutdown() . . . . . . . . . . . . . . . . . . . . . . . . . . .345 os_schema_evolution::task_list() . . . . . . . . . . . . . . . . . . . . . . . . . . . .346 os_schema_handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 os_schema_handle::DLL_unloaded() . . . . . . . . . . . . . . . . . . . . . . . . .347 os_schema_handle::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347 os_schema_handle::get_all(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347 os_schema_handle::get_application_schema_handle() . . . . . . . . . . . . .348 os_schema_handle::get_DLL_identifiers() . . . . . . . . . . . . . . . . . . . . . .348 os_schema_handle::get_schema_database(). . . . . . . . . . . . . . . . . . . .348 os_schema_handle::get_schema_database_pathname() . . . . . . . . . . . .348 os_schema_handle::get_schema_info() . . . . . . . . . . . . . . . . . . . . . . .348 os_schema_handle::get_status() . . . . . . . . . . . . . . . . . . . . . . . . . . . .348 os_schema_handle::insert_required_DLL_identifiers() . . . . . . . . . . . . .349 os_schema_handle::set_schema_database_pathname() . . . . . . . . . . . .349 os_schema_handle::os_schema_handle_status . . . . . . . . . . . . . . . . . .349 os_schema_info. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 os_schema_info::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350 Release 6.3 27 Contents os_schema_info::get_DLL_identifiers() . . . . . . . . . . . . . . . . . . . . . . . . 350 os_schema_info::get_schema_database_pathname(). . . . . . . . . . . . . . 350 os_schema_info::set_schema_database_pathname() . . . . . . . . . . . . . . 350 os_schema_install_options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 os_schema_install_options::get_copy_member_functions() . . . . . . . . . 351 os_schema_install_options::os_schema_install_options() . . . . . . . . . . . 351 os_schema_install_options::set_copy_member_functions() . . . . . . . . . 351 os_segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 os_segment::create_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 os_segment::database_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 os_segment::destroy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 os_segment::get_access_control(). . . . . . . . . . . . . . . . . . . . . . . . . . . 352 os_segment::get_all_clusters() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 os_segment::get_allocation_strategy(). . . . . . . . . . . . . . . . . . . . . . . . 353 os_segment::get_application_info() . . . . . . . . . . . . . . . . . . . . . . . . . . 353 os_segment::get_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 os_segment::get_clusters(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 os_segment::get_comment() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 os_segment::get_default_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . 354 os_segment::get_export_ids(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 os_segment::get_fetch_policy(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 os_segment::get_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 os_segment::get_n_clusters() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 os_segment::get_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . . 356 os_segment::get_number(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::get_segment_reference_policy() . . . . . . . . . . . . . . . . . . 357 os_segment::get_transient_segment() . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::is_deleted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::is_empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::is_transient_segment() . . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 os_segment::release_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 os_segment::resolve_export_id() . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 os_segment::retain_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 os_segment::return_memory() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 os_segment::session_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 os_segment::set_access_control() . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 os_segment::set_allocation_strategy() . . . . . . . . . . . . . . . . . . . . . . . . 359 os_segment::set_application_info() . . . . . . . . . . . . . . . . . . . . . . . . . . 360 28 28 os_segment::set_comment(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 C++ A P I Reference Contents os_segment::set_default_cluster() . . . . . . . . . . . . . . . . . . . . . . . . . . .360 os_segment::set_fetch_policy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360 os_segment::set_lock_option() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361 os_segment::set_null_illegal_pointers() . . . . . . . . . . . . . . . . . . . . . . .361 os_segment::size(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361 os_segment_access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 os_segment_access::get_default() . . . . . . . . . . . . . . . . . . . . . . . . . . .362 os_segment_access::get_primary_group() . . . . . . . . . . . . . . . . . . . . .362 os_segment_access::no_access . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362 os_segment_access::operator =() . . . . . . . . . . . . . . . . . . . . . . . . . . .363 os_segment_access::os_segment_access() . . . . . . . . . . . . . . . . . . . . .363 os_segment_access::read_access . . . . . . . . . . . . . . . . . . . . . . . . . . .363 os_segment_access::read_write_access . . . . . . . . . . . . . . . . . . . . . . .363 os_segment_access::set_default() . . . . . . . . . . . . . . . . . . . . . . . . . . .364 os_segment_access::set_primary_group() . . . . . . . . . . . . . . . . . . . . .364 os_segment_access::~os_segment_access() . . . . . . . . . . . . . . . . . . . .364 os_segment_cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 os_segment_cursor::os_segment_cursor() . . . . . . . . . . . . . . . . . . . . .365 os_segment_cursor::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . .365 os_segment_cursor::next() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365 os_segment_cursor::reset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .366 os_server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 os_server::connection_is_broken(). . . . . . . . . . . . . . . . . . . . . . . . . . .367 os_server::disconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368 os_server::get_databases() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368 os_server::get_host_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368 os_server::get_n_databases() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368 os_server::is_failover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369 os_server::reconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369 os_session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 os_session::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 os_session::force_full_initialization() . . . . . . . . . . . . . . . . . . . . . . . . .370 os_session::get_all_sessions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 os_session::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .370 os_session::get_n_sessions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 os_session::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 os_session::get_thread_absorption() . . . . . . . . . . . . . . . . . . . . . . . . .371 os_session::of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 os_session::operator delete() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371 os_session::set_current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372 Release 6.3 29 Contents os_session::set_thread_absorption() . . . . . . . . . . . . . . . . . . . . . . . . . 372 os_session::unuse_DLL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 os_session::use_DLL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 os_soft_pointer32_base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 os_soft_pointer32_base::decache() . . . . . . . . . . . . . . . . . . . . . . . . . . 373 os_soft_pointer32_base::dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 os_soft_pointer32_base::get_database() . . . . . . . . . . . . . . . . . . . . . . 374 os_soft_pointer32_base::get_database_key() . . . . . . . . . . . . . . . . . . . 374 os_soft_pointer32_base::get_open_database() . . . . . . . . . . . . . . . . . . 374 os_soft_pointer32_base::hash() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 os_soft_pointer32_base::load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 os_soft_pointer32_base::operator ==() . . . . . . . . . . . . . . . . . . . . . . . 375 os_soft_pointer32_base::operator !() . . . . . . . . . . . . . . . . . . . . . . . . . 375 os_soft_pointer32_base::operator !=(). . . . . . . . . . . . . . . . . . . . . . . . 375 os_soft_pointer32_base::operator <() . . . . . . . . . . . . . . . . . . . . . . . . 375 os_soft_pointer32_base::operator >() . . . . . . . . . . . . . . . . . . . . . . . . 375 os_soft_pointer32_base::operator <=() . . . . . . . . . . . . . . . . . . . . . . . 376 os_soft_pointer32_base::operator >=() . . . . . . . . . . . . . . . . . . . . . . . 376 os_soft_pointer32_base::~os_soft_pointer32_base() . . . . . . . . . . . . . . 376 os_soft_pointer32_base::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 os_soft_pointer64_base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 os_soft_pointer64_base::decache() . . . . . . . . . . . . . . . . . . . . . . . . . . 377 os_soft_pointer64_base::dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 os_soft_pointer64_base::get_database() . . . . . . . . . . . . . . . . . . . . . . 378 os_soft_pointer64_base::get_database_key() . . . . . . . . . . . . . . . . . . . 378 os_soft_pointer64_base::get_open_database() . . . . . . . . . . . . . . . . . . 378 os_soft_pointer64_base::hash() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 os_soft_pointer64_base::load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 os_soft_pointer64_base::operator ==() . . . . . . . . . . . . . . . . . . . . . . . 379 os_soft_pointer64_base::operator !() . . . . . . . . . . . . . . . . . . . . . . . . . 379 os_soft_pointer64_base::operator !=(). . . . . . . . . . . . . . . . . . . . . . . . 379 os_soft_pointer64_base::operator <() . . . . . . . . . . . . . . . . . . . . . . . . 379 os_soft_pointer64_base::operator >() . . . . . . . . . . . . . . . . . . . . . . . . 379 os_soft_pointer64_base::operator <=() . . . . . . . . . . . . . . . . . . . . . . . 380 os_soft_pointer64_base::operator >=() . . . . . . . . . . . . . . . . . . . . . . . 380 os_soft_pointer64_base::~os_soft_pointer64_base() . . . . . . . . . . . . . . 380 os_soft_pointer64_base::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 os_soft_pointer32<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 os_soft_pointer32<T>::operator =() . . . . . . . . . . . . . . . . . . . . . . . . . 382 30 30 os_soft_pointer32<T>::operator T*(). . . . . . . . . . . . . . . . . . . . . . . . . 382 C++ A P I Reference Contents os_soft_pointer32<T>::operator –>() . . . . . . . . . . . . . . . . . . . . . . . .382 os_soft_pointer32<T>::os_soft_pointer32() . . . . . . . . . . . . . . . . . . . .382 os_soft_pointer32<T>::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . .383 os_soft_pointer64<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 os_soft_pointer64<T>::operator =() . . . . . . . . . . . . . . . . . . . . . . . . .385 os_soft_pointer64<T>::operator T*() . . . . . . . . . . . . . . . . . . . . . . . . .385 os_soft_pointer64<T>::operator –>() . . . . . . . . . . . . . . . . . . . . . . . .385 os_soft_pointer64<T>::os_soft_pointer64() . . . . . . . . . . . . . . . . . . . .385 os_soft_pointer64<T>::resolve() . . . . . . . . . . . . . . . . . . . . . . . . . . . .386 os_soft_pointer32<void> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 os_soft_pointer64<void> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 os_soft_pointer32<char> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 os_soft_pointer64<char> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 os_str_conv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 os_str_conv::change_mapping() . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 os_str_conv::convert() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391 os_str_conv::get_converted_size(). . . . . . . . . . . . . . . . . . . . . . . . . . .392 os_str_conv::os_str_conv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 os_string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 os_string::compare() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 os_string::compare_nocase(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 os_string::is_null() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 os_string::operator const char*() . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 os_string::operator =() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394 os_string::os_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395 os_string::~os_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395 os_subscription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 os_subscription::assign() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .396 os_subscription::get_database() . . . . . . . . . . . . . . . . . . . . . . . . . . . .397 os_subscription::operator=() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397 os_subscription::os_subscription() . . . . . . . . . . . . . . . . . . . . . . . . . . .398 os_template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 os_template::Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 os_template::get_args() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 os_template::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 os_template::is_unspecified() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399 os_template::operator const os_type_template&() . . . . . . . . . . . . . . . .399 os_template::operator os_type_template&() . . . . . . . . . . . . . . . . . . . .400 os_template::set_args() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400 os_template::Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400 Release 6.3 31 Contents os_template_actual_arg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 os_template_actual_arg::get_kind(). . . . . . . . . . . . . . . . . . . . . . . . . . 401 os_template_actual_arg::operator const os_literal_template_actual_arg&()401 os_template_actual_arg::operator const os_type_template_actual_arg&()401 os_template_actual_arg::operator os_literal_template_actual_arg&() . . 401 os_template_actual_arg::operator os_type_template_actual_arg&() . . . 402 os_template_formal_arg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 os_template_formal_arg::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . 403 os_template_formal_arg::get_name() . . . . . . . . . . . . . . . . . . . . . . . . 403 os_template_formal_arg::operator const os_template_type_formal&(). . 403 os_template_formal_arg::operator const os_template_value_formal&() . 403 os_template_formal_arg::operator os_template_type_formal&() . . . . . . 403 os_template_formal_arg::operator os_template_value_formal&() . . . . . 403 os_template_formal_arg::set_name() . . . . . . . . . . . . . . . . . . . . . . . . 404 os_template_instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 os_template_instantiation::create() . . . . . . . . . . . . . . . . . . . . . . . . . . 405 os_template_instantiation::get_args() . . . . . . . . . . . . . . . . . . . . . . . . 405 os_template_instantiation::get_template() . . . . . . . . . . . . . . . . . . . . . 405 os_template_instantiation::set_args() . . . . . . . . . . . . . . . . . . . . . . . . 405 os_template_instantiation::set_template() . . . . . . . . . . . . . . . . . . . . . 406 os_template_type_formal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 os_template_type_formal::create() . . . . . . . . . . . . . . . . . . . . . . . . . . 407 os_template_value_formal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 os_template_value_formal::create() . . . . . . . . . . . . . . . . . . . . . . . . . 408 os_template_value_formal::get_type(). . . . . . . . . . . . . . . . . . . . . . . . 408 os_template_value_formal::set_type() . . . . . . . . . . . . . . . . . . . . . . . . 408 os_transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 os_transaction::abort(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 os_transaction::abort_top_level() . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 os_transaction::begin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 os_transaction::checkpoint() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 os_transaction::commit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::get_parent(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::get_scope() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::is_aborted() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 os_transaction::is_committed() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 32 32 os_transaction::is_lock_contention() . . . . . . . . . . . . . . . . . . . . . . . . . 412 C++ A P I Reference Contents os_transaction::is_prepared() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .412 os_transaction::prepare_to_commit() . . . . . . . . . . . . . . . . . . . . . . . . .412 os_transaction::read_only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 os_transaction::session_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 os_transaction::set_name(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 os_transaction::top_level() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413 os_transaction::update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414 os_transaction_hook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 os_transaction_hook::after_begin . . . . . . . . . . . . . . . . . . . . . . . . . . .415 os_transaction_hook::after_checkpoint . . . . . . . . . . . . . . . . . . . . . . . .415 os_transaction_hook::after_commit . . . . . . . . . . . . . . . . . . . . . . . . . .415 os_transaction_hook::before_abort . . . . . . . . . . . . . . . . . . . . . . . . . .415 os_transaction_hook::before_checkpoint. . . . . . . . . . . . . . . . . . . . . . .415 os_transaction_hook::before_commit . . . . . . . . . . . . . . . . . . . . . . . . .416 os_transaction_hook::before_retry . . . . . . . . . . . . . . . . . . . . . . . . . . .416 os_transaction_hook::deregister_hook() . . . . . . . . . . . . . . . . . . . . . . .416 os_transaction_hook::register_hook(). . . . . . . . . . . . . . . . . . . . . . . . .416 os_transformer_binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 os_transformer_binding::os_transformer_binding() . . . . . . . . . . . . . . .417 os_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 os_type::Anonymous_indirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Enum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418 os_type::get_alignment() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .419 os_type::get_enclosing_class() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .419 os_type::get_kind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .419 os_type::get_kind_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::get_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::get_string() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::Instantiated_class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::is_class_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::is_const(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::is_indirect_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 os_type::is_integral_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420 Release 6.3 33 Contents os_type::is_pointer_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::is_real_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::is_unspecified() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::is_volatile() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::Long_double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::Named_indirect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 os_type::operator const os_anonymous_indirect_type&() . . . . . . . . . . . 421 os_type::operator const os_array_type&() . . . . . . . . . . . . . . . . . . . . . 422 os_type::operator const os_class_type&(). . . . . . . . . . . . . . . . . . . . . . 422 os_type::operator const os_enum_type&() . . . . . . . . . . . . . . . . . . . . . 422 os_type::operator const os_function_type&() . . . . . . . . . . . . . . . . . . . 422 os_type::operator const os_instantiated_class_type&() . . . . . . . . . . . . 422 os_type::operator const os_integral_type&(). . . . . . . . . . . . . . . . . . . . 422 os_type::operator const os_named_indirect_type&() . . . . . . . . . . . . . . 422 os_type::operator const os_pointer_to_member_type&() . . . . . . . . . . . 422 os_type::operator const os_pointer_type&() . . . . . . . . . . . . . . . . . . . . 423 os_type::operator const os_real_type&() . . . . . . . . . . . . . . . . . . . . . . 423 os_type::operator const os_reference_type&() . . . . . . . . . . . . . . . . . . 423 os_type::operator const os_type_type&() . . . . . . . . . . . . . . . . . . . . . . 423 os_type::operator const os_void_type&() . . . . . . . . . . . . . . . . . . . . . . 423 os_type::operator os_anonymous_indirect_type&() . . . . . . . . . . . . . . . 423 os_type::operator os_array_type&() . . . . . . . . . . . . . . . . . . . . . . . . . 423 os_type::operator os_class_type&() . . . . . . . . . . . . . . . . . . . . . . . . . . 423 os_type::operator os_enum_type&() . . . . . . . . . . . . . . . . . . . . . . . . . 424 os_type::operator os_function_type&() . . . . . . . . . . . . . . . . . . . . . . . 424 os_type::operator os_instantiated_class_type&(). . . . . . . . . . . . . . . . . 424 os_type::operator os_integral_type&() . . . . . . . . . . . . . . . . . . . . . . . . 424 os_type::operator os_named_indirect_type&() . . . . . . . . . . . . . . . . . . 424 os_type::operator os_pointer_to_member_type&() . . . . . . . . . . . . . . . 424 os_type::operator os_pointer_type&() . . . . . . . . . . . . . . . . . . . . . . . . 424 os_type::operator os_real_type&() . . . . . . . . . . . . . . . . . . . . . . . . . . 424 os_type::operator os_reference_type&(). . . . . . . . . . . . . . . . . . . . . . . 425 os_type::operator os_type_type&() . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::operator os_void_type&() . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::Pointer_to_member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::set_alignment() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 os_type::set_size() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 34 34 os_type::Signed_char. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 C++ A P I Reference Contents os_type::Signed_long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426 os_type::Signed_short . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426 os_type::strip_indirect_types() . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426 os_type::Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::type_at() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::type_containing() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::Undefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::Unsigned_char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::Unsigned_integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427 os_type::Unsigned_long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428 os_type::Unsigned_short. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428 os_type::Void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428 os_Type_fixup_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 os_Type_fixup_info::fixup_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429 os_Type_fixup_info::os_Type_fixup_info() . . . . . . . . . . . . . . . . . . . . .429 os_Type_fixup_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 os_Type_fixup_loader::fixup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430 os_Type_fixup_loader::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430 os_Type_fixup_loader::load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431 os_Type_fixup_loader::operator ()(). . . . . . . . . . . . . . . . . . . . . . . . . .431 os_Type_info. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 os_Type_info::data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .432 os_Type_info::get_original_location() . . . . . . . . . . . . . . . . . . . . . . . . .432 os_Type_info::get_replacing_database() . . . . . . . . . . . . . . . . . . . . . . .432 os_Type_info::get_replacing_location(). . . . . . . . . . . . . . . . . . . . . . . .432 os_Type_info::get_replacing_segment() . . . . . . . . . . . . . . . . . . . . . . .432 os_Type_info::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433 os_Type_info::os_Type_info() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433 os_Type_info::set_replacing_location() . . . . . . . . . . . . . . . . . . . . . . . .433 os_Type_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 os_Type_loader::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434 os_Type_loader::fixup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434 os_Type_loader::get() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434 os_Type_loader::load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .435 os_Type_loader::operator ()() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .435 os_type_template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 os_type_template::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436 os_type_template::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436 os_type_template::set_type() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436 os_type_template_actual_arg . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Release 6.3 35 Contents os_type_template_actual_arg::create() . . . . . . . . . . . . . . . . . . . . . . . 437 os_type_template_actual_arg::get_type() . . . . . . . . . . . . . . . . . . . . . 437 os_type_template_actual_arg::set_type(). . . . . . . . . . . . . . . . . . . . . . 437 os_type_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 os_typed_pointer_void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 os_typed_pointer_void::get_type() . . . . . . . . . . . . . . . . . . . . . . . . . . 439 os_typed_pointer_void::operator void*() . . . . . . . . . . . . . . . . . . . . . . 439 os_typespec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 os_typespec::get_char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 os_typespec::get_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 os_typespec::get_float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 os_typespec::get_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 os_typespec::get_long() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_long_double() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_name() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_os_int16() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_os_int32() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_os_int64() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 os_typespec::get_os_signed_int8() . . . . . . . . . . . . . . . . . . . . . . . . . . 442 os_typespec::get_os_unsigned_int8() . . . . . . . . . . . . . . . . . . . . . . . . 442 os_typespec::get_os_unsigned_int16() . . . . . . . . . . . . . . . . . . . . . . . 442 os_typespec::get_os_unsigned_int32() . . . . . . . . . . . . . . . . . . . . . . . 442 os_typespec::get_os_unsigned_int64() . . . . . . . . . . . . . . . . . . . . . . . 442 os_typespec::get_pointer() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_short() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_signed_char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_signed_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_signed_long() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_signed_short() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 os_typespec::get_unsigned_char() . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_typespec::get_unsigned_int() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_typespec::get_unsigned_long(). . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_typespec::get_unsigned_short() . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_typespec::operator ==() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_typespec::os_typespec() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 os_unsigned_int64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 os_unsigned_int64::os_unsigned_int64() . . . . . . . . . . . . . . . . . . . . . . 446 os_unsigned_int64::get_high() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 os_unsigned_int64::get_low() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 36 36 os_unsigned_int64::sprint() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 C++ A P I Reference Contents os_untranslatable_pointer_handler . . . . . . . . . . . . . . . . . . . . . . 448 os_untranslatable_pointer_handler::clone(). . . . . . . . . . . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_exception() . . . . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_explanation() . . . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_source_cluster() . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_source_offset() . . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_source_path() . . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_target_cluster() . . . . . . . . . . .448 os_untranslatable_pointer_handler::get_target_exported() . . . . . . . . . .449 os_untranslatable_pointer_handler::get_target_export_id() . . . . . . . . .449 os_untranslatable_pointer_handler::get_final_offset() . . . . . . . . . . . . .449 os_untranslatable_pointer_handler::get_target_offset() . . . . . . . . . . . .449 os_untranslatable_pointer_handler::get_target_path() . . . . . . . . . . . . .449 os_untranslatable_pointer_handler::get_target_segment() . . . . . . . . . .449 os_untranslatable_pointer_handler::handle_xxx() . . . . . . . . . . . . . . . .450 os_untranslatable_pointer_handler::is_PTOM() . . . . . . . . . . . . . . . . . .450 os_untranslatable_pointer_handler::set_final_offset() . . . . . . . . . . . . .450 os_void_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 os_void_type::create() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451 os_with_mapped . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 os_with_mapped::os_with_mapped() . . . . . . . . . . . . . . . . . . . . . . . . .452 os_with_mapped::~os_with_mapped() . . . . . . . . . . . . . . . . . . . . . . . .452 tix_context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 tix_exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 tix_exception::ancestor_of() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .454 tix_exception::get_os_deadlock_exception() . . . . . . . . . . . . . . . . . . . .454 tix_exception::get_os_lock_timeout_exception() . . . . . . . . . . . . . . . . .454 tix_exception::release_pointer(). . . . . . . . . . . . . . . . . . . . . . . . . . . . .454 tix_exception::set_unhandled_exception_hook() . . . . . . . . . . . . . . . . .455 tix_handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 tix_handler::get_current() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456 tix_handler::get_exception() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456 tix_handler::get_report() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456 tix_handler::get_report0(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456 tix_handler::get_value() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456 Chapter 3 System-Supplied Global Functions . . . . . . . . . . . . . . . 457 Global C++ Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 ::operator delete(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 void ::operator delete(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .458 ::operator new() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Release 6.3 37 Contents ::os_fetch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 ::os_fetch_address() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 ::os_store() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Chapter 4 System-Supplied Macros. . . . . . . . . . . . . . . . . . . . . . 469 ObjectStore Macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 DECLARE_EXCEPTION(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 DEFINE_EXCEPTION() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 OS_BEGIN_TXN() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 OS_BEGIN_TXN_NAMED() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 OS_END_FAULT_HANDLER . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 OS_END_TXN() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 OS_ESTABLISH_FAULT_HANDLER . . . . . . . . . . . . . . . . . . . . . . . 481 OS_MARK_SCHEMA_TYPE() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 OS_MARK_SCHEMA_TYPESPEC() . . . . . . . . . . . . . . . . . . . . . . . . 483 OS_REFERENCE_NOCLASS() . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 OS_REFERENCE_PROTECTED_NOCLASS() . . . . . . . . . . . . . . . . . . 485 OS_REPORT_DLL_LOAD_AND_UNLOAD() . . . . . . . . . . . . . . . . . . 486 OS_SCHEMA_DLL_ID() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 OS_SCHEMA_INFO_NAME() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 os_soft_pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 OS_SOFT_POINTER32_NOCLASS() . . . . . . . . . . . . . . . . . . . . . . . 490 OS_SOFT_POINTER64_NOCLASS() . . . . . . . . . . . . . . . . . . . . . . . 491 TIX_END_HANDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 TIX_EXCEPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 TIX_HANDLE() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 TIX_HANDLE_IF() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Chapter 5 Predefined TIX Exceptions. . . . . . . . . . . . . . . . . . . . . 499 Parent Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 General ObjectStore Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . 501 Schema Evolution Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Metaobject Protocol Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . 509 Database Copy Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 RPC Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Component Schema Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . 512 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 38 38 C++ A P I Reference Preface Purpose The C++ A P I Reference provides a reference to the core C++ programming interface to ObjectStore. It is supplemented by the C++ Collections Guide and Reference, which describes the programming interface for using ObjectStore collections, queries, and indexes. Audience This book assumes the reader is experienced with C++. Scope Information in this book assumes that ObjectStore is installed and configured. This book supports ObjectStore Release 6.3. How This Book Is Organized This book is organized as follows: • Chapter 1, Introduction, on page 43, describes the ObjectStore database services. • Chapter 2, Class Library, on page 47, describes the system-supplied C++ classes, whose members and enumerators provide an interface to database features. The classes are listed alphabetically by class name. Within the entry for each class, the class’s members, as well as enumerators defined within the class’s scope, are listed alphabetically. • Chapter 3, System-Supplied Global Functions, on page 457, describes the systemsupplied interface functions that are not members of any class but are global C++ functions; for example, ::operator new(). • Chapter 4, System-Supplied Macros, on page 469, describes ObjectStore macros, which provides such services as exception handling and transaction processing. • Chapter 5, Predefined TIX Exceptions, on page 499, lists and describes exceptions that ObjectStore signals to indicate error conditions. Notation Conventions This document uses the following conventions Convention Meaning Courier Courier font indicates code, syntax, file names, API names, system output, and the like. Bold Courier Bold Courier font is used to emphasize particular code, such as user input. Italic Courier Release 6.3 Italic Courier font indicates the name of an argument or variable for which you must supply a value. 39 Preface Convention Meaning Sans serif Sans serif typeface indicates the names of user interface elements such as dialog boxes, buttons, and fields. Italic serif In text, italic serif typeface indicates the first use of an important term. [] Brackets enclose optional arguments. { }* or { }+ When braces are followed by an asterisk (*), the items enclosed by the braces can be repeated 0 or more times; if followed by a plus sign (+), one or more times. { a |b | c} Braces enclose two or more items. You can specify only one of the enclosed items. Vertical bars represent OR separators. For example, you can specify a or b or c. ... Three consecutive periods can indicate either that material not relevant to the example has been omitted or that the previous item can be repeated. Example Programs The example programs listed in Chapter 4 of this manual are available online in the following directories: • $OS_ROOTDIR/examples/doc_demos (UNIX) • %OS_ROOTDIR%\examples\doc_demos (Windows) The doc_demos directory consists of subdirectories corresponding to chapters in the documentation that contain example programs. For example, the subdirectory ref4 contains the programs that appear in Chapter 4 of this manual. Each subdirectory contains • Source files for the example programs • A README.TXT file • A makefile for building the program • A doall script (in Windows, doall.bat batch file) that automates building and running the program The doc_demos directory also contains a README.TXT file that explains how the subdirectories are organized. Note The example programs are not intended as models of the most effective way to write an ObjectStore application. Rather, their purpose is simply to illustrate features of the ObjectStore API that are described in the manual. Progress Software Real Time Division on the World Wide Web The Progress Software Real Time Division Web site (www.progress.com/realtime) provides a variety of useful information about products, news and events, special programs, support, and training opportunities. 40 C++ A P I Reference Preface Technical Support To obtain information about purchasing technical support, contact your local sales office listed at www.progress.com/realtime/techsupport/contact, or in North America call 1-781-280-4833. When you purchase technical support, the following services are available to you: • You can send questions to [email protected]. Remember to include your serial number in the subject of the electronic mail message. • You can call the Technical Support organization to get help resolving problems. If you are in North America, call 1-781-280-4005. If you are outside North America, refer to the Technical Support Web site at www.progress.com/realtime/techsupport/contact. • You can file a report or question with Technical Support by going to www.progress.com/realtime/techsupport/techsupport_direct. • You can access the Technical Support Web site, which includes - A template for submitting a support request. This helps you provide the necessary details, which speeds response time. - Solution Knowledge Base that you can browse and query. - Online documentation for all products. - White papers and short articles about using Real Time Division products. - Sample code and examples. - The latest versions of products, service packs, and publicly available patches that you can download. - Access to a support matrix that lists platform configurations supported by this release. - Support policies. - Local phone numbers and hours when support personnel can be reached. Education Services To learn about standard course offerings and custom workshops, use the Real Time Division education services site (www.progress.com/realtime/services). If you are in North America, you can call 1-800-477-6473 x4452 to register for classes. If you are outside North America, refer to the Technical Support Web site. For information on current course offerings or pricing, send e-mail to [email protected]. Searchable Documents In addition to the online documentation that is included with your software distribution, the full set of product documentation is available on the Technical Support Web site at www.progress.com/realtime/techsupport/documentation. The site provides documentation for the most recent release and the previous supported release. Service Pack README files are also included to provide historical context for specific issues. Be sure to check this site for new information or documentation clarifications posted between releases. Your Comments Release 6.3 41 Preface Real Time Division product development welcomes your comments about its documentation. Send any product feedback to [email protected]. To expedite your documentation feedback, begin the subject with Doc:. For example: Subject: Doc: Incorrect message on page 76 of reference manual 42 C++ A P I Reference Chapter 1 Introduction This document describes the application programming interface (API) to the functionality provided by the ObjectStore object-oriented database management system. ObjectStore seamlessly integrates the C and C++ programming language with the database services required by complex, data-intensive applications. These services include support for the following: • Persistence Provision of a central repository for information that persists beyond the lifetime of the process that recorded it • Query processing Support for associative data retrieval, such as lookup by name or ID number • Integrity control Services that maintain data consistency based on specified database constraints • Access control Services that protect data against unauthorized access • Concurrency control Services that allow shared, concurrent data access • Fault tolerance Services that protect data consistency and prevent data corruption even in the event of system crashes or network failures • Dynamic schema access Services that allow the programmatic manipulation of database schema information • Schema evolution Services that support schema change and automatic modification of database objects to conform to new schemas • Data compaction Services that support data reorganization to eliminate fragmentation Release 6.3 43 ObjectStore Database Services ObjectStore Database Services This section summarizes the functionality of ObjectStore database services. Persistence ObjectStore provides direct, transparent access to persistent data from within C++ programs. No explicit database reads or writes are required, and persistence is entirely orthogonal to type. This means that the same type can have both persistent and nonpersistent instances, and the same function can take either persistent or nonpersistent arguments. Moreover, the instances of any built-in C++ type can be designated as persistent. Persistent allocation and deallocation are performed with the ObjectStore override of ::operator new() and ::operator delete(). Clusters and Segments A cluster is the basic physical unit of allocation in a database. A segment is a group of one or more clusters. Both are variable-sized and can be used as the unit of transfer to and from the database. In general, you should allocate storage for data from the same cluster, especially if the data are frequently accessed together. Allocating from the same segment can be useful, however, when you want the data to share the same access controls, which can be set only at the segment level. ObjectStore overloads ::operator new() to allow data clustering at the database, segment, or cluster level. Entry-Point Objects ObjectStore enables you to name an object that you want to use as a database entry point. You can also look up this object by its name and then use it as a starting point for navigating through the database by following pointers contained in data structure fields, just as you would do in a non-ObjectStore C++ program. Pointer dereferencing causes transparent database retrievals when needed. Note You can also access data within an ObjectStore database by using query processing. For information about query processing and the collections facility, see the C++ Collections Guide and Reference. Integrity Control Many design applications create and manipulate large amounts of complex persistent data. Frequently, this data is jointly accessed by a set of cooperative applications, each of which carries the data through some well-defined transformation. Because the data is shared, and because it is more permanent and more valuable than any particular run of an application, maintaining the data’s integrity becomes a major concern and requires special database support. In addition to the integrity control provided by compile-time type checking, ObjectStore provides several facilities for dealing with some of the most common integrity maintenance problems. Problems and solutions 44 One integrity control problem concerns pairs of data members that are used to model binary relationships. A binary relationship, such as the part/subpart relationship, Chapter 1: Introduction for example, can be modeled by a pair of data members: parent_part and child_part. Modeling the relationships with both of these data members has the advantage of allowing navigation both up and down the parts hierarchy. However, the data members must be kept in a consistent state with respect to one another: one object is the parent of another if and only if the other is a child of the first. This integrity constraint can be enforced by declaring the two data members as inverses of one another. ObjectStore automatically implements the constraint as an update dependency. Another integrity control problem concerns illegal pointers. ObjectStore can dynamically detect pointers from persistent to transient memory, as well as crossdatabase pointers from segments specified by the user to disallow such pointers. ObjectStore’s schema evolution facility can also detect pointers to deleted objects and incorrectly typed pointers. Access Control ObjectStore provides two general approaches to database access control. With one approach, you can set read and write permissions for various categories of users at various granularities. With the other approach, you can require that applications supply a key to access a particular database. ObjectStore also supports server authentication services. Transactions and Concurrency Control The concurrency control scheme employed by ObjectStore is based on transactions with two-phase locking. Locking is automatic and completely transparent to the user. The act of reading (or writing) an object causes a read (or write) lock to be acquired for the object, thus eliminating the need to insert special locking commands into the application code. Locking information is cached on both client and ObjectStore server, minimizing the need for network communication when the same process performs consecutive transactions on the same data. ObjectStore also supports multiversion concurrency control (MVCC), which allows nonblocking database reads. This form of concurrency control is implemented using a technique of delaying propagation of data from the server log. Fault Tolerance ObjectStore’s fault tolerance is based on transactions and logging. Fault tolerance endows transactions with a number of important properties. Either all of a transaction’s changes to persistent memory are made successfully, or none at all are made. If a failure occurs in the middle of a transaction, none of its database updates is made. In addition, a transaction is not considered to have completed successfully until all its changes are recorded safely on stable storage. After a transaction commits, failures such as server crashes or network failures cannot erase the transaction’s changes. Dynamic Schema Access ObjectStore’s metaobject protocol (MOP) supports access to ObjectStore schema information, stored in the form of objects that represent C++ types. These objects are actually instances of ObjectStore metatypes, so called because they are types whose Release 6.3 45 ObjectStore Database Services instances represent types. Schema information is also represented with the help of various auxiliary classes that are not in the metatype hierarchy, such as classes whose instances represent data members and member functions. The metaobject protocol supports run-time read access to ObjectStore schemas, as well as dynamic type creation and schema modification. Schema Evolution The term schema evolution refers to the changes undergone by a database’s schema during the course of the database’s existence, especially changes that could require changing the representation of objects already stored in the database. Without the schema evolution facility, you can change a database schema only by adding new classes to it. Redefinition of a class already contained in the schema, except in ways that do not affect the layout that the class defines for its instances, is not allowed. (Adding a nonstatic data member, for example, changes instance layout, but adding a nonvirtual member function does not.) The schema evolution facility, however, allows arbitrary redefinition of the classes in a database’s schema, even if instances of the redefined classes already exist. Invoking schema evolution directs ObjectStore to modify a database’s schema and change the representation of any existing instances in the database to conform to the new class definitions. If desired, these representation changes can be directed by user-supplied routines. Data Compaction ObjectStore databases consist of clusters containing persistent data. As persistent objects are allocated and deallocated in a cluster, internal fragmentation in the segment can increase because of the presence of holes produced by deallocation. The ObjectStore allocation algorithms recycle deleted storage when objects are allocated, but there might nevertheless be a need to compact persistent data by squeezing out the deleted space. Such compaction frees persistent storage space so that it can be used by other clusters. 46 Chapter 2 Class Library This chapter describes the system-supplied C++ classes whose members and enumerators provide an interface to database features. All classes are listed alphabetically by class name. Within the entry for each class, the class’s members, as well as enumerators defined within the class’s scope, are listed alphabetically. The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. For information about support for 64-bit integers, see os_int64 on page 231 and os_unsigned_int64 on page 446. On Sun, you can use EUC or SJIS encoding for strings passed to char* formal parameters. Some functions in the ObjectStore API return an array or a character string. Unless the return value of such a function is declared const, the array or string is allocated from the heap and should be deleted to prevent a memory leak. ObjectStore classes The following list includes all the ObjectStore API classes available for you to use in developing your ObjectStore applications. Release 6.3 basic_undo 52 objectstore 54 objectstore_exception 96 os_access_modifier 97 os_address_space_marker 98 os_anonymous_indirect_type 101 os_app_schema 102 os_application_schema_info 103 os_archiver 104 os_archiver_options 106 os_array_type 108 os_authentication 109 os_backup 110 47 ObjectStore classes 48 os_backup_options 112 os_base_class 116 os_class_type 119 os_close_database 130 os_cluster 131 os_cluster_cursor 138 os_cluster_with 140 os_compact 141 os_comp_schema 147 os_database 148 os_database_root 172 os_database_schema 175 os_Database_table 176 os_dbutil 178 os_deadlock_exception 203 os_DLL_finder 205 os_DLL_schema_info 206 os_Dumper_reference 208 os_Dumper_specialization 211 os_dynamic_extent 213 os_enum_type 215 os_enumerator_literal 217 os_evolve_subtype_fun_binding 218 os_export_id 219 os_export_id_cursor 220 os_failover_server 222 os_field_member_variable 224 os_Fixup_dumper 225 os_function_type 227 os_indirect_type 229 os_instantiated_class_type 230 os_int64 231 os_integral_type 232 os_literal 234 os_literal_template_actual_arg 237 os_lock_timeout_exception 238 os_member 240 os_member_function 244 os_member_namespace 248 C++ A P I Reference Chapter 2: Class Library Release 6.3 os_member_type 249 os_member_variable 250 os_mop 254 os_named_indirect_type 257 os_namespace 258 os_notification 260 os_object_cursor 268 os_path_to_data 271 os_pathname_and_segment_number 275 os_pathname_segment_cluster 276 os_persistent_to_transient_pointer_manager 277 os_Planning_action 278 os_pointer_literal 279 os_pointer_to_member_type 280 os_pointer_type 281 os_pragma 282 os_rawfs_entry 283 os_real_type 286 os_recover 287 os_recover_options 289 os_Reference<T> 293 os_Reference_cross_session<T> 295 os_reference_cross_session 297 os_reference_internal 301 os_Reference_protected<T> 304 os_reference_protected_internal 306 os_reference_type 310 os_relationship_member_variable 311 os_release_cluster_pointer 312 os_release_database_pointer 313 os_release_root_pointer 314 os_release_segment_pointer 315 os_replicator 316 os_replicator_options 318 os_replicator_statistic_info 321 os_restore 323 os_restore_options 325 os_retain_address 329 os_schema 330 49 ObjectStore classes 50 os_schema_evolution 332 os_schema_handle 347 os_schema_info 350 os_schema_install_options 351 os_segment 352 os_segment_access 362 os_segment_cursor 365 os_server 367 os_session 370 os_soft_pointer32_base 373 os_soft_pointer64_base 377 os_soft_pointer32<T> 381 os_soft_pointer64<T> 384 os_soft_pointer32<void> 387 os_soft_pointer64<void> 388 os_soft_pointer32<char> 389 os_soft_pointer64<char> 390 os_str_conv 391 os_string 394 os_subscription 396 os_template 399 os_template_actual_arg 401 os_template_formal_arg 403 os_template_instantiation 405 os_template_type_formal 407 os_template_value_formal 408 os_transaction 409 os_transaction_hook 415 os_transformer_binding 417 os_type 418 os_Type_fixup_info 429 os_Type_fixup_loader 430 os_Type_info 432 os_Type_loader 434 os_type_template 436 os_type_template_actual_arg 437 os_type_type 438 os_typed_pointer_void 439 os_typed_pointer_void 439 C++ A P I Reference Chapter 2: Class Library Release 6.3 os_unsigned_int64 446 os_untranslatable_pointer_handler 448 os_void_type 451 os_with_mapped 452 tix_context 453 tix_exception 454 tix_handler 456 51 basic_undo basic_undo In C++, the destructor for an automatic object is run whenever a stack frame containing it is unwound. When a C++ exception is signaled and control is transferred to a handler in an enclosing scope, the intervening stack frames are unwound. When a TIX exception is signaled and control is transferred to a handler in an enclosing scope, the intervening stack frames are unwound on certain platforms but not on others. On platforms that do not support native exceptions, the intervening stack frames are not unwound. When an exception occurs, the run-time system on such platforms does not automatically call any destructors you might have coded to restore class instances to a known state. If your application runs on such platforms, you can derive a class from basic_undo to partially simulate the unwinding of the intervening stack frames. ObjectStore runs the destructors for instances of basic_undo contained in those stack frames when the unwinding is simulated. The destructors for these derived classes are virtual and can perform any desired undo processing. You must create an instance of the derived class in the desired scope before an exception can be raised. Note that this object must be stack allocated, not heap allocated. The object’s destructor is invoked whenever the signaling of an exception transfers control out of or through its stack frame. (Of course, the destructors are invoked when the program exits normally.) A class derived from basic_undo must have a virtual destructor if and only if further classes are derived from it. basic_undo::basic_undo() basic_undo(); Constructs a new instance of basic_undo. basic_undo::get_exception() protected: tix_exception* get_exception() const; Returns a pointer to the exception currently being signaled. If no exception is being signaled, returns 0 (false). See also basic_undo::has_exception() on page 52. basic_undo::has_exception() protected: os_boolean has_exception() const; Returns nonzero (true) if an exception is being signaled; otherwise, returns 0 (false). To learn which exception is being signaled, see basic_undo::get_exception() on page 52. However, in cases where you do not need to know which exception is being signaled, has_exception() is faster than get_exception(). 52 C++ A P I Reference Chapter 2: Class Library basic_undo::~basic_undo() virtual ~basic_undo(); This destructor is invoked whenever a frame is unwound by tix_ exception::signal(). Overloadings of it defined by derived classes can perform undo processing. This function is also invoked in the normal way upon block exit. Release 6.3 53 objectstore objectstore This class provides static members related to persistence, performance tuning, and performance monitoring. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. objectstore::acquire_address_space() static os_boolean acquire_address_space( os_ptr_val size ); For multisession applications. Sets the address space partition size of the current session. The size is specified in bytes and must be a multiple of 64 KB. Call this function before initialization of the current session. See os_ session::force_full_initialization() on page 370. If you call this function subsequent to initializing the current session, the call has no effect. os_ptr_val is a 32-bit unsigned integer on platforms whose pointers are 32 bits, and it is a 64-bit unsigned integer on platforms whose pointers are 64 bits. size is the size in bytes of the partition. When the session is initialized, err_address_space_full is signaled if the session’s address space partition is too small or if the partition size is too large to fit in any portion of free space in the process-wide persistent storage region. err_misc is signaled if called after the current session has been initialized. err_misc is signaled if size is not a multiple of 64 KB. err_no_session is signaled if there is no current session. objectstore::acquire_lock() enum os_lock_type {os_read_lock, os_write_lock, os_no_lock}; static os_lock_timeout_exception* acquire_lock( void* addr, os_lock_type lock_type, os_int32 milliseconds, os_unsigned_int32 bytes_to_lock = 1 ); Attempts to acquire a lock of the type specified by lock_type (either os_read_lock or os_write_lock) on the page(s) containing the memory starting at addr and spanning bytes_to_lock bytes. If the lock is successfully acquired, acquire_lock() returns 0. If you specify –1 for the milliseconds argument, acquire_lock() uses the segment’s current lock timeout value. 54 C++ A P I Reference Chapter 2: Class Library If the caller wants an infinite timeout and the segment’s timeout values are not –1, the caller could pass a very large value for the timeout (to be effectively infinite). It could also use objectstore::set_lock_timeout() to set the default to –1 temporarily. Specifying a 0 value for the milliseconds argument means that the attempt to acquire the lock does not wait at all if any concurrency conflict is encountered. After an attempt to acquire a lock, if the time specified by milliseconds elapses without the lock’s becoming available, an os_lock_timeout_exception* is returned. The timeout is rounded up to the nearest whole number of seconds. The os_lock_timeout_exception contains information on the circumstances preventing lock acquisition. It is the caller’s responsibility to delete the os_lock_ timeout_exception object when it is no longer needed. If the attempt causes err_deadlock to be signaled in the current session, the transaction is aborted, regardless of the value of the specified timeout. Overloadings The following overloadings for acquire_lock() are supported: static os_lock_timeout_exception* acquire_lock( os_database* db, os_lock_type lock_type, os_int32 milliseconds ); Attempts to acquire a lock of the type specified by lock_type (either os_read_lock or os_write_lock) on the database specified by db. Locking a database is equivalent to acquiring locks on all the pages (and segments) of the database. So, for example, acquiring a read lock on a database is equivalent to acquiring read locks on all the pages of the database. Acquiring a lock on a database does not preclude clients from requesting separate locks on individual pages of the database. If the lock is successfully acquired, 0 is returned. If you specify –1 for the milliseconds argument, acquire_lock() uses the segment’s current lock timeout value. If the caller wants an infinite timeout and the segment’s timeout values are not –1, the caller could pass a very large value for the timeout (to be effectively infinite). It could also use objectstore::set_lock_timeout() to set the default to –1 temporarily. Specifying a 0 value for the milliseconds argument means that the attempt to acquire the lock does not wait at all if any concurrency conflict is encountered. After an attempt to acquire a lock, if the time specified by milliseconds elapses without the lock’s becoming available, an os_lock_timeout_exception* is returned. The timeout is rounded up to the nearest whole number of seconds. The os_lock_timeout_exception contains information on the circumstances preventing lock acquisition. It is the caller’s responsibility to delete the os_lock_ timeout_exception object when it is no longer needed. If the attempt causes err_deadlock to be signaled in the current session, the transaction is aborted, regardless of the value of the specified timeout. Release 6.3 55 objectstore static os_lock_timeout_exception* acquire_lock( os_segment* seg, os_lock_type lock_type, os_int32 milliseconds ); Attempts to acquire a lock of the type specified by lock_type (either os_read_lock or os_write_lock) on the segment specified by seg. This must be specified in a toplevel transaction. Locking a segment is equivalent to acquiring locks on all the pages of the segment. So, for example, acquiring a read lock on a segment is equivalent to acquiring read locks on all the pages of the segment. Acquiring a lock on a segment does not preclude clients from requesting separate locks on individual pages of the database. If the lock is successfully acquired, acquire_lock() returns 0. If you specify –1 for the milliseconds argument, acquire_lock() uses the segment’s current lock timeout value. If the caller wants an infinite timeout and the segment’s timeout values are not –1, the caller could pass a very large value for the timeout (to be effectively infinite). It could also use objectstore::set_lock_timeout() to set the default to –1 temporarily. Specifying a 0 value for the milliseconds argument means that the attempt to acquire the lock does not wait at all if any concurrency conflict is encountered. After an attempt to acquire a lock, if the time specified by milliseconds elapses without the lock’s becoming available, an os_lock_timeout_exception* is returned. The timeout is rounded up to the nearest whole number of seconds. The os_lock_timeout_exception contains information on the circumstances preventing lock acquisition. It is the caller’s responsibility to delete the os_lock_ timeout_exception object when it is no longer needed. If the attempt causes err_deadlock to be signaled in the current session, the transaction is aborted, regardless of the value of the specified timeout. static os_lock_timeout_exception* acquire_lock( os_cluster* clstr, os_lock_type lock_type, os_int32 milliseconds ); Attempts to acquire a lock of the type specified by lock_type (either os_read_lock or os_write_lock) on the cluster specified by clstr. This must be specified in a toplevel transaction. Locking a cluster is equivalent to acquiring locks on all the pages of the cluster. For example, acquiring a read lock on a cluster is equivalent to acquiring read locks on all the pages of the cluster. Acquiring a lock on a cluster does not preclude a client that has acquired a lock on a cluster from also requesting separate locks on individual pages of the cluster. If the lock is successfully acquired, acquire_lock() returns 0. 56 C++ A P I Reference Chapter 2: Class Library Specifying a –1 value for the milliseconds argument means that acquire_lock() uses the cluster’s current lock timeout value. If the caller wants an infinite timeout and the cluster's timeout values are not –1, the caller could pass a very large value for the timeout (to be effectively infinite). It could also use objectstore::set_lock_timeout() to set the default to –1 temporarily. Specifying a 0 value for the milliseconds argument means that the attempt to acquire the lock does not wait at all if any concurrency conflict is encountered. After an attempt to acquire a lock, if the time specified by milliseconds elapses without the lock's becoming available, an os_lock_timeout_exception* is returned. The timeout is rounded up to the nearest whole number of seconds. The os_lock_timeout_exception contains information on the circumstances preventing lock acquisition. It is the caller's responsibility to delete the os_lock_ timeout_exception object when it is no longer needed. If the attempt causes err_deadlock to be signaled in the current session, the transaction is aborted regardless of the value of the specified timeout. objectstore::add_missing_dispatch_table_handler() typedef void* (*os_missing_dispatch_table_handler_function) const char* dispatch_table_identifier, const char* dispatch_table_symbol ); static void add_missing_dispatch_table_handler( os_missing_dispatch_table_handler_function ); Registers the specified os_missing_dispatch_table_handler_function. During inbound relocation of a given page, if an object’s virtual-function table (vtbl) slot is not satisfied by any known vtbls, the handler gets called with a string denoting a path to the vtbl slot and a string denoting the platform-dependent linker symbol associated with the vtbl identifier, if known. For example, given class A {virtual vf1( );}; class B {virtual vf2( );}; class C : public A, public B {virtual vf3( );}; ObjectStore calls the user's handler function with the string "C@B" if it cannot satisfy the virtual function table slot for the base class subobject B in class C. The dispatch_table_symbol argument is the compiler-specific linker symbol that ObjectStore associates with the dispatch table, or NULL if the vtbl identifier has no entry in the application schema source file linked into the application. The dispatch_table_symbol argument is provided to allow an application to load a library dynamically and look up the symbol. It is also useful for generating a missing vtbl. Release 6.3 57 objectstore objectstore::change_type() static void objectstore::change_type( void* address, os_typespec* typespec) Changes the type of the persistent object at address to the type defined by typespec. You must invoke this function in an update transaction. The new type must be • The same size and alignment as the object's old type • A class that is derived directly or indirectly from the old type If you violate these restrictions, ObjectStore signals err_misc. The object whose type you are changing can be a singleton object or an array. If it is an array, ObjectStore changes the type of each element to the type specified by typespec. If the new class defines any virtual functions, they do not become available until the page containing the virtual function table pointer is removed from the cache and refetched. This does not affect the usual use of this API for schema evolution, where the real definition of the new class is not installed until a later step. That is, the process calling objectstore::change_type() is using only an intermediate definition of the new class. For an example of the use of this function, see Advanced C++ A P I User Guide, Advanced Schema Evolution, Instance Reclassification. objectstore::clear_persistent_to_transient_pointers() static os_int32 clear_persistent_to_transient_pointers( os_int32 max = -1 ); This is an optional user-callable function that tells ObjectStore to clear the specified persistent pointers to transient objects immediately. It returns a count of the number of pointers cleared in the session. Pointers in the specified entity will be cleared in no particular order. The function can also specify a maximum number of pointers to be cleared. This can be useful if this function is being called in order to free some transient storage. If you do not specify a maximum, all persistent pointers to transient objects in the specified entity will be cleared by ObjectStore before control returns to the application. This function must be called from within a transaction, but that transaction need not be an update transaction. If this function is never called by the application, persistent pointers to transient objects will be cleared, but only when ObjectStore deems it necessary. Overloadings The following overloadings are supported: static os_int32 clear_persistent_to_transient_pointers( os_database* db, os_int32 max = -1 ); 58 C++ A P I Reference Chapter 2: Class Library static os_int32 clear_persistent_to_transient_pointers( os_segment* seg, os_int32 max = -1 ); static os_int32 clear_persistent_to_transient_pointers( os_cluster* clstr, os_int32 max = -1 ); The application can specify a specific os_database, os_segment, or os_cluster, in which case only persistent pointers to transient objects in that entity will be cleared. The default is to clear any pointers in the session. For information about using this function to manage persistent pointers to transient objects, Persistent Pointers to Transient Objects in Chapter 1 of the Advanced C++ A P I User Guide. objectstore::embedded_server_available() static os_boolean embedded_server_available(); For use with ObjectStore/Single applications. Returns nonzero (true) if the ObjectStore / Single version of libos is available in the application; returns 0 (false) otherwise. Functions that report on embedded ObjectStore servers and on network servers are mutually exclusive. That is, objectstore::embedded_server_available() and objectstore::network_servers_available() cannot both return nonzero in the same application. objectstore::enable_damaged_dope_repair() static void enable_damaged_dope_repair(os_boolean); Enables or disables automatic repair of incorrect compiler dope for an object while ObjectStore is loading a component schema. The default is false. The objectstore::enable_damaged_dope_repair() function repairs compiler dope damage by regenerating compiler dope in all cached user data pages of affected databases. You can query whether dope damage repair is enabled or disabled by calling the function objectstore::is_damaged_dope_repair_enabled(). If dope repair is not enabled, dope damage incurred while ObjectStore is loading a component schema signals an err_transient_dope_damaged exception. If dope damage is enabled, dope damage while loading a component schema causes ObjectStore to examine each cached user (that is, nonschema) data page of each segment that contains any transient dope of each affected database. If the page is currently accessible, ObjectStore immediately regenerates its transient dope (through relocation); otherwise, ObjectStore marks the page and its transient dope is regenerated the next time the page is touched. Release 6.3 59 objectstore Compiler dope Compiler dope is additional information added to the run-time layout of an object by the compiler, in addition to the nonstatic data members of the object. The correct compiler dope for an object can change as a result of loading or unloading a component schema, for example, because the compiler dope can point to a virtual function implementation contained in a DLL that is being loaded or unloaded. Note that an object can suffer dope damage when the implementation of its class changes, even if the object is never used by the program. This is because ObjectStore brings entire pages of databases into memory at a time. If an object is on the same page as another object that is being used, then the first object is also being used as far as dope damage is concerned. When the combined program schema is rebuilt because a component schema has been unloaded, compiler dope in cached persistent objects always needs to be repaired (assuming that there could have been compiler dope pointing to a DLL that was unloaded). This repair takes place regardless of the setting of objectstore::enable_damaged_dope_repair_enabled(). The repair procedure is the same as described previously. objectstore::enable_DLL_schema() static void enable_DLL_schema(os_boolean); Enables or disables the component schema feature. The default is true for Windows and Solaris platforms. Use objectstore::is_DLL_schema_enabled() on page 75 to query whether component schema support is enabled. objectstore::export_object() static os_export_id export_object(const void* export_address); Exports the persistent top-level object at or containing the location pointed to by export_address, if it is not already exported. Returns the export ID of the specified top-level object. The database containing the specified object must be opened. If the specified toplevel object is not already exported, the database containing it must be opened for update and the current transaction must be an update transaction. If the object is already exported, calling this function is a read-only operation. If you retrieve an export ID in a transaction that is later aborted, do not use the export ID after the abort. ObjectStore might reuse the export ID in a subsequent transaction. The export_address argument is not required to point to the beginning of any object. err_invalid_export_id is signaled if you dereference a cross-segment pointer to an exported object that has been deleted. err_database_not_open or err_database_not_found is signaled if you retrieve a cross-segment pointer (or resolve a cross-segment soft pointer) to an exported object 60 C++ A P I Reference Chapter 2: Class Library in a database that is not open and cannot be autoopened (see objectstore::set_ auto_open_mode() on page 83). err_transient_pointer is signaled if export_address is not within the current application’s persistent storage region. err_wrong_session is signaled if export_address is within the current application’s persistent storage region but not within the current session’s address space partition. err_not_assigned is signaled if export_address is in the address space partition for the current session but is not currently a valid address (for example, because it was retrieved in a prior transaction). err_no_such_object is signaled if export_address refers to unallocated persistent storage. err_export_schema_segment is signaled if export_address points to an object in the system segment of a database. objectstore::find_DLL_schema() static os_schema_handle* find_DLL_schema( const char* DLL_identifier, os_boolean load_if_not_loaded, os_boolean error_if_not_found ); Returns a pointer to the component schema handle for the DLL identified by the first argument in the following cases: • The component schema is loaded and not queued for unload. • The component schema is already queued for loading. Otherwise, if load_if_not_loaded is true (nonzero), calls objectstore::load_ DLL() with the first and third arguments. If objectstore::load_DLL() returns a value other than os_null_DLL_handle, this function looks for the component schema again. Note that objectstore::load_DLL() signals the exception err_DLL_not_loaded if the DLL cannot be found or loaded, or if DLL_identifier cannot be understood and error_if_not_found is true. If the component schema is still not found, and if error_if_not_found is true, this function signals an err_schema_not_found exception; otherwise, it returns a null pointer. Note that if load_if_not_loaded and error_if_not_found are both true, the exception signaled is err_DLL_not_loaded. objectstore::free_memory() static void free_memory(void* memory_to_free); Releases persistent storage to which memory_to_free points. This function performs the same operation as ObjectStore’s global ::operator delete() when it is used to Release 6.3 61 objectstore delete persistent storage. If you want to implement your own global delete function, you must define it to include a call to free_memory() for deleting persistent storage. The following example is a minimal implementation of a user-defined global delete: void operator delete(void* p) { if (objectstore::is_persistent(p)) objectstore::free_memory(p); else // your own transient delete operation }; For information about registering your own transient delete function, see objectstore::set_transient_delete_function() on page 93. For information about ObjectStore’s global delete function, see ::operator delete() on page 458. objectstore::get_address_space_generation_number() os_unsigned_int32 get_address_space_generation_number(); Returns an unsigned integer that is incremented by the client whenever it releases any address space. Its primary purpose is to support pointer caching, such as that used by ObjectStore collections in several circumstances. A transient cache of persistent pointers should be considered invalid whenever the value of objectstore::get_address_space_generation_number() increases. The objectstore::get_address_space_generation_number() function simply returns the value read from a variable and so is fast enough to be called whenever a pointer cache is examined. objectstore::get_all_servers() static void get_all_servers( os_int32 max_servers, os_server_p* servers, os_int32& n_servers ); Provides access to instances of os_server that represent all the ObjectStore servers known to the current session. The os_server_p* is an array of pointers to os_ server objects. This array must be allocated by the user. The function objectstore::get_n_servers( ) can be used to determine the size array to allocate. The max_servers argument is specified by the user and is the maximum number of elements the array is to have. The n_servers argument refers to the actual number of elements in the array. objectstore::get_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; static os_allocation_strategy get_allocation_strategy(); 62 C++ A P I Reference Chapter 2: Class Library Returns an os_allocation_strategy enumerator that specifies the current strategy for all databases when ObjectStore allocates storage for an object in a cluster. The following enumerators can be returned by this function: • os_allocation_strategy_least_space • os_allocation_strategy_least_wait The following sections describe their meaning. For information about specifying the allocation strategy in all databases, see objectstore::set_allocation_ strategy() on page 82. os_allocation_strategy_least_space A value of os_allocation_strategy_least_space causes ObjectStore to use the following strategy when it is looking for storage to allocate in a cluster: 1 Look for unlocked pages in the cluster with enough room. If a suitable contiguous range of pages is found, allocate from them. 2 Otherwise, look for locked pages in the cluster with enough room. If a suitable contiguous range of pages is found, allocate from them after the locks are released. 3 Otherwise, grow the cluster. Locked pages refers to pages locked by other clients, and unlocked pages refers to pages not locked by other clients. Neither term implies what lock the current client has on the page. Also, it is assumed that pages you have write owned (and therefore are not locked by others) have been checked for free space first. os_allocation_strategy_least_wait A value of os_allocation_strategy_least_wait causes ObjectStore to use the following strategy when it is looking for storage to allocate in a cluster: 1 Look for unlocked pages in the cluster with enough room. If a suitable contiguous range of pages is found, allocate from them. 2 Otherwise, grow the cluster. Unlocked pages refers to pages not locked by other clients. The term does not imply what lock the current client has on the page. Also, it is assumed that pages you have write owned (and therefore are not locked by others) have been checked for free space first. objectstore::get_always_check_server_connection_at_commit() os_boolean get_always_check_server_connection_at_commit(); Returns nonzero (true) if the application is specified to check for a valid server connection before committing a read-only transaction. Returns 0 (false) if the application will not conduct this check. The default is false. The value is set by the objectstore::set_always_check_server_connection_ at_commit() function. For more information, see objectstore::set_always_ check_server_connection_at_commit() on page 82. Release 6.3 63 objectstore objectstore::get_application_schema_pathname() static const char* get_application_schema_pathname( ); Returns the path name of the application schema database. objectstore::get_as_intervals() static void get_as_intervals( os_as_interval_p& persist, os_int32& n_persist_intervals, os_as_interval_p& other, os_int32& n_other_intervals ); Returns all the ranges of virtual address space that ObjectStore is using, other than ordinary code, text, and heap space. This function is intended primarily for users who are trying to integrate ObjectStore and other complex subsystems into the same application. The ranges are returned in two arrays of os_as_interval objects. The class os_as_ interval has the following public data members: char* start; os_unsigned_int32 size; persist and other are pointers that the caller passes to get_as_intervals(). When the function returns, persist points to the array of ranges used for mapping persistent objects, and other points to any other ranges of address space that ObjectStore uses. It is the caller’s responsibility to use delete [] to free the memory allocated by get_ as_intervals() for the arrays that persist and other point to. objectstore::get_asmarkers_useless() static os_boolean get_asmarkers_useless(); Returns true (nonzero) if address-space markers have been disabled; otherwise, returns false (0). Address-space markers can be enabled or disabled by calling objectstore::set_asmarkers_useless() or by setting the OS_ASMARKERS_ USELESS environment variable. For more information, see objectstore::set_ asmarkers_useless() on page 83 and OS_ASMARKERS_USELESS in Managing ObjectStore. Address-space markers are enabled by default. objectstore::get_auto_open_mode() static void get_auto_open_mode(auto_open_mode_enum& mode); Returns the current setting for the autoopen mode in mode. For information about the different values mode can have, see objectstore::set_auto_open_mode() on page 83. For information about retrieving the fetch policy of all databases, see objectstore::get_fetch_policy() on page 66. objectstore::get_autoload_DLLs_function() static os_autoload_DLLs_function get_autoload_DLLs_function(); 64 C++ A P I Reference Chapter 2: Class Library Gets the hook function that is called when a database is put in use and its required DLL set is not empty. objectstore::get_cache_file() static char* get_cache_file(); For use with ObjectStore/Single applications. Returns the name of a cache file previously set with objectstore::set_cache_file(); returns 0 if no cache file was specified. On Windows platforms, shared memory is used instead of a cache file, so get_ cache_file() always returns 0. It is the caller’s responsibility to deallocate the returned string when it is no longer needed. objectstore::get_cache_size() static os_unsigned_int32 get_cache_size( ); Returns the current size in bytes of the client cache. objectstore::get_client_name() static const char* get_client_name(); Returns the string that was set by objectstore::set_client_name(). If set_ client_name() was not called, get_client_name() returns either the name of the executable as set by the operating system or the string "Global Session". For more information, see objectstore::set_client_name() on page 85. objectstore::get_decache_soft_pointers_after_address_space_ release() static os_boolean get_decache_soft_pointers_after_address_space_release(); Returns nonzero (true) if soft-pointer decaching is in effect; returns 0 (false) otherwise. For information about enabling soft-pointer decaching, see objectstore::set_ decache_soft_pointers_after_address_space_release() on page 86. For more information about soft-pointer decaching, see Soft-Pointer Decaching in Chapter 1 of the Advanced C++ A P I User Guide. objectstore::get_default_address_space_partition_size() static os_ptr_val get_default_address_space_partition_size(); Returns the default partition size, in bytes, last specified by objectstore::initialize_for_sessions() on page 73 or objectstore::set_ default_address_space_partition_size() on page 87. The default partition size is the amount of address space assigned to newly created sessions. Release 6.3 65 objectstore If objectstore:: initialize() has been called and objectstore::initialize_ for_sessions() has not, the size of the process-wide persistent storage region is returned. objectstore::get_export_id() static os_export_id objectstore::get_export_id( void const* export_address ); If export_address points to or points within a persistent object that currently has an export ID assigned, the export ID is returned. If export_address points to or points within a persistent top-level object that does not currently have an export ID assigned, the null export ID (see os_export_ id::is_null() on page 219) is returned. If export_address is not within the current application’s persistent storage region, the null export ID is returned. err_wrong_session is signaled if export_address is within the current application’s persistent storage region but not within the current session’s address space partition. err_not_assigned is signaled if export_address is in the address space partition for the current session but is not currently a valid address (for example, because it was retrieved in a prior transaction). err_no_such_object is signaled if export_address is in the current session’s address space partition but is not contained within any currently allocated object. objectstore::get_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; static void get_fetch_policy( os_fetch_policy& policy, os_int32& bytes ); Retrieves the current fetch policy for all databases, including autoopened ones. An enumerator of type os_fetch_policy is returned in policy, and the fetch quantum is returned in bytes. The following enumerators can be returned by this function: • os_fetch_cluster • os_fetch_page • os_fetch_stream The following sections discuss the meaning of each enumerator and of the bytes argument. For information about setting the fetch policy, see objectstore::set_ fetch_policy() on page 87. 66 C++ A P I Reference Chapter 2: Class Library os_fetch_cluster The os_fetch_cluster enumerator is used when you are performing an operation that manipulates a substantial portion of a small cluster. Under this policy, ObjectStore attempts to fetch the entire cluster containing the desired page in a single client/server interaction. When os_fetch_cluster is specified as the first argument to any of the set_fetch_policy() functions, the bytes argument is ignored. os_fetch_page If an operation uses a cluster larger than the client cache or does not refer to a significant portion of the cluster, use the os_fetch_page enumerator when you are performing the operation on the cluster. This policy causes ObjectStore to fetch a specified number of bytes at a time, rounded up to the nearest positive number of pages, beginning with the page required to resolve a given object reference. The bytes argument specifies the fetch quantum. (Note that if you specify 0 bytes, this is rounded up and the unit of transfer is a single page.) os_fetch_stream For special operations that scan sequentially through very large data structures, os_ fetch_stream might improve performance considerably. As with os_fetch_page, this fetch policy lets you specify the amount of data to fetch in each client/server interaction for a particular cluster. In addition, it specifies that a double buffering policy should be used to stream data from the cluster. This means that after the first two transfers from the cluster, each transfer from the cluster replaces the data cached by the second-to-last transfer from that cluster. This way, the last two chunks of data retrieved from the cluster generally will be in the client cache at the same time. And after the first two transfers, transfers from the cluster generally will not result in eviction of data from other clusters. This policy also greatly reduces the internal overhead of finding pages to evict. When you perform allocation that extends a cluster whose fetch policy is os_fetch_ stream, the double buffering described previously begins when allocation reaches an offset in the cluster that is aligned with the fetch quantum (that is, when the modulus of the offset and the fetch quantum is 0). If the fetch quantum exceeds the amount of available cache space (cache size minus wired pages), transfers are performed a page at a time. In general, the fetch quantum should be less than half the size of the client cache. objectstore::get_incremental_schema_installation() static os_boolean get_incremental_schema_installation( ); Returns nonzero (true) if incremental schema installation is currently enabled; returns 0 (false) if batch schema installation is enabled. See objectstore::set_ incremental_schema_installation() on page 88. objectstore::get_locator_file() static const char* get_locator_file(); Release 6.3 67 objectstore Returns a string representing the locator file. If the first character of the string is a white-space character or #, the string is the contents of the file rather than a file name. objectstore::get_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; static objectstore_lock_option get_lock_option() const; Returns the locking behavior currently in effect for all databases, segments, and clusters. For information about the return value, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 For information about setting the lock option, see objectstore::set_lock_ option() on page 88. objectstore::get_lock_status() static os_int32 get_lock_status(void* addr); Returns one of the following enumerators, indicating the current lock status of the data at the specified address: • os_read_lock • os_write_lock • os_no_lock objectstore::get_lock_timeout() static os_int32 get_lock_timeout( ); Returns the time in milliseconds for which the current session waits to acquire a lock. A value of –1 indicates that the session waits forever if necessary. For information 68 C++ A P I Reference Chapter 2: Class Library about setting the timeout value, see objectstore::set_lock_timeout() on page 89. objectstore::get_log_file() static char* get_log_file(); For use with ObjectStore/Single applications. Returns the name of the ObjectStore server log file, if set with the OS_LOG_FILE environment variable or by a call to objectstore::set_log_file(); otherwise returns the default log file name tplog.odi. It is the caller’s responsibility to deallocate the returned string when it is no longer needed. objectstore::get_n_servers() static os_int32 get_n_servers(); Returns the number of ObjectStore servers to which the current session is connected. objectstore::get_null_illegal_pointers() static os_boolean get_null_illegal_pointers( ); Returns nonzero (true) if the current session enables default_null_illegal_ pointers mode for newly created databases; returns 0 (false) otherwise. See objectstore::set_null_illegal_pointers() on page 90. objectstore::get_object_range() static void get_object_range( void const* addr, void*& base_address, os_unsigned_int32& size ); Indicates where a persistent object starts and how large it is. addr should be a pointer to a persistent object, or into the middle of a persistent object. base_address is set to the address of the beginning of the object, and size is set to the size of the object in bytes. Arrays are considered to be one object; if addr is the address of one of the array elements, base_address is set to the address of the beginning of the array. If addr does not point to a persistent object, base_address and size are both set to 0. Overloadings The following overloadings of get_object_range() are also supported: static void get_object_range( void const* addr, void*& header_address, os_unsigned_int32& total_size ); addr is a pointer to a persistent object, or into the middle of a persistent object. header_address is set to the beginning of the object; if a header is associated with the object, header_address points to the beginning of the header. total_size is set to include the object itself, including any metadata (such as a header) associated with the object. Release 6.3 69 objectstore static void get_object_range( void const* addr, void*& base_address, os_unsigned_int32& base_size, void*& header_address, os_unsigned_int32& total_size ); addr, header_address, and total_size have the same meanings as in the first overloading. base_address is set to the start of the object itself, and base_size is set to include only the object itself. objectstore::get_page_size() static os_unsigned_int32 get_page_size( ); Returns the page size for the architecture on which ObjectStore is running. objectstore::get_pointer_numbers() static void get_pointer_numbers( const void* addr, os_unsigned_int32& number_1, os_unsigned_int32& number_2, os_unsigned_int32& number_3 ); Provides a way for an application to generate a hash code based on object identity. Applications should not generate hash codes by casting a pointer to the object into a number, because the address of an object can change from transaction to transaction. Based on the addr supplied by the caller, the function returns number_1, number_2, and number_3. Use number_1 and number_3 only; ignore number_2. These values are always the same for a given object, no matter what address the object happens to be mapped to at a particular time. Moreover, no two objects will have the same values. objectstore::get_propagate_on_commit() static os_boolean get_propagate_on_commit(); For use with ObjectStore / Single applications. The return value indicates when ObjectStore propagates committed data from the transaction log to the affected database. If the return value is nonzero (true), propagations occur whenever a toplevel transaction commits. This is the default. If the return value is 0 (false), propagations occur when a database is closed and the program ends normally. If the program ends prematurely, some of the committed data in the log might not have been propagated to the database. This data is propagated the next time ObjectStore is initialized or when objectstore::propagate_log() is called, provided that the correct transaction log exists at the time. 70 C++ A P I Reference Chapter 2: Class Library In client-server mode, propagation is controlled by ObjectStore server parameters, and get_propagate_on_commit() always returns false. For information about setting when propagations occur, see objectstore::set_ propagate_on_commit() on page 91. For additional information about the log file, see • objectstore::propagate_log() on page 79 • objectstore::set_log_file() on page 89 objectstore::get_retain_persistent_addresses() static os_boolean get_retain_persistent_addresses( ); Returns nonzero (true) if the current session is in retain_persistent_addresses mode; otherwise, returns 0 (false). See objectstore::retain_persistent_ addresses() on page 81. objectstore::get_simple_auth_ui() static void get_simple_auth_ui( void(*&handler) (os_void_p, os_char const_p, os_char_p, os_int32, os_char_p, os_int32), void*& data ); Retrieves the authentication handler information stored by objectstore::set_ simple_auth_ui( ). The handler argument is the function that is called to determine the user and password information needed for authentication. The data argument is the user-supplied value that is passed to the handler function. objectstore::get_suppress_invalid_hard_pointer_errors() static os_boolean get_suppress_invalid_hard_pointer_errors(); Returns nonzero if suppression is enabled; returns 0 otherwise. See objectstore::set_suppress_invalid_hard_pointer_errors() on page 92. objectstore::get_transaction_max_retries() static os_unsigned_int32 get_transaction_max_retries(); Returns the number of times a lexical transaction is retried automatically after being aborted because of a deadlock. For information about setting the number of retries, see objectstore::set_transaction_max_retries() on page 92. For information about the macros used to set up a lexical transaction, see Chapter 4, System-Supplied Macros, on page 469. objectstore::get_transaction_priority() static os_unsigned_int16 get_transaction_priority(); Returns an unsigned integer that represents the transaction priority of the client. The ObjectStore server uses the transaction priority to decide among clients involved in Release 6.3 71 objectstore a deadlock. For more information, see objectstore::set_transaction_ priority() on page 92. objectstore::get_transient_delete_function() static void (*)(void*) get_transient_delete_function( ); Returns a pointer to the transient delete function last specified by the current session. Returns 0 if there is no current transient delete function. See objectstore::set_ transient_delete_function() on page 93. objectstore::get_union_variant() static os_unsigned_int16 get_union_variant( void* addr, const char* type_name ); Returns a number that corresponds to the currently active member object of a union in persistent memory. addr is the persistent memory address of the union, and type_name is the name of the union type. The name of a union member object can be either the fully qualified name (for example, "A::B::C") or the unqualified name (for example, "C"). For information about setting the currently active member object, see objectstore::set_union_variant() on page 94. For information about using persistent unions, see Using Persistent Unions on page 39 of Chapter 1 of the Advanced C++ A P I User Guide. objectstore::ignore_locator_file() static void ignore_locator_file(os_boolean); Passing a nonzero value ensures that no locator file is associated with the application, regardless of the setting of OS_LOCATOR_FILE or calls to set_locator_ file( ). This function is, however, subordinate to the client environment variable OS_IGNORE_LOCATOR_FILE. Passing 0 undoes the effect of the previous call to this function. objectstore::initialize() static void initialize( os_boolean force_full_initialization = 0 ); Initializes ObjectStore. If force_full_initialize is nonzero (true), all ObjectStore initialization procedures are performed immediately. When force_full_ initialize has the default value of 0 (false), some initialization is deferred until needed (for example, until a database is first opened). Applications that integrate with third-party software might need to force full initialization. This function must be called in an application that does not use multiple sessions before any use of ObjectStore functionality is made, with the following exceptions: • objectstore::propagate_log() (ObjectStore / Single only) 72 C++ A P I Reference Chapter 2: Class Library • objectstore::set_application_schema_pathname( ) • objectstore::set_cache_file() (ObjectStore / Single only) • objectstore::set_cache_size( ) • objectstore::set_client_name( ) These functions must be called before ObjectStore initialization. To initialize ObjectStore in an application that uses multiple sessions, see objectstore::initialize_for_sessions() on page 73. A session can execute initialize( ) more than once; after the first execution, calling this function has no effect. objectstore::initialize_for_sessions() static void initialize_for_sessions( os_unsigned_int32 n_expected_sessions ); In applications that use multiple sessions, call initialize_for_sessions() instead of objectstore::initialize(). You must call initialize_for_sessions() before creating instances of os_session. This function sets the application’s default partition size to the size of the processwide persistent storage region divided by n_expected_sessions (rounded up to the nearest 64 KB). The application’s default partition size is the amount of address space assigned to a newly created session, unless the environment variable OS_ DEFAULT_AS_PARTITION_SIZE is set. n_expected_sessions is the number of sessions you expect to create in the current application. This is used to determine the default partition size. When deciding how many sessions to use, you should consider the per-session costs. Each session has its own cache, address space partition, and commseg. To the extent that an application’s session caches contain overlapping data sets, the application makes less efficient use of cache space, address space, and locking resources. Be sure you use a small enough number of sessions to allow for sufficient resources for each one. Calling the objectstore::initialize() function after objectstore::initialize_for_sessions() has no effect. If the sessions facility has already been initialized, calling this function has no effect. err_misc is thrown if • objectstore::initialize_for_sessions() is called after calling objectstore::initialize(). • n_expected_sessions is 0. • ObjectStore thread locking is not enabled. Release 6.3 73 objectstore Note that initializing the sessions facility is different from initializing an individual session (also called full initialization). See os_session::force_full_ initialization() on page 370. A number of members of objectstore serve a dual purpose: • They set or get session defaults if called prior to objectstore::initialize_ for_sessions(). • They set or get session-specific state if called after objectstore::initialize_ for_sessions(). If called before initialize_for_sessions(), these functions set or get default values to be used for newly created sessions. If called after initialize_for_ sessions(), they set or get state for the current session, or throw err_no_session if there is no current session. If there are multiple threads prior to initialization of the sessions facility, you must synchronize their use of these functions. ObjectStore does not provide thread locking prior to initialization (that is, prior to a call to objectstore::initialize() or objectstore::initialize_for_sessions()). Following are the dual-purpose set functions: set_allocation_strategy() set_always_null_illegal_pointers() set_auto_load_DLLs_function() set_auto_open_mode() set_current_schema_key() set_fetch_policy() set_incremental_schema_installation() set_suppress_invalid_hard_pointer_errors() set_lock_option() set_lock_timeout() set_null_illegal_pointers() set_simple_auth_ui() set_suppress_invalid_hard_pointer_errors() set_transaction_max_retries() set_transaction_priority() Following are the dual-purpose get functions: get_allocation_strategy() get_always_null_illegal_pointers() get_autoload_DLLs_function() get_auto_open_mode() get_fetch_policy() get_incremental_schema_installation() get_lock_option() get_lock_timeout() get_null_illegal_pointers() get_simple_auth_ui() get_suppress_invalid_hard_pointer_errors() get_transaction_max_retries() get_transaction_priority() The following members of objectstore always set or get process-wide state: embedded_server_available() get_application_server_pathname() 74 C++ A P I Reference Chapter 2: Class Library get_locator_file() get_log_file() get_page_size() get_thread_locking() get_transient_delete_function() is_multiple_session_mode() is_single_session_mode() network_servers_available() propagate_log() release_maintenance() release_major() release_minor() release_name() set_client_name() set_default_address_space_partition_size() set_thread_locking() set_transient_delete_function() shutdown() which_product() All other objectstore members access process-specific state, or throw err_no_ session if there is no current session. objectstore::is_damaged_dope_repair_enabled() static os_boolean is_damaged_dope_repair_enabled(); Returns a Boolean value indicating whether dope damage repair during component schema loading is enabled. The initial state is false. See objectstore::enable_ damaged_dope_repair() on page 59 for details. objectstore::is_DLL_schema_enabled() os_boolean is_DLL_schema_enabled(); Returns nonzero (true) if the component schema feature is enabled. The initial state is true on most platforms. objectstore::is_multiple_session_mode() static os_boolean is_multiple_session_mode(); Returns nonzero if the sessions facility has been initialized for multisession use; returns 0 otherwise. See objectstore::initialize_for_sessions() on page 73. objectstore::is_persistent() static os_boolean is_persistent(void const* addr); Returns nonzero (true) if the specified address points to persistent memory and returns 0 (false) otherwise. A pointer to any part of a persistently allocated object (including, for example, a pointer to a data member of such an object) is considered to point to persistent memory. Similarly, a pointer to any part of a transiently allocated object is considered to point to transient memory. objectstore::is_single_session_mode() static os_boolean is_single_session_mode(); Release 6.3 75 objectstore Returns nonzero if the sessions facility has not been initialized for multisession use; returns 0 otherwise. objectstore::is_unassigned_contiguous_address_space() static os_boolean is_unassigned_contiguous_address_space( os_unsigned_int32 bytes ); Returns nonzero if there is a contiguous portion of unreserved address space whose size is the specified number of bytes. Returns 0 otherwise. objectstore::load_DLL() static os_DLL_handle load_DLL( const char* DLL_identifier, os_boolean error_if_not_found = true ); Loads the DLL identified by DLL_identifier and returns an os_DLL_handle to it after running its initialization function. If the DLL cannot be found or DLL_identifier cannot be understood and error_ if_not_found is false, this function returns os_null_DLL_handle. If the DLL cannot be found or DLL_identifier cannot be understood and error_ if_not_found is true, this function signals the exception err_DLL_not_loaded. If a transaction is currently in effect, aborting the transaction does not roll back load_ DLL(). Trying to load a DLL that is already loaded has platform-dependent effects. A DLL can have multiple identifiers, each of which works only on a subset of platforms. The automatic DLL loading mechanism always sets error_if_not_ found to false and tries all the identifiers. An error that occurs while you are trying to load the DLL (other than failure to find the DLL) causes an exception regardless of the setting of error_if_not_found. This condition could happen if an error occurs during the execution of the DLL’s initialization code. UNIX platform note There is a bug in most versions of UNIX that causes some such errors to look like “DLL not found” and thus be subject to error_if_not_found. objectstore::lock_as_used This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_as_used specifies the default behavior, which is to lock just the page faulted on when pages are cached. The accessed page is read locked or write locked, depending on the type of access. Prefetched pages are not locked. 76 C++ A P I Reference Chapter 2: Class Library objectstore::lock_cluster_read This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_cluster_read causes a cluster to be read locked when a page in the specified entity (cluster, segment, or database) is accessed. The accessed page is read locked or write locked depending on the type of access. objectstore::lock_cluster_write This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_cluster_write causes a cluster to be write locked when a page in the specified entity (cluster, segment, or database) is accessed. objectstore::lock_database_read This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_database_read causes a database to be read locked when a page in the specified entity (cluster, segment, or database) is accessed. The accessed page is read locked or write locked depending on the type of access. objectstore::lock_database_write This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_database_write causes a database to be write locked when a page in the specified entity (cluster, segment, or database) is accessed. Release 6.3 77 objectstore objectstore::lock_page_write This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_page_write causes the accessed page and any prefetched pages to be write locked regardless of whether the page is accessed for read or write. Compare this value with the default value, objectstore::lock_as_used on page 76. objectstore::lock_segment_read This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_segment_read causes a segment to be read locked when a page in the specified entity (cluster, segment, or database) is accessed. The accessed page is read locked or write locked depending on the type of access. objectstore::lock_segment_write This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of lock_segment_write causes a segment to be write locked when a page in the specified entity (cluster, segment, or database) is accessed. objectstore::lookup_DLL_symbol() static void* objectstore::lookup_DLL_symbol( os_DLL_handle h, const char* symbol ); Looks up the symbolically named entry point in the DLL identified by the handle and returns its address. If the DLL does not export a symbol equal to the argument, an err_DLL_symbol_not_found exception is signaled. 78 C++ A P I Reference Chapter 2: Class Library objectstore::network_servers_available() static os_boolean network_servers_available(); For use with ObjectStore / Single applications. Returns nonzero if the conventional, networked version of ObjectStore’s libos is available in the application; returns 0 otherwise. Functions that report on embedded servers and on network servers are mutually exclusive. That is, objectstore::network_servers_available() and objectstore::embedded_server_available() cannot both return true in the same application. objectstore::own_page_write This enumerator is a possible argument to • objectstore::set_lock_option() on page 88 • os_cluster::set_lock_option() on page 135 • os_database::set_lock_option() on page 169 • os_segment::set_lock_option() on page 361 A value of own_page_write enables the client to upgrade from a read lock to a write lock without contacting the ObjectStore server, thus reducing the amount of client/server communication when upgrading locks. The accessed page is read locked or write locked depending on the type of access. Prefetched pages are not locked. objectstore::propagate_log() static void propagate_log(const char* log_path); For use with ObjectStore / Single applications. Causes all committed data in the specified ObjectStore server log to be propagated to the affected databases. Unless errors occur, the log is removed during execution of this call. An exception is signaled (err_not_supported) if this entry point is called from within a full ObjectStore (networked) application. When used, objectstore::propagate_log() must be called before initializing ObjectStore. Most ObjectStore / Single applications need not use this entry point because propagation of the application’s own log file — that is, the one specified by objectstore::set_log_file() — happens automatically at initialization. For more information, see objectstore::set_log_file() on page 89. objectstore::release_cleared_persistent_to_transient_pointers() static os_int32 release_cleared_persistent_to_transient_pointers( os_int32 max = -1 ); Processes the queue of cleared persistent pointers to transient objects and returns a count of the number of pointers processed. This function removes each (pointer, Release 6.3 79 objectstore mgr) pair in this queue and then executes mgr.release(pointer), invoking the user-supplied release() function for all appropriate persistent pointers to transient objects that have been cleared. For information about the user-supplied release() function, see os_persistent_to_transient_pointer_manager::release() on page 277. The session lock is not held during the invocation of the user-supplied functions. Users should call this function at a time when it is convenient to release transient storage that had been allocated in connection with calls to set_persistent_to_ transient_pointer(); see objectstore::set_persistent_to_transient_ pointer() on page 90. This time is application dependent, but after ending a transaction is a suitable time. For information about using this function to manage persistent pointers to transient objects, Persistent Pointers to Transient Objects in Chapter 1 of the Advanced C++ A P I User Guide. Overloadings The following overloadings are supported: static os_int32 release_cleared_persistent_to_transient_pointers( os_database* db, os_int32 max = -1 ); static os_int32 release_cleared_persistent_to_transient_pointers( os_segment* seg, os_int32 max = -1 ); static os_int32 release_cleared_persistent_to_transient_pointers( os_cluster* clstr, os_int32 max = -1 ); objectstore::release_maintenance() static os_unsigned_int32 release_maintenance( ); Returns the number following the second dot (.) in the number of the release of ObjectStore in use by the current application. For example, for Release 5.0.1, this function returns 1. objectstore::release_major() static os_unsigned_int32 release_major( ); Returns the number preceding the first dot (.) in the number of the release of ObjectStore in use by the current application. For example, for Release 6.0, this function returns 6. objectstore::release_minor() static os_unsigned_int32 release_minor( ); 80 C++ A P I Reference Chapter 2: Class Library Returns the number following the first dot (.) in the number of the release of ObjectStore in use by the current application. For example, for Release 6.0, this function returns 0. objectstore::release_name() static const char* release_name( ); Returns a string naming the release of ObjectStore in use. For example, "ObjectStore 6.0". objectstore::release_persistent_addresses() static void release_persistent_addresses( ); Globally disables retaining the validity of persistent addresses across transaction boundaries. This function is used in conjunction with objectstore::retain_ persistent_addresses( ). It can be called within a top-level transaction as well as outside a transaction. objectstore::reset_persistent_addresses() static void reset_persistent_addresses(os_boolean force=0); Releases all address space when called. The force argument determines if address space retained by os_retain_address_objects is also released. The force argument is false by default. Set the force argument to true only in situations where the session knows it is safe to release addresses held by os_retain_address objects. See also objectstore::set_retain_persistent_addresses() on page 91. objectstore::retain_persistent_addresses() static void retain_persistent_addresses( ); Enables retaining the validity of persistent addresses across transaction boundaries. After being executed within a given session, pointers to persistent memory remain valid even after the transaction in which they were retrieved from the database has executed. This is true until the end of the session or until objectstore::release_ persistent_addresses( ) is called. objectstore::return_all_pages() static void return_all_pages( ); Clears the client cache. objectstore::return_memory() void return_memory( void* addr, os_unsigned_int32 length, os_boolean evict_now ); Release 6.3 81 objectstore Gives the programmer control over cache replacement. The first two arguments designate a region of persistent memory; addr is the beginning of the range, and length is the length of the range in bytes. The function tells ObjectStore that this region of persistent memory is unlikely to be used again in the near future. If evict_ now is nonzero (true), the pages are evicted from the cache immediately. If evict_ now is 0 (false), the pages are not immediately evicted, but they are given highest priority for eviction (that is, they are treated as if they are the least recently used cache pages). objectstore::set_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; static void set_allocation_strategy(os_allocation_strategy); Sets the strategy to use when ObjectStore is looking for space to allocate for an object in a cluster. This strategy applies to all databases, segments, and clusters unless specifically overridden by subsequent calls to • objectstore::set_allocation_strategy() on page 82 • os_cluster::set_allocation_strategy() on page 135 • os_database::set_allocation_strategy() on page 168 • os_segment::set_allocation_strategy() on page 359 For information about the meaning of the os_allocation_strategy enumerators that can be used as arguments, see objectstore::get_allocation_strategy() on page 62. objectstore::set_always_check_server_connection_at_commit() void set_always_check_server_connection_at_commit( os_boolean ); If a nonzero value is specified, the application checks for a valid server connection before committing a read-only transaction. This function is not appropriate for transactions with updates since those transactions always check for valid server connections. If called before a call to objectstore::initialize() or objectstore::initialize_for_sessions(), set_always_check_server_ connection_at_commit() sets the value globally. If called after a call to objectstore::initialize() or objectstore::initialize_for_sessions(), set_always_check_server_connection_at_commit() sets the value for the current session. See objectstore::get_always_check_server_connection_at_commit() on page 63 as well as the environment variable OS_ALWAYS_CHECK_SERVER_AT_COMMIT in Managing ObjectStore. 82 C++ A P I Reference Chapter 2: Class Library objectstore::set_always_null_illegal_pointers() static void set_always_null_illegal_pointers(os_boolean); Supplying a nonzero value specifies that illegal pointers should always be set to 0 (null) when they are detected by ObjectStore during the current session. This includes illegal pointers detected during database reads as well as database writes. objectstore::set_application_schema_pathname() static void set_application_schema_pathname(const char* path); Specifies the location of the application schema database. This function must be called before you initialize ObjectStore. objectstore::set_asmarkers_useless() static void get_asmarkers_useless(os_boolean); Specifying a nonzero value (true) as the argument disables address-space markers; if the argument is 0 (false), they are enabled. Address-space markers are enabled by default. For information enabling and disabling address-space markers, see objectstore::get_asmarkers_useless() on page 64 and OS_ASMARKERS_ USELESS in Managing ObjectStore. objectstore::set_autoload_DLLs_function() static os_autoload_DLLs_function set_autoload_DLLs_function( os_autoload_DLLs_function func ); Controls whether DLLs are loaded automatically by setting a hook function that is called when a database is put in use and its required DLL set is not empty. Calling this function returns the previously set hook function. You can set the hook function to a function that does nothing if you need to disable automatic loading of DLLs. The default initial value of the hook function works as follows: 1 Call os_database::get_required_DLL_identifiers(). 2 For each DLL_identifier, call objectstore::find_DLL_schema() with arguments of the DLL identifier, true, and false, and ignore the result. There is caching to avoid calling the hook function when a database is being put in use for the second or later time in a session, the database’s required DLL set has not grown, and the session has not unloaded any DLLs. objectstore::set_auto_open_mode() enum auto_open_mode_enum {auto_open_read_only, auto_open_multi_db_mvcc, auto_open_mvcc, auto_ open_update, auto_open_disable}; static void set_auto_open_mode( auto_open_mode mode = auto_open_update ); Release 6.3 83 objectstore Enables autoopen mode. This mode automatically opens any databases that need to be opened because of traversal of a reference or a cross-database pointer. Specify the mode in which to open the database with one of the following values: Value Meaning auto_open_read_only Opens the database as read-only. auto_open_multi_db_mvcc Opens the database for multidatabase multiversion concurrency control. See os_ database::open_multi_db_mvcc() on page 165. auto_open_mvcc Opens the database for single-database multiversion concurrency control. See os_ database::open_mvcc() on page 165. auto_open_update Opens the database for updates. auto_open_disable Disables autoopen mode. If a database is already open, a nested open is not done on that database. If autoopen mode is disabled, the error err_database_not_open is signaled upon an attempt to do an auto open. For information on setting the fetch policy for any database, see os_database::set_ fetch_policy() on page 169. To set the fetch policy for all databases (including autoopened ones), call objectstore::set_fetch_policy(). For information on setting the fetch policy for any database, see os_database::set_fetch_policy() on page 169. Warning 84 Exercise extra caution if you have several databases open for multiversion concurrency control (MVCC) at once. In particular, be aware that the databases are not necessarily consistent with each other. Unless you are very careful, this could lead to unexpected results. C++ A P I Reference Chapter 2: Class Library objectstore::set_cache_file() static void set_cache_file( const char* cache_path, os_boolean pre_allocate = 1 ); For use with ObjectStore/Single on UNIX only. Names a file to be used as the ObjectStore / Single cache on UNIX platforms. This entry point has no effect if called in a full ObjectStore (networked) application. If the pre_allocate argument is nonzero (the default), the cache file is explicitly filled with zeros when it is opened. (See objectstore::set_cache_size() on page 85). Preallocation slows down startup but protects against obscure failures of mmap at critical times if the file system runs out of space. If the pre_allocate argument is 0 (not the default) and an out-of-disk-space condition occurs when ObjectStore is trying to use a page in the cache file, err_ internal is signaled. The error message (admittedly obscure) will specify a problem with mmap, page protections, or possibly page locks. set_cache_file() must be called before you initialize ObjectStore. It takes precedence over the environment variable OS_CACHE_FILE. Note that, if the file already exists, it is overwritten. The cache file is not removed when the application ends. Normally, users should remove it in the interest of conserving disk space. Cache files can be reused but cannot be shared. An attempt to start an ObjectStore / Single application with a cache file that is already being used by another ObjectStore / Single application results in an error. objectstore::set_cache_size() static void set_cache_size(os_unsigned_int32 new_cache_size); Sets the size of the client cache in bytes. The actual size is rounded down to the nearest whole number of pages. The set_cache_size() function can be called after you initialize ObjectStore but must be called before doing any ObjectStore operations in a session. This function may be called at the beginning of every session. Calling this function affects performance only. objectstore::set_client_name() static void set_client_name(const char* new_name); Sets the name of the program that is running. Calling objectstore::set_client_ name("program_name") during program initialization makes some of the output of the ObjectStore administrative/debugging commands (such as the -d option to the ObjectStore server and the ossvrstat command) easier to understand. This function must be called before you initialize ObjectStore. Release 6.3 85 objectstore objectstore::set_current_schema_key() static void set_current_schema_key( os_unsigned_int32 key_low, os_unsigned_int32 key_high ); Sets or unsets the schema key of the current application. Call this function only after you initialize ObjectStore. Otherwise, err_schema_key is signaled, and ObjectStore issues an error message such as the following: <err-0025-0153> The schema key may not be set until after objectstore::initialize has been called. key_low specifies the first component of the schema key, and key_high specifies the second component. If both these arguments are 0, calling this function causes the application’s schema key to be determined as for an application that has not called this function. If an application has not called this function, its key is determined by the values of the environment variables OS_SCHEMA_KEY_HIGH and OS_SCHEMA_KEY_LOW. If both the variables are not set, the application has no current schema key. For information about schema keys, see the C++ A P I User Guide, Chapter 7, Database Access Control. objectstore::set_decache_soft_pointers_after_address_space_ release() static void set_decache_soft_pointers_after_address_space_release( os_boolean decache); If the decache argument is nonzero (true), enables soft-pointer decaching. To disable decaching (the default), set decache to 0 (false). By default, ObjectStore does not automatically decache soft pointers on a page when that page is accessed again. When a page that contains cached soft pointers is reused, the address space for the soft-pointer targets is immediately reserved. When softpointer decaching is enabled and a page containing cached soft pointers is reused, the soft pointers on the page are decached, ensuring that address space is not reserved for their targets. To determine if soft-pointer decaching is in effect, see objectstore::get_decache_ soft_pointers_after_address_space_release() on page 65. For more information about soft-pointer decaching, see Soft-Pointer Decaching in Chapter 1 of the Advanced C++ A P I User Guide. 86 C++ A P I Reference Chapter 2: Class Library objectstore::set_default_address_space_partition_size() static void set_default_address_space_partition_size( os_ptr_val size ); Sets the application‘s default partition size. The size is specified in bytes and must be a multiple of 64 KB. The application’s default partition size is the amount of address space assigned to newly created sessions. err_misc is signaled if the argument is not a multiple of 64 KB. When a session is initialized (see os_session::force_full_initialization() on page 370), ObjectStore initializes the session’s address space partition, that is, the portion of the persistent storage region associated with the session. When a session is initialized, the size of the partition is determined as follows: • If objectstore::acquire_address_space() has been called during the session, the size specified in the last call to that function is used. • Otherwise, if objectstore::set_default_address_space_partition_size() has been called subsequent to objectstore::initialize_for_sessions(), the size last passed to set_default_address_space_partition_size() is used. • Otherwise, if the environment variable OS_DEFAULT_AS_PARTITION_SIZE is set, its value is used. See the following information. • Otherwise, the size argument is the size of the process-wide persistent storage region divided by the n_expected_sessions argument of the first call to objectstore::initialize_for_sessions() (rounded up to the nearest 64 KB). See objectstore::initialize_for_sessions() on page 73. When the session is initialized, err_address_space_full is signaled if the session’s address space partition is too small or if the partition size is too large to fit in any portion of free space in the process-wide persistent storage region. objectstore::set_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; static void set_fetch_policy( os_fetch_policy policy = os_fetch_page, os_int32 bytes = 0 ); Sets the fetch policy for all databases, including autoopened ones. The bytes argument specifies the fetch quatum, and the policy argument can be one of the following enumerators: • os_fetch_cluster • os_fetch_page • os_fetch_stream Release 6.3 87 objectstore The default for the policy argument is os_fetch_page, with a fetch quantum of one page. For information about the meaning of the os_fetch_policy enumerators and about retrieving the fetch policy, see objectstore::get_fetch_policy() on page 66. objectstore::set_handle_transient_faults() static void set_handle_transient_faults(os_boolean); For UNIX only. (Calls to this function are ignored under Windows.) Determines whether dereferencing an illegal pointer (for example, a null pointer) in the current session causes an operating system signal or an ObjectStore exception. If a nonzero value is supplied as argument, an ObjectStore exception results; if 0 is supplied, or if the function has not been invoked, an operating system signal results. objectstore::set_incremental_schema_installation() static void set_incremental_schema_installation(os_boolean); If a nonzero value (true) is supplied as argument, the current application run performs incremental schema installation on each database it accesses, regardless of the database’s mode. In addition, databases subsequently created by the current execution of the application are in incremental mode and the schema of the creating application is installed incrementally. With incremental schema installation, a class is added to a database’s schema only when an instance of that class is first allocated in the database. If 0 (false) is supplied as an argument, databases subsequently created by the current execution of the application are in batch mode (the default). With batch mode, whenever an application creates or opens the database, every class in the application’s schema is added to the database’s schema (if not already present in the database schema). objectstore::set_locator_file() static void set_locator_file(const char* file_name); The argument file_name points to the name of the locator file to be used the next time a database is opened. If 0 is supplied, the client environment variable OS_ LOCATOR_FILE is used to determine the locator file to use. A nonzero argument overrides any setting of OS_LOCATOR_FILE. If the specified file does not exist, err_ locator_misc is signaled. If the first character of the string pointed to by file_name is a white-space character or #, the string is assumed to be the contents of a file rather than a file name. objectstore::set_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, 88 C++ A P I Reference Chapter 2: Class Library own_page_write }; static void set_lock_option(objectstore_lock_option); Sets the locking behavior for all databases, segments, and clusters. For information about the argument, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 objectstore::set_lock_timeout() static void set_lock_timeout(os_int32 milliseconds ); Sets the time in milliseconds for which the current session waits to acquire a lock. The time is rounded up to the nearest whole number of seconds. A value of –1 indicates that the session waits forever, if necessary. After an attempt is made to acquire a lock, if the specified time elapses without the lock’s becoming available, an os_lock_timeout exception is signaled. If the attempt causes a deadlock, the transaction is aborted regardless of the specified timeout value. For information about retrieving the timeout value, see objectstore::get_lock_ timeout() on page 68. objectstore::set_log_file() static void set_log_file(const char* log_path); For use with ObjectStore/Single applications. Names a file that will be used for the ObjectStore / Single server log. This entry point has no effect if called in a full ObjectStore (networked) application. It takes precedence over the environment variable OS_LOG_FILE. Note the discussion of considerations about this environment variable in Managing ObjectStore. If the file already exists, it must be a valid server log created by an earlier execution of an ObjectStore / Single application. In that case, all committed data in that log is propagated during ObjectStore initialization. The log file normally is removed at program termination or when objectstore::shutdown() is called. If errors occur, the log might not be removed. In that event, the user should consider the log to contain unpropagated data. Release 6.3 89 objectstore objectstore::set_null_illegal_pointers() static void set_null_illegal_pointers(os_boolean); If the argument is nonzero (true), this directs ObjectStore to create new databases in default_null_illegal_pointers mode. It also enables null_illegal_pointers mode for each database currently retrieved by the current session. See os_ segment::set_null_illegal_pointers() on page 361. objectstore::set_pathname_encoding() void objectstore::set_pathname_encoding(const char* encoding); Sets the character set encoding to be encoding. The value of the encoding argument can be one of the following: Valid encoding values Meaning ASCII 7-bit ASCII CP1252 Microsoft Code Page 1252 (US English) CP932 Microsoft Code Page 932 (Japanese) EUCJP Extended UNIX Code (Japanese) UTF8 UCS Transformation Format 8 NONE No encoding translation; values 0x01 through 0xFF are passed through without modification. The default encoding is determined by the system on which the client application is running. If you supply an invalid encoding value, calling this function will result in the err_invalid_pathname_encoding exception. Note that the objectstore::set_pathname_encoding() function must be called before objectstore::initialize() or objectstore::initialize_for_ sessions(). You can also set the character set encoding with an environment variable; for more information, see OS_PATHNAME_ENCODING in Managing ObjectStore. objectstore::set_persistent_to_transient_pointer() static void* set_persistent_to_transient_pointer( void* p_pointer, const void* p, os_persistent_to_transient_pointer_manager& mgr ); Sets the value of a persistent pointer to a transient object and returns the old value. p_pointer is the pointer that is to be changed, and p is the new value to be stored into that pointer. The mgr argument is a user-supplied object that manages the class of objects that pointer points at. See os_persistent_to_transient_pointer_ manager::release() on page 277 for more information about the user-supplied manager object. 90 C++ A P I Reference Chapter 2: Class Library For information about using this function to manage persistent pointers to transient objects, Persistent Pointers to Transient Objects in Chapter 1 of the Advanced C++ A P I User Guide. objectstore::set_propagate_on_commit() static void set_propagate_on_commit( os_boolean when_to_propagate ); For use with ObjectStore / Single applications. Determines when ObjectStore propagates committed data from the transaction log to the affected database. If when_to_propagate is nonzero (true), propagations occur whenever a top-level transaction commits. This is the default. If when_to_propagate is 0 (false), propagations occur when a database is closed and the program ends normally. If the program ends prematurely, some of the committed data in the log might not have been propagated to the database. This data is propagated the next time ObjectStore is initialized or when objectstore::propagate_log() is called, provided that the correct transaction log exists at the time. In client-server mode, propagation is controlled by server parameters and set_ propagate_on_commit() has no effect. For information about retrieving when propagations occur, see objectstore::get_ propagate_on_commit() on page 70. For additional information about the log file, see • objectstore::propagate_log() on page 79 • objectstore::set_log_file() on page 89 objectstore::set_reserve_as_mode() static void set_reserve_as_mode(os_boolean new_mode); See the documentation for the environment variable OS_RESERVE_AS (UNIX Only) in Managing ObjectStore. objectstore::set_retain_persistent_addresses() static void set_retain_persistent_addresses(os_boolean); If set to true, enables retaining the validity of persistent addresses across transaction boundaries. After being executed within a given session, pointers to persistent memory remain valid even after the transaction in which they were retrieved from the database has executed. This is true until the end of the session. When set to true, this function has the same effect as setting objectstore:retain_persistent_ addresses() to true. If set to false, globally disables retaining the validity of persistent addresses across transaction boundaries. See also objectstore::reset_persistent_addresses() on page 81. Release 6.3 91 objectstore objectstore::set_simple_auth_ui() static void set_simple_auth_ui( void(*handler_func)(os_void_p, os_char_const_p, os_char_p, os_int32, os_char_p, os_int32), void* data_val ); Registers an authentication handler function. handler_func is a handler function that is called by ObjectStore when the application first attempts to access an ObjectStore server that requires Name Password authentication (see Managing ObjectStore). The function is responsible for providing user name and password information. data_val is a data value that is passed to the handler function when it is called. The handler function has the following arguments: the first argument is the void* argument that was passed to objectstore::set_simple_auth_ui( ). The second argument is the name of the ObjectStore server host. The third and fourth arguments are a pointer to and length of a range of memory into which your function should put the user name. The fifth and sixth arguments are the same, for the password. If no handler function is registered, the application issues a message to stdout requesting a user name and password when first accessing an server requiring Name Password authentication. By registering a handler function, you can, for example, use a dialog instead of standard input and output to obtain authentication information from an end user. objectstore::set_suppress_invalid_hard_pointer_errors() static void set_suppress_invalid_hard_pointer_errors( os_boolean ); Allows examination of pages containing pointers that are encoded in export ID form and that have a hard-pointer representation in the current schema. If suppression is enabled and such a pointer is encountered during inbound relocation, the pointer is stored in soft-pointer form even though the schema indicates it should be hard. objectstore::set_transaction_max_retries() static void set_transaction_max_retries( os_unsigned_int32 max_retries ); Sets the number of times a lexical transaction is retried automatically after being aborted because of a deadlock. For information about the macros used to set up a lexical transaction, see Chapter 4, System-Supplied Macros, on page 469. objectstore::set_transaction_priority() static void set_transaction_priority( os_unsigned_int16 priority 92 C++ A P I Reference Chapter 2: Class Library ); Every client has a transaction priority. The value is an unsigned number that can range from 0 to 0xffff. The default value is 0x8000 (which is right in the middle). Note that the value 0 is special, as described in the following paragraphs. When two clients deadlock, the transaction priority is used as part of the decision as to which client should be the victim — that is, which client should be forced to abort, and possibly restart, its transaction. In making this decision, ObjectStore first compares the transaction priorities of all the participants. If they do not all have equal priority, those with the higher priority are not considered as deadlock victims. That is, it looks at the lowest priority number of all the participants, and any participant with a higher priority number is no longer considered as a possible victim. If there is only one participant left, it is the victim. Otherwise, if there are several participants that all share the same lowest priority number, it chooses a victim in accordance with the ObjectStore server parameter Deadlock Victim. See Managing ObjectStore. Note If all the participants have priority 0, the ObjectStore server victimizes all the participants. This is not a useful mode of operation for actually running a program, but it can be useful for debugging. You can run several clients under debuggers and set all their priorities to 0. When a deadlock happens, all of them will abort, allowing you to see what each one of them was doing at the time. You should never use a priority of 0 unless you want this special debugging behavior. objectstore::set_transient_delete_function() static void set_transient_delete_function( void (*)(os_void_p) ); Instead of overriding ObjectStore’s global ::operator delete( ) to arrange for application-specific transient deallocation processing, applications can register a transient delete function by passing a pointer to the function to objectstore::set_ transient_delete_function( ). The specified function is user-defined and should do what the application’s ::operator delete( ) would have done. When ObjectStore’s ::operator delete( ) is given a transient pointer and set_ transient_delete_function( ) has been called, the specified transient delete function is called on the transient pointer. The initial value of the delete function is 0, meaning that ObjectStore’s ::operator delete( ) should ignore zero pointers and call free( ) (the architecture’s native storage-freeing function) on the pointer. If you want, you can set the value back to 0. For information about ObjectStore’s global ::operator delete( ), see ::operator delete() on page 458. For information about implementing your own global ::operator delete( ) to free persistent or transient storage, see objectstore::free_memory() on page 61. Release 6.3 93 objectstore objectstore::set_union_variant() static void set_union_variant( void* addr, const char* type_name, os_unsigned_int16 variant ); Indicates to ObjectStore the currently active member object of a union in persistent memory. addr is the persistent memory address of the union, and type_name is the name of the union type. The name of a union member object can be either the fully qualified name (for example, "A::B::C") or the unqualified name (for example, "C"). The variant argument is the number that corresponds to the position of the active member object in the union declaration (1 for the first, 2 for the second, and so on; 0 indicates an uninitialized union). For information about retrieving the currently active member object, see objectstore::get_union_variant() on page 72. For information about using persistent unions, see Using Persistent Unions on page 39 of Chapter 1 of the Advanced C++ A P I User Guide. objectstore::shutdown() static void shutdown(); Conducts an orderly shutdown of ObjectStore. In particular, all open databases are closed to facilitate propagation of committed data from the ObjectStore server log to the databases. For ObjectStore / Single, this call attempts to propagate all committed data in the log and then remove the log. However, if errors occur, the log might not be removed. In that event, the user should consider the log to contain unpropagated data. There should not be a transaction in progress when this entry point is called. As currently implemented, ObjectStore cannot be restarted after this entry point is called. ObjectStore Technical Support recommends that you use objectstore::shutdown for both full ObjectStore and ObjectStore / Single applications. objectstore::unload_DLL() static void unload_DLL(os_DLL_handle h); If h designates a loaded DLL, calling this function unloads it. If h is set to os_null_ DLL_handle, calling this function has no effect. Otherwise, the results are platform dependent. If an operating system error occurs while the DLL is being unloaded, an err_DLL_ not_unloaded exception can be signaled. objectstore::which_product() static os_product_type which_product(); 94 C++ A P I Reference Chapter 2: Class Library Always returns ostore_cpp. Release 6.3 95 objectstore_exception objectstore_exception All TIX exceptions are instances of the class objectstore_exception, including the system-supplied predefined exceptions (see Chapter 5, Predefined TIX Exceptions, on page 499) and those you define using the macro DEFINE_EXCEPTION() (see DEFINE_EXCEPTION() on page 472). objectstore_exception::signal() void signal([os_int32 value,] char const* format ...); Signals the TIX exception for which the function is called. The first argument is optional. It is used to associate an error code with the signaling of the exception. The value of the error code can be retrieved; see tix_handler::get_value() on page 456. The subsequent arguments work as with the function printf(). A format string is supplied, followed by any number of additional arguments. When objectstore_exception::signal() is called, control is transferred to the most recently established handler for the exception, or to one of its parents, and the message supplied in the format string is ignored. If a handler has not been established, the exception’s associated message is issued, together with the message specified by format and associated arguments. The session is then aborted or exited from, as determined by the environment variable OS_DEF_EXCEPT_ACTION (see Managing ObjectStore). For information about the macros that are used to establish TIX exception handlers, see Chapter 4, System-Supplied Macros, on page 469. objectstore_exception::vsignal() void vsignal( [os_int32 value,] char const* format, va_list args ); Signals the TIX exception for which the function is called. The first argument is optional. It is used to associate an error code with the signaling of the exception. The value of the error code can be retrieved; see tix_handler::get_value() on page 456. The subsequent arguments work as with the function vprintf(). A format string is supplied, followed by a va_list. When objectstore_exception::vsignal() is called, control is transferred to the most recently established handler for the exception, or to one of its parents, and the message supplied in the format string is ignored. If a handler has not been established, the exception’s associated message is issued, along with the message specified by format and associated arguments. The session is then aborted or exited from, as determined by the environment variable OS_DEF_EXCEPT_ACTION (see Managing ObjectStore). For information about the macros that are used to establish TIX exception handlers, see Chapter 4, System-Supplied Macros, on page 469. 96 C++ A P I Reference Chapter 2: Class Library os_access_modifier class os_access_modifier : public os_member This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents the access modification performed by a class on an inherited member. os_access_modifier is derived from os_member. os_access_modifier::create() static os_access_modifier& create(os_member* mem); Creates an os_access_modifier that modifies access to the specified member. os_access_modifier::get_base_member() const os_member& get_base_member( ) const; Returns a reference to the const member whose access was modified. Overloadings The following overloading is supported: os_member& get_base_member( ); Returns a reference to the non-const member whose access was modified. os_access_modifier::set_base_member() void set_base_member(os_member& mem); Updates the member whose access is to be modified. Release 6.3 97 os_address_space_marker os_address_space_marker To use the address space marker feature, create an os_address_space_marker at some convenient point at which address space consumption that is to be undone is about to begin (such as the beginning of a query). Later, when os_address_space_ marker::release() is called, all address space reservations added since that marker was created will be released (subject to the same restrictions mentioned for objectstore::release_persistent_addresses() on page 81 — some address space cannot be released during a transaction). Address space markers can be nested, which means that several markers can be in effect at the same time. Calling os_address_space_marker::release() on an outer marker releases any markers nested within it. The os_address_space_marker::retain() function allows selective release of address space, similar to creating os_retain_address objects, but without the requirement for stack allocation (which binds the usage to a lexical scope). Call os_ address_space_marker::retain() on any pointers that should remain valid across the release boundary before calling os_address_space_ marker::release(). The os_address_space_marker::retain() function can also be passed a marker. In this case, the address space required by the pointer is not released until that marker is released. It is not possible to use the os_address_ space_marker::retain() function on an address to release it sooner, by a more nested marker; attempts to do so are ignored. The os_address_space_marker::release() function releases address space added since the creation of the mark, minus any address space retained by calls to the os_address_space_marker::retain() function, as well as any retained by os_ retain_address objects. The release() function can be called on a marker repeatedly, each time releasing the address space accumulated since the previous release or since the marker was created. If a marker is deleted and no call to os_address_space_marker::release() is made, the marker is removed and the address space that it controlled is now controlled by its previous marker. If there is no previous marker, the address space is not governed by any marker and is no longer incrementally releasable. After the outermost marker is created, no more than 232–2 minus 1 additional markers can be created before the outermost one is deleted. This is true even if some or all of the inner markers are deleted. Like objectstore::release_persistent_addresses(), markers cannot be released within nested transactions. The implementation of os_address_space_marker::release(), besides possibly not freeing as much address space as objectstore::release_persistent_ addresses(), also does not cool the client cache as much. The os_address_space_ marker::release() function must relocate out all pages that were relocated in or modified after the marker was constructed. 98 C++ A P I Reference Chapter 2: Class Library os_address_space_marker::get_current() static os_address_space_marker* get_current(); Returns the current address space marker. The current marker is defined as the most recently constructed marker that has not yet been deleted. This function can be used with nested markers. os_address_space_marker::get_level() os_unsigned_int32 get_level() const; The level of a marker is 1 if there was no current marker when it was created. Otherwise, the level is 1 greater than the level of the previously created marker. Use get_level() to quickly compare address space markers. Markers with lower levels precede those with higher levels. This function can be used with nested markers. os_address_space_marker::get_next() os_address_space_marker* get_next() const; Returns the next address space marker (or NULL if the this marker is the last). The next address space marker is the first one that was created after the this address space marker. This function can be used with nested markers. os_address_space_marker::get_previous() os_address_space_marker* get_previous() const; Returns the previous address space marker (or NULL if the this marker is the first). The previous address space marker is the last one that was created before the this address space marker. This function can be used with nested markers. os_address_space_marker::of() static os_address_space_marker* of(void* p); Returns the address space marker (or NULL) with the highest level that, when released, releases the address space needed for pointer p. os_address_space_marker::os_address_space_marker() os_address_space_marker(); Creates an os_address_space_marker. os_address_space_marker::release() void release(os_boolean unmap_all_fast = 0); Releases the address space that was added to the PSR (persistent storage region) since the address space marker was created or since the last time os_address_ space_marker::release() was called. If the unmap_all_fast argument is nonzero (true), ObjectStore unmaps the entire PSR. Such an operation takes less time than unmapping only the marked pages. Note, however, that setting unmap_all_fast to true can decrease performance by Release 6.3 99 os_address_space_marker causing the application to take more page faults after releasing the marker. The default — unmap_all_fast is set to 0 (false) — is to unmap only the marked pages. If you use the unmap_all_fast argument, you should set it to true only when you are sure that the application will no longer need to access the unmapped pages or is near the end of a transaction, when all pages in the PSR will be unmapped anyway. Deleting a marker does not release the address space it has marked. Conversely, releasing a marker does not deactivate or delete it. This means you can call the release() function again on the same marker after more address space has been accumulated. os_address_space_marker::release() does not affect the value of os_address_space_marker::get_current(). This function can be used with nested markers. os_address_space_marker::retain() static void retain( void* p, os_address_space_marker* marker = NULL ); Returns the address space marker (or NULL) with the highest level that, when released, releases the address space needed for pointer p. Retains space needed by pointer p back to some marker or, if the marker is NULL, back past all markers. os_address_space_marker::~os_address_space_marker() ~os_address_space_marker(); Destructor function. 100 C++ A P I Reference Chapter 2: Class Library os_anonymous_indirect_type class os_anonymous_indirect_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a const or volatile type. This class is derived from os_type. os_anonymous_indirect_type::create() static os_anonymous_indirect_type& create( os_type* target_type ); Creates an anonymous indirect type with the specified target_type. os_anonymous_indirect_type::get_target_type() const os_type& get_target_type( ) const; Returns the type to which the const or volatile specifier applies. For example, the type const int is represented as an instance of os_anonymous_indirect_type whose target type is an instance of os_integral_type. os_anonymous_indirect_type::is_const() os_boolean is_const( ) const; Sets the name of an os_anonymous_indirect_type of type const. os_anonymous_indirect_type::is_volatile() os_boolean is_volatile( ) const; Sets the name of an os_anonymous_indirect_type of type volatile. os_anonymous_indirect_type::set_is_const() void set_is_const(os_boolean); Sets the name of an os_anonymous_indirect_type of type const. os_anonymous_indirect_type::set_is_volatile( ) void set_is_volatile(os_boolean); Sets the name of an os_anonymous_indirect_type of type volatile. Release 6.3 101 os_app_schema os_app_schema This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents an application schema stored in an application schema database, or a component schema stored in a component schema database. os_app_schema is derived from os_schema. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_app_schema::get() static const os_app_schema& get( ); Returns the schema of the application making the call. Signals err_no_schema if the schema could not be found. Overloadings The following overloading for get() is supported: static const os_app_schema &get(const os_database& db); Returns the schema of the specified database. Signals err_no_schema if the specified database is not an application or component schema database. 102 C++ A P I Reference Chapter 2: Class Library os_application_schema_info This class information in an application about its application schema, including the path name of the schema database, pointers to vtbls, and so on. Its base class is os_ schema_info; for more information, see os_schema_info on page 350. Required header files Release 6.3 You must include the header file <ostore/nreloc/schftyps.hh>. 103 os_archiver os_archiver The os_archiver class provides the means to archive databases from an ObjectStore application. For more information on using a command-line utility to archive databases, see osarchiv in Managing ObjectStore. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_archiver::os_archiver() os_archiver(const char* archiver_ID) Constructs the necessary class for archiving databases. The archiver_ID argument should be a unique character string identifying this archiver process in the backrest log, as described in os_dbutil::start_backrest_logging() on page 191. os_archiver::~os_archiver() ~os_archiver(); Performs internal cleanup of the archiver. os_archiver::add_db_to_archive() void add_db_to_archive(const char * db_pathname); Adds the database specified by the db_pathname argument to the archiver. os_archiver::change_time_interval() void change_time_interval(os_unsigned_int32 n_seconds); Changes the current time interval between snapshots. os_archiver::get_current_archive_file_name() char * get_current_archive_file_name(); Returns the pathname of the current archive file that must be deleted by the caller. os_archiver::get_status() os_int32 get_status(); Returns the current status of the archiver process. The possible return values are: Return Value Meaning 104 -1 The archiver process is still running. 0 The archiver process has either completed successfully or has not yet started. 1 The archiver process has failed. Check the backrest log for additional information. C++ A P I Reference Chapter 2: Class Library os_archiver::remove_db_from_archive() void remove_db_from_archive(const char * db_pathname); Removes the database specified by the db_pathname argument from the archiver. os_archiver::start_archiver() void start_archiver(os_archiver_options * options); Starts the archiver process in a separate thread and then return immediately. The options calling argument should have the ncessary data members set. For information about the options you can use, see os_archiver_options on page 106. os_archiver::stop_archiver() void stop_archiver(); Stops the current archiver process after completing the last snapshot. os_archiver::take_a_snapshot() void take_a_snapshot(); Takes a specific snapshot. Release 6.3 105 os_archiver_options os_archiver_options The os_archiver_options class specifies data members that must be set in order for an instance of the os_archiver class to archive ObjectStore databases. An instance of the os_archiver_options class is used as an argument when starting the archiver process. See also os_archiver on page 104 for more information on the os_ archiver class. For more information on using a command-line utility to archive databases, see osarchiv in Managing ObjectStore. Required header files Programs using the os_archiver_options class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_archiver_options class has the following public data members: os_boolean flag_recursive; os_boolean flag_compression; os_unsigned_int32 time_interval; os_unsigned_int32 server_buf_size_in_KB; os_unsigned_int32 max_file_size_in_KB; os_unsigned_int32 network_timeout; os_unsigned_int32 n_archive_databases; const char* import_file; const char* archive_record_file; const char* archive_directory; const char** archive_databases; The following describes the public data members: flag_recursive Instructs the archiver process to descend into any rawfs directories specified in the archive_databases array and add all rawfs databases found to the list of databases to be archived. This option has no effect when archiving file databases; you must explicitly specify each file database. Default is false; only databases in the specified directory will be archived. flag_compression When true, the archiver process compresses the archived data from osserver which reduces the amount of disk space required for the archiveimage files Default is false; no compression. time_interval Specifies in seconds an integer that the archiver process uses as the interval between snapshots. Default is 0; no snapshots are taken automatically and os_ archiver::take_a_snapshot() must be called to take a snapshot. server_buf_size_in_KB Specifies the size of the buffer used by the osservers contacted by the archiver process. Default is 1MB max_file_size_in_KB Specifies the maximum amount of data to write to an archive file. When an archive file is full, the archiver process automatically starts using the next file in the archive file sequence. Default is 2048KB. 106 C++ A P I Reference Chapter 2: Class Library Sets the timeout value in seconds that the archiver process will wait for osserver to respond. network_timeout Default is 10 hours. n_archive_databases Specifies the number of database paths listed in the archive_databases array. Default is 0; in this case, the import_file option must be set. Specifies the name of a file that contains the list of file or rawfs database path names to be archived. The archiver process cannot read such a list from standard input import_file Default is NULL. archive_record_file Specifies the path of the file that an archiver process uses to record the cluster change IDs for the archive set. The archiver process updates this file each time it successfully records committed changes to the archive set. The archive_record_file is comparable to the incremental_record_file data member for os_backup_options. archive_directory This is required. Specifies the directory in which to create the archive log file. archive_databases Specifies an array of databases to archive; the number of entries in the array must correspond to the number specified by n_archive_databases. The user is responsible for deleting these objects. Default is NULL; in this case, the import_file option must be set. Member functions The following functions are public members of the os_archiver_options class: os_archiver_options::os_archiver_options() os_archiver_options(); Constructs the os_archiver_options class and sets all options to their default values. os_archiver_options::~os_archiver_options() ~os_archiver_options() {} Performs internal cleanup. os_archiver_options::reset() void reset(); Resets all options back to their default values. Release 6.3 107 os_array_type os_array_type class os_array_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ array type. This class is derived from os_type. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_array_type::create() static os_array_type& create( os_unsigned_int32 number_of_elements, os_type* elem_type ); Creates an array type with the specified number of elements and the specified element type. os_array_type::get_element_type() const os_type& get_element_type( ) const; Returns the type of element contained in instances of the specified array type. Overloadings The following overloading for get_element_type() is supported: os_type& get_element_type( ); Returns the type of element contained in instances of the specified array type. os_array_type::get_number_of_elements() os_unsigned_int32 get_number_of_elements( ) const; Returns the number of elements associated with the specified array type. If the number is not known, 0 is returned. os_array_type::set_element_type() void set_element_type(os_type& elem_type); Specifies the type of element contained in instances of the specified array type. os_array_type::set_number_of_elements() void set_number_of_elements(os_unsigned_int32); Specifies the number of elements associated with the specified array type. 108 C++ A P I Reference Chapter 2: Class Library os_authentication The os_authentication class enables applications to access the Windows registry location used by ObjectStore. This location stores such information as parameters used by the ObjectStore server and cache manager as well as UNIX user and group IDs. By default, the registry location used by ObjectStore is HKEY_LOCAL_MACHINE\SOFTWARE\Object Design Inc.\ObjectStore 6.0 You can call the os_authentication::set_nt_registry_location() function to specify a different location in the registry. For information about setting the Windows registry location, see Changing the Registry Location for ObjectStore (Windows Only) in Managing ObjectStore, Chapter 8. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int16 is defined as an unsigned 16-bit integer type. Required header file Programs using this class must include <ostore/ostore.hh>. os_authentication::get_nt_registry_location() static void get_nt_registry_location( char* location, os_unsigned_int16 size); Retrieves the registry location used by ObjectStore, relative to HKEY_LOCAL_ MACHINE\SOFTWARE\. The location is stored in location, and size specifies the maximum size of the allocation referenced by location. If location is not large enough to hold the string, the function signals the err_os_auth_reg_string_ array_too_small exception. The maximum length of the string returned in location is os_authentication::MAX_REGISTRY_STRING_LENGTH. The user is responsible for managing the memory allocated for location. os_authentication::set_nt_registry_location() static void set_nt_registry_location( const char* location); Sets the registry location for ObjectStore. The string referenced by location is appended to HKEY_LOCAL_MACHINE\SOFTWARE\ to form the absolute location. If the length of location exceeds os_authentication::MAX_REGISTRY_STRING_LENGTH, this function signals err_os_auth_reg_string_too_long exception. If location is null or empty, this function signals the err_os_auth_reg_string_invalid exception . Release 6.3 109 os_backup os_backup The os_backup class provides the means to backup databases from an ObjectStore application. For more information on using a command-line utility to back up databases, see osbackup in Managing ObjectStore. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_backup::os_backup() os_backup(const char* backup_ID) Constructs the necessary class for backing up databases. The backup_ID argument should be a unique character string identifying this backup process in the backrest log, as described in os_dbutil::start_backrest_logging() on page 191. os_backup::~os_backup() ~os_backup(); Performs internal cleanup of the backup. Calling ~os_backup() while the process is running can result in an inconsistent backup image file. os_backup::get_status() os_int32 get_status(); Returns the current status of the backup process. The possible return values and their meanings are: Return Value Meaning -1 The backup process is still running. 0 The backup process has either completed successfully or has not yet started. 1 The backup process has failed. Check the backrest log for additional information. os_backup::start_and_run_backup() os_boolean start_and_run_backup(os_backup_options & options); Starts and runs the backup process to completion. The options calling argument should have the necessary data members set. A return code of zero indicates the backup process successfully completed. For a non-zero return code, check the backrest log for further information. For information about the options you can use, see os_backup_options on page 112. 110 C++ A P I Reference Chapter 2: Class Library os_backup::start_backup() void start_backup(os_backup_options * options); Starts the backup process in a separate thread and then return immediately. The options calling argument should have the necessary data members set. After calling start_backup() call os_backup::get_status() to determine when the backup is complete. For information about the options you can use, see os_backup_options on page 112. os_backup::stop_backup() void stop_backup(); Stops the backup process by waiting for the backup process to complete before returning. After calling stop_backup() call os_backup::get_status() to verify that the backup was successful. Release 6.3 111 os_backup_options os_backup_options The os_backup_options class specifies data members that must be set in order for an instance of the os_backup class to backup ObjectStore databases. An instance of the os_backup_options class is used as an argument when starting the backup process. See also os_backup on page 110 for more information on the os_backup class. For more information on using a command-line utility to back up databases, see osbackup in Managing ObjectStore. Required header files Programs using the os_backup_options class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_backup_options class has the following public data members: os_boolean flag_recursive; os_boolean flag_compression; os_unsigned_int32 server_buf_size_in_KB; os_unsigned_int32 max_file_size_in_KB; os_unsigned_int32 network_timeout; os_unsigned_int32 blocking_factor; os_unsigned_int32 backup_level; os_unsigned_int32 n_backup_databases; os_unsigned_int32 n_backup_files; os_backup_switch_volume_hook switch_volume_hook; void * switch_volume_hook_context; const char* switch_volume_command; const char* import_file; const char* incremental_record_file; const char** backup_files; const char** backup_databases; The following describes the public data members: flag_recursive Instructs the backup process to descend into any rawfs directories specified in the backup_ databases array and add all rawfs databases found to the list of databases to be backed up. This option has no effect when backing up file databases; you must explicitly specify each file database. Default is false; only databases in the specified directory will be backed up. flag_compression When true, the backup process compresses the backup data from osserver which reduces the amount of disk space required for the backupimage files Default is false; no compression. server_buf_size_in_KB Specifies the size of the buffer used by the osservers contacted by the backup process. Default is 1MB 112 C++ A P I Reference Chapter 2: Class Library max_file_size_in_KB Set the size in kilobytes of the volume being dumped to. When the size is reached, the application will be prompted to insert a new tape. The type of prompt depends on whether switch_volume_command or switch_volume_ hook is specified. If a switch_volume_hook function is defined, that function is called. If a function is not defined but the switch_volume_ command is set, the default is to process the prompt using stdout/stdin. This option is mainly for use when you are backing up to a tape device because end-ofmedia cannot be detected reliably on some systems. On Solaris, this option is not required because the end of the tape is reliably signaled to the application without any loss of data On other systems, if you do not specify this option, the backup process will terminate when it reaches the end of the tape. You can use this option together with the backup_files option to perform a multivolume backup. However, if an insufficient number of files are specified with backup_files option, the backup will terminate. Default is 0; no volume switching is done. network_timeout Sets the timeout value in seconds that the backup process will wait for osserver to respond. Default is 10 hours. blocking_factor Specifies a blocking factor to use for tape input and output. The blocking factor is in units of 512-byte blocks. This parameter is ignored for regular files. The maximum setting is 512 blocks. Default on UNIX is 126 blocks. backup_level Specifies the level of the backup as an integer from 0 to 9. See the -l option in osbackup in Managing ObjectStore for more information Default is level 0. n_backup_databases Specifies the number of database paths listed in the backup_databases array. Default is 0; in this case, the import_file option must be set. n_backup_files This is required. It specifies the number of backup image files specified in the backup_ files array. Default is 0. Release 6.3 113 os_backup_options switch_volume_hook Specifies a pointer to a user-defined function in the format: char* my_function( os_boolean insert_next_tape, os_unsigned_int32 volume_num, void* context) This function is called at a media volume switch, such as a request for the next tape, a file having reached the limit specified by the max_ file_size_in_KB option, or an out of file disk space condition. If insert_next_tape is true, the next tape volume specified by volume_num should be inserted and NULL returned. If insert_next_tape is false, the next file pathname string should be returned, which is deleted by the caller. The context argument is user-specified data; see the switch_volume_ hook_context option, below. Default is NULL; no function defined. switch_volume_hook_context The value of this pointer is passed to switch_ volume_hook through the context calling argument. This data member should point to any user data that will be needed within the hook. Default is NULL. switch_volume_command Specifies the path of a command to be executed when the backup process reaches the end of the media. This command should mount the next volume before returning. The exit status from this command must be 0 or the backup operation aborts. Default is NULL. import_file Specifies the name of a file that contains the list of file or rawfs database path names to be backed up. If you specify “-” (hyphen) as the import_file name, the database list is read from standard input. Default is NULL. 114 C++ A P I Reference Chapter 2: Class Library incremental_record_file This is required. Specifies the incremental record file which contains information about the databases that have been backed up and when they were backed up. This information is used to determine the clusters within a database that have been modified since the last backup at a lower level; only modified clusters are backed up. The incremental record file is comparable to the os_archive_options::archiver_record_ file. Performing a backup at any level for which no previous information exists is equivalent to doing a level 0 backup for that database. backup_files This is required. Specifies an array of backup image files; the number of entries in the array must correspond to the number specified by n_ backup_files. The backup will be aborted if the backup device cannot be opened (for example, if a tape is write-protected or is not loaded). This option raises an exception that indicates the problem. backup_databases Specifies an array of databases to backup; the number of entries in the array must correspond to the number specified by n_backup_ databases. Default is NULL; in this case, the import_file option must be set. Member functions The following functions are public members of the os_backup_options class: os_backup_options::os_backup_options() os_backup_options(); Constructs the os_backup_options class and sets all options to their default values. os_backup_options::~os_backup_options() ~os_backup_options() {} Performs internal cleanup. os_backup_options::reset() void reset(); Resets all options back to their default values. Release 6.3 115 os_base_class os_base_class This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of os_base_class represents a class from which another class is derived, together with the nature of the derivation (that is, virtual or nonvirtual, and private, public, or protected). Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_base_class::create() static os_base_class& create( os_unsigned_int32 access, os_boolean is_virtual, os_class_type* associated_class ); Creates an os_base_class. The arguments specify the initial values for the attributes access, is_virtual, and associated_class. os_base_class::get_access() int get_access( ) const; Returns an enumerator describing the access to the base class members. The possible return values are os_base_class::Public, os_base_class::Private, or os_ base_class::Protected. os_base_class::get_class() const os_class_type& get_class( ) const; Returns a reference to a const os_class_type — the class serving as base class in the derivation represented by the specified os_base_class object. Overloadings The following overloading for get_class() is supported: os_class_type& get_class( ); Returns a reference to a non-const os_class_type — the class serving as base class in the derivation represented by the specified os_base_class object. os_base_class::get_offset() os_unsigned_int32 get_offset( ) const; Returns the offset in bytes to the base class from the immediately enclosing class. For virtual bases, this offset is meaningful only if the base class was obtained by a call to os_class_type::get_allocated_virtual_base_classes( ). Overloadings 116 The following overloading for get_offset() is supported: C++ A P I Reference Chapter 2: Class Library os_unsigned_int32 get_offset(const os_class_type& base_class) const; Returns the offset in bytes to the base class from the specified most derived class. this must be a virtual base class. os_base_class::get_size() os_unsigned_int32 get_size( ) const; Returns the size in bytes of the base class. os_base_class::get_virtual_base_class_pointer_offset() os_unsigned_int32 get_virtual_base_class_pointer_offset( ) const; Returns the offset of the virtual base class pointer. os_base_class::is_virtual() os_boolean is_virtual( ) const; Returns 1 if and only if the specified base class is virtual. os_base_class::Private This enumerator is a possible return value from os_base_class::get_access( ), indicating private access. os_base_class::Protected This enumerator is a possible return value from os_base_class::get_access( ), indicating protected access. os_base_class::Public This enumerator is a possible return value from os_base_class::get_access( ), indicating public access. os_base_class::set_access() void set_access(os_unsigned_int32); Specifies an enumerator describing the access to the base class members. The possible values for the argument are • os_base_class::Public • os_base_class::Private • os_base_class::Protected os_base_class::set_class() void set_class(os_class_type& base_class); Specifies the class serving as base class in the derivation represented by the specified os_base_class object. Release 6.3 117 os_base_class os_base_class::set_offset() void set_offset(os_unsigned_int32); Sets the offset in bytes of the base class from the immediately enclosing class. os_base_class::set_virtual_base_class_no_pointer() void set_virtual_base_class_no_pointer( ); Specifies that the base class has no virtual base class pointer. os_base_class::set_virtual_base_class_pointer_offset() void set_virtual_base_class_pointer_offset(os_unsigned_int32); Sets the offset of the virtual base class pointer. os_base_class::set_virtuals_redefined() void set_virtuals_redefined(os_boolean); Specifies whether the base class redefines any virtual functions. os_base_class::virtual_base_class_has_pointer() os_boolean virtual_base_class_has_pointer( ) const; Returns nonzero if the base class has a virtual base class pointer. os_base_class::virtuals_redefined() os_boolean virtuals_redefined( ) const; Returns nonzero if the base class redefines any virtual functions. 118 C++ A P I Reference Chapter 2: Class Library os_class_type class os_class_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of os_class_type represents a C++ class. os_class_type is derived from os_type. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_class_type::Anonymous_union This enumerator is a possible return value from os_class_type::get_class_ kind( ). It indicates an anonymous union type. os_class_type::Class This enumerator is a possible return value from os_class_type::get_class_ kind( ). It indicates a class declared with the class-key class. os_class_type::create() static os_class_type& create(const char* name); Creates a new class with the specified name (which is copied by ObjectStore). It initializes the other attributes of os_class_type as follows: Overloadings Attribute Value base_classes empty os_List<os_base_class*> members empty os_List<os_member*> defines_virtual_functions 0 class_kind os_class_type::Class defines_get_os_typespec_function 0 is_template_class 0 is_persistent 0 is_forward_definition 1 The following overloading for create() is supported: static os_class_type& create( const char* name, os_List<os_base_class*>& base_classes, os_List<os_member*>& members, os_boolean defines_virtual_functions ); Release 6.3 119 os_class_type Creates a new class. The arguments specify the initial values for the attributes name, base_classes, members, and defines_virtual_functions. The initial values for the remaining attributes are as follows: Attribute Value class_kind os_class_type::Class defines_get_os_typespec_function 0 is_template_class 0 is_persistent 0 is_forward_definition 0 If you create a class with the MOP, there is no direct way to make it compiler heterogeneous. os_class_type::declares_get_os_typespec_function() os_boolean declares_get_os_typespec_function( ) const; Returns nonzero if and only if the specified class declares a get_os_typespec( ) member function. os_class_type::defines_virtual_functions() os_boolean defines_virtual_functions( ) const; Returns nonzero if and only if the specified class defines any virtual functions. os_class_type::find_base_class() const os_base_class* find_base_class(const char* class_name) const; Returns a pointer to the const os_base_class whose class has the given name and is a base class of this. Either the inheritance is direct or the base class is a virtual base class. If there is no such class, 0 is returned. err_mop_forward_definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading for find_base_class() is supported: os_base_class *find_base_class(const char* class_name); Returns a pointer to the non-const os_base_class whose class has the given name and is a base class of this. Either the inheritance is direct or the base class is a virtual base class. If there is no such class, 0 is returned. err_mop_forward_definition is signaled if the specified class is known only through a forward definition. os_class_type::find_member_variable() const os_member_variable* find_member_variable( const char* name ) const; Returns a pointer to a const os_member_variable representing the data member of this with the given name. The member must be defined by this, not inherited by it. 120 C++ A P I Reference Chapter 2: Class Library If there is no such data member, 0 is returned. err_mop_forward_definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading of find_member_variable() is supported: os_member_variable *find_member_variable(const char *name); Returns a pointer to a non-const os_member_variable representing the data member of this with the given name. The member must be defined by this, not inherited by it. If there is no such data member, 0 is returned. err_mop_forward_ definition is signaled if the specified class is known only through a forward definition. os_class_type::get_access_of_get_os_typespec_function() os_member::os_member_access get_access_of_get_os_typespec_function( ) const; Returns one of the following enumerators: • os_member::Private • os_member::Protected • os_member::Public os_class_type::get_allocated_virtual_base_classes() os_list get_allocated_virtual_base_classes( ) const; Returns a list of pointers to const os_base_class objects. Each os_base_class object represents a virtual base class from which the specified class inherits (that is, whose storage is allocated as part of the specified class). The order of list elements is not significant. err_mop_forward_definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading is supported: os_list get_allocated_virtual_base_classes( ); Returns a list of pointers to non-const os_base_class objects. Each os_base_ class object represents a virtual base class from which the specified class inherits (that is, whose storage is allocated as part of the specified class). The order of list elements is not significant. err_mop_forward_definition is signaled if the specified class is known only through a forward definition. os_class_type::get_base_classes() os_list get_base_classes( ) const; Returns a list, in declaration order, of pointers to const os_base_class objects. Each os_base_class object represents a class from which the given class is derived, together with the nature of the derivation (virtual or nonvirtual, and public, private, or protected). err_mop_forward_definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading is supported: os_list get_base_classes( ); Release 6.3 121 os_class_type Returns a list, in declaration order, of pointers to non-const os_base_class objects. Each os_base_class object represents a class from which the given class is derived, together with the nature of the derivation (virtual or nonvirtual, and public, private, or protected). err_mop_forward_definition is signaled if the specified class is known only through a forward definition. os_class_type::get_class_kind() os_unsigned_int32 get_class_kind( ) const; Returns an enumerator indicating the kind of class represented by the specified instance of os_class_type: • os_class_type::Struct indicates a struct. • os_class_type::Union indicates a named union. • os_class_type::Anonymous_union indicates an anonymous union. • os_class_type::Class indicates a class declared with the class-key class. os_class_type::get_dispatch_table_pointer_offset() os_int32 get_dispatch_table_pointer_offset( ) const; Returns the offset at which the pointer to the dispatch table is stored. The dispatch table is the one that was generated by the compiler currently in use. This function signals err_mop if there is no dispatch table. os_class_type::get_dispatch_table_pointer_offset_other_ compiler() os_int32 get_dispatch_table_pointer_offset_other_compiler( ) const; Returns the offset at which the pointer to the dispatch table is stored. The compiler that generated the dispatch table is not necessarily the one currently in use. This function signals err_mop if there is no dispatch table. os_class_type::get_indirect_virtual_base_classes() os_list get_indirect_virtual_base_classes( ) const; Returns a list of pointers to const os_base_class objects. Each os_base_class object represents a virtual base class from which the specified class inherits virtually and indirectly. The order of list elements is not significant. err_mop_forward_ definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading is supported: os_list get_indirect_virtual_base_classes( ); Returns a list of pointers to non-const os_base_class objects. Each os_base_ class object represents a virtual base class from which the specified class inherits virtually and indirectly. The order of list elements is not significant. err_mop_ forward_definition is signaled if the specified class is known only through a forward definition. 122 C++ A P I Reference Chapter 2: Class Library os_class_type::get_members() os_list get_members( ) const; Returns a list, in declaration order, of pointers to const os_member objects. Each os_ member object represents a member defined by the specified class. Note that currently only discriminant member functions are stored in the schema. err_mop_ forward_definition is signaled if the specified class is known only through a forward definition. Overloadings The following overloading is supported: os_list get_members( ); Returns a list, in declaration order, of pointers to non-const os_member objects. Each os_member object represents a member defined by the specified class. Note that currently only discriminant member functions are stored in the schema. err_mop_ forward_definition is signaled if the specified class is known only through a forward definition. os_class_type::get_most_derived_class() static const os_class_type& get_most_derived_class( const void* obj, const void*& most_derived_object ) const; If obj points to the value of a data member for some other object, o, this function returns a reference to the most derived class of which o is an instance. A class, c1, is more derived than another class, c2, if c1 is derived from c2, or if c1 is derived from a class derived from c2, and so on. The most_derived_object argument is set to the beginning of the instance of the most derived class. There is one exception to this behavior, described in the following paragraphs. If obj points to an instance of a class, o, but not to one of its data members (for example, because the memory occupied by the instance begins with a virtual table pointer rather than a data member value), the function returns a reference to the most derived class of which o is an instance. The most_derived_object argument is set to the beginning of the instance of the most derived class. There is one exception to this behavior, described in the following paragraph and example. If obj does not point to the memory occupied by an instance of a class, most_ derived_object is set to 0, and err_mop is signaled. ObjectStore issues an error message such as the following: <err-0008-0010>Unable to get the most derived class in os_class_ type::get_most_derived_class( ) containing the address 0x%lx. Following is an example: Example class B { public: int ib; }; class D : public B { public: Release 6.3 123 os_class_type int id; }; class C { public: int ic; D cm; }; void baz ( ) { C* pC = new (db) C; D *pD = &C->cm; int *pic = &pC->ic, *pid = &pC->cm.id, *pib = &pC->cm.ib; ... } Invoking get_most_derived_class( ) on the pointers pic, pid, and pib produces the results shown in the following table: First Argument (object) Second Argument (most_derived_object) Return Value (os_class_type) pic pC C pid pD D pib pD D The exception to the behavior described previously can occur when a class-valued data member is collocated with a base class of the class that defines the data member. If a pointer to such a data member, which is also a pointer to such a base class, is passed to get_most_derived_class( ), a reference to the value type of the data member is returned, and most_derived_object is set to the same value as obj. Consider, for example, the following class hierarchy: Example class C0 { public: int i0; }; class B0 { public: void f0( ); }; class B1 : public B0 { public: virtual void f1(); C0 c0; }; class C1 : public B1 { public: static os_typespec* get_os_typespec(); int i1; }; Some compilers optimize B0 so that it has zero size in B1 (and C1). This means the class-valued data member c0 is collocated with a base class, B0, of the class, C1, that defines the data member. 124 C++ A P I Reference Chapter 2: Class Library Given the following: C1 C1 B0 C0 c1; * pc1 = & c1; * pb0 = (B0 *)pc1; * pc0 = & pc1->c0; the pointers pb0 and pc0 will have the same value because of this optimization. In this case, get_most_derived_class( ) called on the pb0 or pc0 returns a reference to the os_class_type for C0 (the value type of the data member c0), and most_derived_object is set to the same value as obj. If B1 is instead defined as class B1 : public B0 { public: virtual void f1(); int i; C0 c0; }; and int * pi = & pc1->i; pb0 and pi have the same value because of the optimization, but the base class, B0, is collocated with an int-valued data member rather than a class-valued data member. get_most_derived_class( ) called on pb0 or pi returns a pointer to the os_class_type for the class C1 and sets most_derived_object to the same value as pc1. os_class_type::get_name() const char *get_name( ) const; Returns the name of the specified class. os_class_type::get_pragmas() os_List<os_pragma*> get_pragmas( ) const; Returns the pragmas associated with the specified class. os_class_type::get_size_as_base() os_unsigned_int32 get_size_as_base( ) const; Returns the size of the specified class when serving as a base class. os_class_type::get_source_position() void get_source_position( const char*& file, os_unsigned_int32& line ) const; Returns the source position associated with the specified class. Release 6.3 125 os_class_type os_class_type::has_constructor() os_boolean has_constructor( ) const; Returns nonzero if the class defines a constructor. os_class_type::has_destructor() os_boolean has_destructor( ) const; Returns nonzero if the class defines a destructor. os_class_type::has_dispatch_table() os_boolean has_dispatch_table( ) const; Returns nonzero if the class has a dispatch table. The dispatch table is the one that was generated by the compiler currently in use. os_class_type::has_dispatch_table_other_compiler() os_boolean has_dispatch_table_other_compiler( ) const; Returns nonzero if the class has a dispatch table. The compiler that generated the dispatch table is not necessarily the one currently in use. os_class_type::introduces_virtual_functions() os_boolean introduces_virtual_functions( ) const; Returns nonzero if and only if the class defines, rather than merely inherits, a virtual function. You can set this attribute with set_introduces_virtual_functions( ). os_class_type::is_abstract() os_boolean is_abstract( ) const; Returns nonzero if and only if the specified class is abstract. os_class_type::is_forward_definition() os_boolean is_forward_definition( ) const; Returns 1 if and only if the specified class is known only through a forward definition. os_class_type::is_persistent() os_boolean is_persistent( ) const; Returns nonzero if and only if the specified class is marked as persistent. os_class_type::is_template_class() os_boolean is_template_class( ) const; Returns 1 if and only if the specified class is a template class. 126 C++ A P I Reference Chapter 2: Class Library os_class_type::operator os_instantiated_class_type&() operator const os_instantiated_class_type&( ) const; Provides for safe casts from os_class_type to const os_instantiated_class_ type. If the cast is not permissible, err_mop_illegal_cast is signaled. Overloadings The following overloading is supported: operator os_instantiated_class_type&( ); Provides for non-const casts from os_class_type to os_instantiated_class_ type. If the cast is not permissible, err_mop_illegal_cast is signaled. os_class_type::set_access_of_get_os_typespec_function() void set_access_of_get_os_typespec_function( os_member::os_member_access ); Passes os_member::Private, os_member::Protected, or os_member::Public to specify the type of access allowed to the class’s get_os_typespec( ) function. os_class_type::set_base_classes() void set_base_classes(os_List<os_base_class*>& class_type); Sets the list, in declaration order, of os_base_classes of the specified class. Each os_ base_class object represents a class from which the given class is derived, together with the nature of the derivation (virtual or nonvirtual, and public, private, or protected). os_class_type::set_class_kind() void set_class_kind(os_unsigned_int32); Sets the class kind of the specified class. The argument should be one of the following enumerators to indicate the kind of class represented by the specified instance of os_ class_type: • os_class_type::Struct indicates a struct. • os_class_type::Union indicates a named union. • os_class_type::Anonymous_union indicates an anonymous union. • os_class_type::Class indicates a class declared with the class-key class. os_class_type::set_declares_get_os_typespec_function() void set_declares_get_os_typespec_function(os_boolean); Specifies whether this declares a get_os_typespec( ) member function. os_class_type::set_defines_virtual_functions() void set_defines_virtual_functions(os_boolean); Specifies whether the specified class defines any virtual functions. Release 6.3 127 os_class_type os_class_type::set_dispatch_table_pointer_offset() void set_dispatch_table_pointer_offset(os_int32); Sets the offset at which the pointer to the dispatch table is stored. os_class_type::set_has_constructor() void set_has_constructor(os_boolean); Specifies whether the class defines a constructor. os_class_type::set_has_destructor() void set_has_destructor(os_boolean); Specifies whether the class defines a destructor. os_class_type::set_indirect_virtual_base_classes() void set_indirect_virtual_base_classes( os_List<os_base_class*> base_classes ); Sets the indirect virtual base classes of the specified class. os_class_type::set_introduces_virtual_functions() void set_introduces_virtual_functions(os_boolean); Passing a nonzero value specifies that the class defines, rather than merely inherits, a virtual function. os_class_type::set_is_abstract() void set_is_abstract(os_boolean); Specifies whether the specified class is abstract. os_class_type::set_is_forward_definition() void set_is_forward_definition(os_boolean); Specifies whether the specified class is known only through a forward definition. os_class_type::set_is_persistent() void set_is_persistent(os_boolean); Specifies whether the specified class is marked as persistent. To be installed into a database schema, a class must either be marked as persistent or be reachable from a persistent class. Making a class persistent with set_is_persistent( ) is similar to marking it with OS_MARK_SCHEMA_TYPE( ). os_class_type::set_members() void set_members(os_List<os_member*>& class_type); Sets the members, in declaration order, of the specified class. 128 C++ A P I Reference Chapter 2: Class Library os_class_type::set_name() void set_name(const char* class_type); Sets the name of the specified class. ObjectStore copies the character array pointed to by the argument. os_class_type::set_pragmas() void set_pragmas(os_List<os_pragma*> class_type); Sets the pragmas associated with the specified class. os_class_type::set_source_position() void set_source_position( const char* file, os_unsigned_int32 line ); Sets the source position associated with the specified class. os_class_type::Struct This enumerator is a possible return value from os_class_type::get_class_ kind( ). It indicates a struct. os_class_type::Union This enumerator is a possible return value from os_class_type::get_class_ kind( ). It indicates a named union type. Release 6.3 129 os_close_database os_close_database The os_close_database class enables you to close a database when a function ends, even if an exception causes it to end. To use this class, declare an automatic variable of the class os_close_database, giving its constructor a pointer to the os_database object that represents the database — usually, the pointer returned by os_ database::open(). When the variable goes out of scope, its destructor calls os_ database::close(). If the open count reaches 0, the database is closed; otherwise, it remains open for use by other parts of the application. The os_close_database class should be used only in a function that opens a database by calling os_database::open() or os_database::create(). For more information about how open() and close() use the open count, see the following: • os_database::close() on page 150 • os_database::open() on page 164 • C++ A P I User Guide 130 C++ A P I Reference Chapter 2: Class Library os_cluster The cluster is the basic physical unit of allocation in an ObjectStore database. Each cluster can be used as an atomic unit of transfer to and from persistent storage. A segment is a group of one or more clusters. Every segment is created with an initial cluster, which is also the initial (default) cluster. New objects allocated using the os_ segment or os_database overload of operator new are allocated to the appropriate default cluster. More clusters can be added by the application at any time. The application can also change the default cluster for the duration of the current session. For information about iterating over clusters, see os_cluster_cursor on page 138. Type definitions The types os_int32 and os_boolean, used throughout this document, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files All ObjectStore programs must include the header file <ostore/ostore.hh>. os_cluster::database_of() os_database *database_of() const; Returns a pointer to the database in which the specified cluster resides. The transient database is returned if the transient cluster is specified. os_cluster::destroy() void destroy(); Deletes the persistent cluster for which the function is called. When a cluster is destroyed, all data it contains is permanently destroyed and pointers into the cluster become invalid. Any subsequent use of the destroyed cluster (such as an attempt to allocate memory within it) is an error. Invoking destroy() on a destroyed cluster results in the err_cluster_is_deleted exception. os_cluster::get_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; os_allocation_strategy get_allocation_strategy(void) const; Returns the current strategy to use when ObjectStore allocates storage for an object in the specified cluster. For information about the return values, see objectstore::get_allocation_strategy() on page 62. For information about specifying the allocation strategy in a cluster, see os_cluster::set_allocation_ strategy() on page 135. os_cluster::get_fetch_policy() enum os_fetch_policy { Release 6.3 131 os_cluster os_fetch_page, os_fetch_stream, os_fetch_cluster }; void get_fetch_policy( os_fetch_policy& policy, os_int32& bytes ) const; Retrieves the cluster’s current fetch policy. An enumerator of type os_fetch_policy is returned in policy, and the fetch quantum is returned in bytes. For information about the arguments, see objectstore::get_fetch_policy() on page 66. For information about setting the fetch policy on a cluster, see os_cluster::set_ fetch_policy() on page 135. os_cluster::get_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; objectstore_lock_option get_lock_option() const; Returns the locking behavior currently in effect for the specified cluster. For more information about the return value, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 For information about setting the lock option, see os_cluster::set_lock_ option() on page 135. os_cluster::get_null_illegal_pointers() os_boolean get_null_illegal_pointers() const; If the specified cluster is in null_illegal_pointers mode, the function returns nonzero (true); otherwise, it returns 0 (false). See os_cluster::set_null_illegal_ pointers() on page 136. 132 C++ A P I Reference Chapter 2: Class Library os_cluster::get_number() os_unsigned_int32 get_number() const; Returns the cluster number of the specified cluster. This number is suitable for passing to the function os_segment::get_cluster(); see os_segment::get_ cluster() on page 353. os_cluster::get_transient_cluster() static os_cluster *const get_transient_cluster(); Returns a pointer to the transient cluster, which can be used as an argument to ::operator new() to request transient allocation. For information about ::operator new(), see ::operator new() on page 459. os_cluster::is_deleted() os_boolean is_deleted(); Returns nonzero (true) if the specified os_cluster has been deleted, and 0 (false) otherwise. os_cluster::is_empty() os_boolean is_empty(); Returns nonzero (true) if the specified os_cluster contains no nondeleted objects, and 0 (false) otherwise. os_cluster::is_transient_cluster() os_boolean is_transient_cluster() const; Returns nonzero (true) if the specified cluster is transient and 0 (false) if persistent. os_cluster::of() static os_cluster* of(void const* obj); Returns a pointer to the cluster in which the specified object resides. If the specified void* is 0 or points to transient memory, a pointer to the transient cluster is returned. See os_cluster::get_transient_cluster() on page 133. os_cluster::release_pointer() void release_pointer(); Releases the pointer specified by the implicit this argument. When an application calls a function that returns an os_cluster pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. Release 6.3 133 os_cluster When the application calls release_pointer(), ObjectStore decrements the use count for an ObjectStore object. When the last pointer is released, the count reaches 0 and the os_cluster object is deleted. See the following for related information: • The C++ A P I User Guide discusses how to release pointers. • You can also release os_cluster pointers when they go out of scope; see os_ release_cluster_pointer on page 312. • See os_cluster::retain_pointer() on page 134 for information about retaining os_cluster pointers. os_cluster::retain_pointer() void retain_pointer(); Retains the pointer specified by the this argument. When an application calls a function that returns an os_cluster pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. The application calls os_cluster::release_pointer() when it no longer needs the pointer, thus releasing it and decrementing the use count. When the application calls retain_pointer(), ObjectStore increments the use count for an os_cluster object. Calling retain_pointer() ensures that the pointer is retained even when another part of the application releases it. For information about using retain_pointer(), see Chapter 3 in the C++ A P I User Guide. See also os_cluster::release_pointer() on page 133. os_cluster::return_memory() void return_memory(os_boolean evict_now); Just like objectstore::return_memory() on page 81, except that it acts on a specified cluster rather than on a specified range of addresses. os_cluster::segment_of() os_segment* segment_of() const; Returns a pointer to the segment in which the specified cluster resides. The transient segment is returned if the transient cluster is specified. os_cluster::session_of() os_session* session_of() const; Returns the os_session object for the session in which the specified os_cluster* was retrieved. This function can be used with os_session::set_current() to enable a thread to join the session associated with an os_cluster object. For example, if cluster_ptr references an os_cluster object, then the statement 134 C++ A P I Reference Chapter 2: Class Library os_session::set_current(cluster_ptr->session_of()); enables the currently executing thread to access the object by setting the thread’s current session to the session associated with cluster_ptr. os_cluster::set_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; void set_allocation_strategy(os_allocation_strategy); Sets the strategy to use when ObjectStore allocates storage for an object in the specified cluster. This strategy can be overridden by subsequent calls to • objectstore::set_allocation_strategy() on page 82 • os_cluster::set_allocation_strategy() on page 135 • os_database::set_allocation_strategy() on page 168 • os_segment::set_allocation_strategy() on page 359 For information about the meaning of the os_allocation_strategy enumerators that can be used as arguments, see objectstore::get_allocation_strategy() on page 62. os_cluster::set_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; void set_fetch_policy( os_fetch_policy policy, os_int32 bytes) const; Sets the fetch policy for the specified cluster. The default for the policy argument is os_fetch_page. For more information about the arguments, see objectstore::get_fetch_policy() on page 66. The fetch policy established with set_fetch_policy() remains in effect only until the end of the session making the function call. Moreover, set_fetch_policy() affects only transfers made by this session. Other concurrent sessions can use a different fetch policy for the same cluster. For information about retrieving the fetch policy for a cluster, see os_ cluster::get_fetch_policy() on page 131. os_cluster::set_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, Release 6.3 135 os_cluster lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; void set_lock_option(objectstore_lock_option); Sets the locking behavior for the specified cluster. For information about the argument, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 os_cluster::set_null_illegal_pointers() os_boolean set_null_illegal_pointers(os_boolean); By default, ObjectStore signals a run-time error when it detects an illegal pointer. If you pass nonzero (true) to this function, ObjectStore changes the illegal pointer to 0 (null). You can specify the default behavior by passing 0 (false) to this function. The results of using this function do not remain in effect after the current session ends, and they are invisible to other sessions. See os_cluster::get_null_illegal_ pointers() on page 132. os_cluster::set_size() void set_size(os_unsigned_int32 n_bytes); Specifies the size in n_bytes of the cluster represented by the this argument. This function allows you to presize a cluster in order to minimize fragmentation; see Managing Database Fragmentation in Chapter 1 of Managing ObjectStore. This function can also be used to shrink a cluster to remove unused space at the end of the cluster. n_bytes can be larger, equal to, or smaller than the current size, but it cannot shrink a cluster other than removing free space at the end. If n_bytes would require deleting a persistent object, calling this function will signal the err_cannot_ shrink_cluster exception. This function must be called within a transaction and always write-locks the whole cluster unless n_bytes is already equal to the requested size. 136 C++ A P I Reference Chapter 2: Class Library os_cluster::size() os_unsigned_int32 size(os_boolean b_lock_cluster = 1); Returns the size in bytes of the specified cluster. If b_lock_cluster is nonzero (true, the default), the function waits until the specified cluster is read locked before returning its size. If b_lock_cluster is 0 (false), the function returns the cluster’s size without waiting. The reported size is transaction consistent if the cluster is locked. os_cluster::with() static os_cluster_with with(const void* obj); Returns an os_cluster_with object. The returned object is a C++ automatic object; that is, it is allocated from the stack and does not require the user to explicitly delete it. This value can be used as the first argument to persistent new when you allocate storage that is as close as possible to obj. For more information, see os_cluster_with on page 140. Release 6.3 137 os_cluster_cursor os_cluster_cursor Instances of the class os_cluster_cursor can be used to iterate over clusters in a segment. Type definitions The types os_int32 and os_boolean, used throughout this document, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files All ObjectStore programs must include the header file <ostore/ostore.hh>. os_cluster_cursor::os_cluster_cursor() os_cluster_cursor( const os_segment* seg, os_unsigned_int32 max_n_clusters_at_a_time = 100 ); Constructs an instance of os_cluster_cursor for iterating over the clusters in seg. The max_n_clusters_at_a_time argument sets the number of clusters that can be maintained on the client at one time without returning to the ObjectStore server for another group. The constructor allocates a buffer large enough to hold the clusters. After constructing os_cluster_cursor, call os_cluster_cursor::next() to position os_cluster_cursor at the first cluster in the segment. os_cluster_cursor::get_current() os_cluster* get_current() const; If os_cluster_cursor is positioned at a cluster, returns a pointer to that cluster. If os_cluster_cursor is not positioned at a cluster, it returns NULL. To position os_ cluster_cursor at a cluster, call os_cluster_cursor::next(). os_cluster_cursor::next() os_cluster* next(); Advances to the next cluster and returns a pointer to that cluster. If next() is called immediately after os_cluster_cursor is created, it positions os_cluster_cursor at the first cluster in the segment and returns a pointer to that cluster. If next() advances beyond the last cluster in the segment, it returns NULL. 138 C++ A P I Reference Chapter 2: Class Library os_cluster_cursor::reset() void reset(); Resets the os_cluster_cursor object to its initial state. You must call os_cluster_ cursor::next() to position os_cluster_cursor at the first cluster in the segment. Overloadings void reset(os_unsigned_int32 clstr_num); Positions os_cluster_cursor at the cluster specified by clstr_num. If the cluster at clstr_num does not exist, os_cluster_cursor::get_current() returns NULL. The value returned by os_cluster::get_number() is suitable for clstr_num. void reset(const os_segment* seg); If seg is specified, os_cluster_cursor can be used to iterate over the clusters in seg. You must call os_cluster_cursor::next() to position os_cluster_cursor at the first cluster in seg. Release 6.3 139 os_cluster_with os_cluster_with os_cluster_with is the return value of os_cluster::with(). This value can be used in an overloading of persistent new to allocate storage for an object as close as possible to another object. For example, the following statement allocates storage for obj2 as close as possible to obj1: a_class *obj2 = new(os_cluster::with(obj1), a_typespec) a_class; In contrast, the following overloading of new tries to allocate storage for obj2 in the same cluster as obj1, assuming that obj1 is in a_cluster. a_class *obj2 = new(a_cluster, a_typespec) a_class; For more information, see os_cluster::with() on page 137. Required header files All ObjectStore programs must include the header file <ostore/ostore.hh>. os_cluster_with::get() const void* get() const; Returns a pointer to the object near which another object is to be allocated. This pointer is the argument to os_cluster::with() on page 137. 140 C++ A P I Reference Chapter 2: Class Library os_compact ObjectStore databases consist of clusters containing persistent data. As persistent objects are allocated and deallocated in a cluster, internal fragmentation in the cluster can increase because of the presence of holes produced by deallocation. Of course, the ObjectStore allocation algorithms recycle deleted storage when objects are allocated; however, there might be a need to compact persistent data by squeezing out the deleted space. Such compaction frees persistent storage space so it can be used by other clusters. The os_compact API removes deleted space in specified databases by compacting all C++ persistent data, including ObjectStore collections, indexes, and bound queries, and correctly relocates pointers and all forms of ObjectStore references to compacted data. After you compact a database, access is usually faster so performance improves. Once a database is compacted it cannot be de-compacted. For more information about using a command-line utility for compaction, see oscompact in Chapter 4 of Managing ObjectStore. Required header files Programs using the os_compact class must include <ostore/ostore.hh> followed by <ostore/compact.hh>. On UNIX platforms you need to link with the compaction library (liboscmp); on Windows platforms, linking with the compaction library is done automatically. os_compact::augment_cluster_split_avoidance() static void augment_cluster_split_avoidance( const char* class_name) This function specifies that any cluster containing objects of class_name will not be split when the cluster size exceeds set_maximum_cluster_size(). This is useful when a cluster contains user defined data that should not be split across clusters. For more information about maximum cluster size, see os_compact::set_maximum_ cluster_size() on page 145. To help determine when objects should not be split, see the Clustering Techniques white paper at http://www.progress.com/realtime/publications/index.ssp#odbms. os_compact::augment_post_compact_transformers() static void augment_post_compact_transformers( const os_transformer_binding& ); This function adds the specified transformer binding to the set of transformer bindings to be used during subsequent compaction. This applies to compaction initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class after all objects are moved. See also os_transformer_binding on page 417. Overloadings The following overloading is supported: static void augment_post_compact_transformers( Release 6.3 141 os_compact const os_Collection<os_transformer_binding*>& ); This overloading of the function adds the elements of the specified collection to the set of transformer bindings to be used during subsequent compaction. This applies to compaction initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class after all objects are moved. See also os_transformer_binding on page 417. os_compact::compact() static void compact( const char** dbs_to_compact); dbs_to_compact is a null-terminated array of pointers to strings identifying the set of databases to compact. If using cross-database pointers or ObjectStore references then all affiliated databases should be compacted in the same call to os_ compact::compact(). static void os_compact::compact( const char** dbs_to_compact, const char* work_db); dbs_to_compact is a null-terminated array of pointers to strings identifying the set of databases to compact. If using cross-database pointers or ObjectStore references then all affiliated databases should be compacted in the same call to os_ compact::compact(). work_db is used when compacting a large set of databases that require a lengthy compaction. The argument should be a path to a database that os_compact will use to store information so that an interruption of compaction can be resumed from the most recent consistent state. Using this argument allows the compaction to be done in multiple smaller transactions rather than one large transaction. This can prevent the osserver transaction log from becoming too large and prevents address_ space_full exceptions. When you do not specify this argument, ObjectStore performs the entire compaction operation in one transaction. When you specify this argument, ObjectStore uses a separate transaction for each cluster. Therefore, you can use separate threads to concurrently work on separate clusters. Note The ObjectStore fast schema evolution facility is used to provide rapid compaction, so seeing an err_schema_evolution exception coming from os_compact is normal. You can use the os_compact API on both file databases and rawfs databases. Compacting file databases 142 The clusters in file databases are made up of extents, all of which are allocated in the space provided by the host operating system for the single host file. When there are no free extents left in the host file and growth of an ObjectStore cluster is required, the ObjectStore server extends the host file to provide the additional space. The compactor permits holes contained in clusters to be compacted for return to the allocation pool for the host file. This frees that space for use by other clusters in the same database. However, because operating systems provide no mechanism to free disk space allocated to regions internal to the host file, any such free space remains inaccessible to other databases stored in other host files. In other words, compacting C++ A P I Reference Chapter 2: Class Library a file database does not reclaim space for use by other databases. To decrease the size of the file database after compaction, use the oscopy utility to copy the database. The newly copied database will not contain the free space reclaimed by the compactor. Compacting rawfs databases The ObjectStore rawfs stores all databases in a storage pool, on either one or more host files or raw partitions. Any space in a rawfs that is freed by the compaction operation can be reused by any cluster in any database stored in the rawfs. Database locking During compaction the database is locked and only applications running MVCC transactions can access the database. However, when running with the work_db argument the compaction is done in multiple transactions which can result in an MVCC application seeing an inconsistent view of data. For example, some objects might have been moved but an ObjectStore collection containing pointers to those objects has not transformed, resulting in an inconsistent view. Backing up compacted databases Before compacting a database the database should be backed up to safeguard against unexpected results. After compacting a database, the next backup for that database should be a full backup. The reason for this is that most clusters will be modified during compaction and running an incremental backup after that will not be practical. Transformers Some data structures become invalid as a result of compaction. The classic example of a data structure that might require user transformation is a hash table that hashes on the offset of an object within a cluster. Because compaction modifies these offsets, there is no way that such an implicit dependence on the cluster offset can be accounted for by compaction. Therefore, the compacted hash table becomes invalid. ObjectStore collections and indexes are transformed by compaction. Invocation of a user data transformer can be registered by using os_compact::augment_post_ compact_transformers() which associates a class with a function so that the function is executed on each instance of the class during the transformation phase of compaction. Schema key protection If you are developing an application and will be running os_compact on a database protected with a schema key, ensure that the correct key is specified for the environment variables OS_SCHEMA_KEY_LOW and OS_SCHEMA_KEY_HIGH. If the correct key is not specified for these variables, os_compact fails and ObjectStore signals: err_schema_key _CT_invalid_schema_key, "<err-0025-0151> The schema is protected and the key provided did not match the one in the schema." Very large databases See Advanced C++ A P I User Guide, Evolving or Compacting Very Large Databases. os_compact::initialize() static void initialize( os_unsigned_int32 n_threads, os_unsigned_int32 prefetch_KB, os_ptr_val secondary_psr_size); Release 6.3 143 os_compact This method initializes ObjectStore and must be called prior to using any ObjectStore features. Specifying zero for the calling arguments to will set them to the default values. n_threads specifies number of threads to use for schema evolution. The default value is 1.5 times the number of CPUs in the system (rounded up). The default should provide good performance on most hardware if there is no other significant load on the system. prefetch_KB specifies the size in KB of persistent pages to prefetch at one time. The default is 80 KB which should provide good performance on most hardware. secondary_psr_size specifies the size in MB of virtual address space for secondary sessions. The default is 16 MB. Increase this value in the unlikely event that your application runs out of address space, for example, because of an extremely large schema. os_compact::set_address_space_release_interval() static void set_address_space_release_interval( os_unsigned_int32 interval); Specifies the frequency of address space releases, where interval is in units of bytes and controls the frequency. Specify a smaller value for more frequent releases, a larger value for less frequent. The default value is 1 MB. os_compact::set_avoid_page_boundary() static void set_avoid_page_boundary( os_unsigned_int32 max_bytes_wasted); Specifies that you want compaction to avoid placing objects across page boundaries in the compacted database. This applies to objects that are being moved to compact the space used by the database. The default is that compaction does not avoid page boundaries when moving objects. When compaction avoids a page boundary, it inserts a free region and leaves some bytes on the page unused. The max_bytes_wasted argument specifies the maximum bytes that can be wasted when page boundaries are avoided. If trying to avoid a page boundary would cause more than max_bytes_wasted bytes to be wasted, compaction does not avoid placing that object across the page boundary. The value of max_bytes_wasted can be any value from 0 through 4095. A value of 0 disables the feature. Note: In the context of this function, all pages are server pages, which are always 4K in size. It does not matter what platform the server is running on. os_compact::set_explanation_level() static void set_explanation_level(os_unsigned_int32 level); 144 C++ A P I Reference Chapter 2: Class Library Specifies the level of debugging information that is output during compaction. The level argument can be one of the following enumerators: Enumerator Meaning silent Do not output any debugging information. This is the default. phase_level Output information about the phases of compaction for each cluster, segment, and database. type_level Output information about all types in the database. object_level Output information about all objects in the database. verbose Output information about all pointers in the database. Note that the levels are cumulative; that is, each level includes information that is output at the previous levels. os_compact::set_malloc_size() static void set_malloc_size(os_unsigned_int32); Sets the relocation map malloc size in bytes. The default is 0x100000 bytes (1024 KB). os_compact::set_maplet_size() static void set_maplet_size(os_unsigned_int32); Sets the relocation map maplet size in bytes.; the value must be a power of 2. The default is 64 bytes. You should change this value only if you fully understand the performance characteristics of your CPU and all its levels of cache. os_compact::set_maximum_cluster_size() static void set_maximum_cluster_size( os_unsigned_int32 max_cluster_size_in_bytes) During compaction clusters larger than max_cluster_size_in_bytes are split into multiple clusters. This function specifies the size of max_cluster_size_in_bytes. The value of max_cluster_size_in_bytes is rounded up to the next multiple of 64 KB. The default is to split any cluster that exceeds 1600 MB. See os_ compact::augment_cluster_split_avoidance() on page 141 for how to prevent compaction from splitting clusters that exceed max_cluster_size_in_bytes. Note that some ObjectStore collections manage an internal cluster which will not be split because the internal clusters maintain data structures that cannot be split across multiple clusters. Examples of collections that maintain internal clusters are os_set, os_Set, os_bag, os_Bag, os_Dictionary, and indexes. os_compact::set_maximum_memory_size() static void set_maximum_memory_size(os_ptr_val); Sets the maximum memory to use for pointer relocation maps in bytes. The default is one-half the main memory size or one-half the size of virtual memory, whichever is less. Release 6.3 145 os_compact os_compact::shutdown() static void shutdown(); After completion shutdown() must be called to clean up ObjectStore resources. 146 C++ A P I Reference Chapter 2: Class Library os_comp_schema This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a compilation schema, stored in a compilation schema database. os_comp_schema is derived from os_schema. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_comp_schema::get() static const os_comp_schema& get(const os_database& db); Returns the schema of the specified database. Release 6.3 147 os_database os_database Instances of the class os_database represent ObjectStore databases. Pointers to such instances can be used as arguments to persistent new. Persistent data can be accessed only if the database in which it resides is open. Databases are created, destroyed, opened, and closed with database member functions. The functions for creating, opening, and closing databases can be called either inside or outside a transaction. The function for destroying databases should be called outside a transaction. When a session terminates, any databases left open are closed automatically. Instances of the class os_database are sometimes used to hold session local or persession state, representing a property of the database for the current session. For example, a database opened for read-only access in one session could be opened for update in another session. For this reason, it is sometimes preferable to think of an instance of the class os_database as representing an association between a database and the session that retrieves the pointer to it. In fact, instances of os_database are actually transient objects. Some functions that perform administrative operations on databases (for example functions for changing database ownership or protection modes) are members of the class os_dbutil. See os_dbutil on page 178. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. The type os_unixtime_t is defined as unsigned long. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_database::affiliate() void affiliate( os_database* target_db, os_boolean deep = 0, os_boolean relative = 1, const char* common_parent = NULL ); Invoking this function on the specified database causes target_db to become affiliated with the specified database and writes an entry in its path name pool to the target database. You must call affiliate() once for each target database that will contain objects pointed to by objects in the specified database. target_db points to the target database. When deep is nonzero (true), affiliate() copies all affiliation entries from the path name pool of target_db. This argument is useful when the target database contains objects that include cross-database pointers. 148 C++ A P I Reference Chapter 2: Class Library When relative is nonzero (true), affiliate() writes the relative path name to target_db; if it is 0 (false), affiliate() writes the absolute path name, including the ObjectStore server name. common_parent specifies the path that is common to both the this database and the target database. By default, the common parent is the last directory in the path hierarchy that is common to the paths of both the this database and the target database. For example, the common parent of /a/b/c/this_db and /a/b/d/tgt_db is /a/b, so the relative path from this_db to tgt_db is .. /d/tgt_db. Note that os_database::affiliate() is directional. That is, after calling db1>affiliate(db2), db1 can have pointers to objects in db2, but not the reverse. You must call db2->affiliate(db1) if you want db2 to have pointers to objects in db1. os_database::change_affiliation() void change_affiliation(os_unsigned_int16 index, const os_database* target_db, os_boolean relative = 1, const char* common_parent = NULL ); Replaces the path to an affiliated database with the path to target_db. This function is especially useful when you are making a copy of a database that is affiliated with another database, and you want to change the affiliation from the original database to its copy. Calling this function does not modify or validate the user’s persistent pointers. index references an entry in the path name pool of the this database. After change_ affiliation() has been called, the entry is overwritten with the path to target_db. For information about retrieving an index value, see os_database::get_ affiliation_index_of() on page 154. target_db points to the target database. When relative is nonzero (true), change_affiliation() writes the relative path name to target_db; if it is 0 (false), change_affiliation() writes the absolute path name, including the server name prefix. common_parent specifies the path that is common both to the this database and to the target database. The common_parent argument controls the form of the relative path when the relative argument is nonzero (true). For more information, see os_ database::affiliate() on page 148. os_database::change_schema_key() void change_schema_key( os_unsigned_int32 old_key_low, os_unsigned_int32 old_key_high, os_unsigned_int32 new_key_low, os_unsigned_int32 new_key_high ); Sets the schema key of the specified database. Call this function from within an update transaction. The specified database must be opened for update; otherwise, Release 6.3 149 os_database ObjectStore signals err_opened_read_only and issues an error message such as the following: <err-0025-0155> Attempt to change the schema key of database db1, but it is opened for read only. If the database has had its key frozen, err_schema_key is signaled and ObjectStore issues an error message such as the following: err_schema_key <err-0025-0152> The schema key of database db1 is frozen and may not be changed. If the database already has a schema key at the time of the call, old_key_low must match the first component of the key and old_key_high must match the second component, or err_schema_key is signaled and ObjectStore issues an error message such as the following: Error using schema keys <err-0025-0158>Unable to change schema key of database db1. The schema is already protected and the key provided did not match the old key in the schema. (err_schema_key) If the database has no schema key, old_key_low and old_key_high are ignored. new_key_low specifies the first component of the database’s new schema key, and new_key_high specifies the second component. If both these arguments are 0, calling this function causes the database to have no schema key. os_database::close() void close(os_boolean force = 0); Decrements the open count, which is the number of times that the database has been opened without successive closes. ObjectStore maintains an open count for each opened database. Calling os_ database::open() increments the count, and calling os_database::close() decrements it. When the count reaches 0, the database is closed. To close a database regardless of its open count, specify nonzero (true) for the optional force argument, which also resets the open count to 0. By default, an open database is not closed until its open count is 0. For information about opening the database and the open count, see os_ database::open() on page 164. For information about using an automatic variable of the class os_close_database to close a database, see os_close_database on page 130. os_database::create() static os_database* create( const char* db_path, os_int32 mode = 0664, os_boolean if_exists_overwrite = 0, os_database* schema_database = 0, objectstore::segment_reference_policy 150 C++ A P I Reference Chapter 2: Class Library default_segment_reference_policy = objectstore::dsco_access_allowed ); Returns a pointer to a newly created database (an instance of the class os_database) with the specified db_path and mode. (The octal values for mode are the same as those used by the oschmod utility, which is described in Managing ObjectStore.) The new database is opened for reading and writing. If a database with the specified path name already exists, an err_database_exists exception is signaled unless if_exists_overwrite is nonzero (true). If if_exists_ overwrite is nonzero, any existing database with the same path name is deleted, a new database is created with the specified mode, and the new database is opened for read and write. If schema_database is 0, schema information is stored in the new database. The effect is the same as the result of calling create( ) without the schema_database argument: os_database::create(pathname, mode, if_exists_overwrite); If schema_database is nonzero, the database it specifies is used as the schema database for the newly created database. This means that ObjectStore installs in the schema database all schema information for the data stored in the new database; the new database itself will have no schema information in it. The specified schema database must be open at the time of the call to create( ); if it is not, err_schema_database is signaled. If the schema database was opened for read only, ObjectStore attempts to reopen it for read and write. If this fails because of protections on the database, it remains open for read only. This prevents any update to the new database that requires schema installation. Note that the new database’s schema database can also contain regular user data (that is, data other than schema information). The schema database must store its own schema locally. If the schema for the user data in schema_database is stored remotely, err_schema_database is signaled. default_segment_reference_policy specifies the default reference policy for new segments in a database; see os_database::create_segment() on page 152. For file databases, pathname is an operating system path name. ObjectStore takes into account local NFS mount points when it is interpreting the path name, so path names can refer to databases on foreign hosts. To refer to a database on a foreign host for which there is no local mount point, use a server host prefix — the name of the foreign host followed by a colon (:), as in oak:/foo/bar. For databases in ObjectStore directories, pathname consists of a rooted path name preceded by a rawfs host prefix of the form host-name:: (for example oak::/foo/bar). The rawfs host prefix can be followed by a server host prefix of the form host-name: (as in oak::beech:/foo/bar). The server host name specifies the file system on which you want the new database stored. If no server host name is supplied, the value of the ObjectStore environment variable OS_SERVER_HOST is used. Release 6.3 151 os_database ObjectStore supports multibyte encoded path names. In environments where ObjectStore applications and servers are located on different machines, the client and server machines can use different multibyte encodings. os_database::create_root() os_database_root* create_root(char* name); Creates a root in the specified database to associate a copy of the specified name with an as-yet-unspecified entry-point object. (Because the name is copied to persistent memory by this function, the supplied char* can point to transient memory.) If the specified name is already associated with an entry-point object in the same database, an err_root_exists exception is signaled. If the specified database is the transient database, an err_database_not_open exception is signaled. os_database::create_segment() os_segment* create_segment( ); Creates a segment in the specified database and returns a pointer to an instance of the class os_segment. Call this function within a transaction. The return value points to a transient object representing the new segment. Note that because it points to transient memory, the return value of this function cannot be stored persistently. If create_segment() is invoked on a transient database, it signals the error err_ database_segment. Overloading The following overloading is supported: enum objectstore::segment_reference_policy { export_id_access_required, dsco_access_allowed }; os_segment* os_database::create_segment( objectstore::segment_reference_policy ref_policy ); Creates a segment in the specified database. The ref_policy argument specifies the reference policy for the this segment. If ref_policy is objectstore::export_id_access_required, certain reorganization facilities, such as compaction, can operate more efficiently on the segment. The cost of this policy is the overhead of having to export objects in the segment that might be referred to from other segments, as well as the additional overhead of traversing cross-segment pointers to the segment. When export_id_access_required is in effect, you must export every object in the segment that might be referred to by an object in a different segment. (See objectstore::export_object() on page 60.) If you fail to export an object in an export_id_access_required segment, cross-segment pointers to the object are treated as illegal pointers (see objectstore::set_null_illegal_pointers() on page 90). 152 C++ A P I Reference Chapter 2: Class Library If ref_policy is objectstore::dsco_access_allowed (the default), reorganizing the segment can require scanning an entire database or group of databases, rather than scanning just that segment. This policy does not carry the costs described for export_id_access_required, described previously. In addition to affecting reorganization, a segment’s reference policy also affects garbage collection. The ObjectStore garbage collector automatically treats exported objects in export_id_access_required segments as garbage-collection roots. For garbage collection of dsco_access_allowed segments, you must explicitly identify the roots (the objects referred to by other segments). os_database::destroy() void destroy( ); Deletes the database for which the function is called. The specified database must be persistent. If the database is open at the time of the call, destroy( ) closes the database before deleting it. When a session destroys a database, this can affect other sessions that have the database opened. Such a session might subsequently be unable to access some of the database’s data, even if earlier in the same transaction it accessed the database successfully. Data already cached in the session’s client cache continues to be accessible, but attempts to access other data cause ObjectStore to signal err_database_not_found. Attempts to open the database also signal err_database_not_found. Note that performing os_database::lookup( ) on the destroyed database’s path name might succeed because the instance of os_database representing the destroyed database might be in the session’s client cache. If you attempt to operate on a destroyed persistent database, err_database_is_ deleted is signaled. This function can be used only on a persistent database. Invoking destroy() on a transient database causes the err_database_transient exception. Use ::operator delete to delete a transient database. os_database::find_root() os_database_root* find_root(char* name); Returns a pointer to the root in the specified database with the specified name. Returns 0 if such a root is not found. os_database::freeze_schema_key() void freeze_schema_key( os_unsigned_int32 key_low, os_unsigned_int32 key_high ); Freezes the specified database’s schema key, preventing any change to the key, even by applications with a matching key. Release 6.3 153 os_database Call this function from within an update transaction. The specified database must be opened for update; otherwise, ObjectStore signals err_opened_read_only and issues an error message such as the following: <err-0025-0156> Attempt to freeze the schema key of database db1, but it is opened for read only. If the database is schema protected and has not been accessed since the last time its open count was incremented from 0 to 1, the application’s schema key must match the database’s schema key. If it does not, err_schema_key is signaled and ObjectStore issues an error message such as the following: <err-0025-0151>The schema is protected and the key, if provided, did not match the one in the schema of database dba. key_low and key_high must match the database’s schema key, or else err_schema_ key is signaled and ObjectStore issues an error message such as the following: <err-0025-0159>Unable to freeze the schema key of database db1. The schema is protected and the key provided did not match the key in the schema. If the database’s schema key is already frozen, and you specify the correct key, the call has no effect. os_database::get_affiliated_databases() void get_affiliated_databases( os_int32& n_databases, os_database**& dbs ) const; Returns an array of pointers to the affiliated databases — that is, to all databases with entries in the path name pool of the specified database. The call must occur inside a transaction. When the function returns, n_databases refers to the number of elements in the array. It is the user’s responsibility to deallocate the array when it is no longer needed. For information about affiliating one database with another, see os_ database::affiliate() on page 148. os_database::get_affiliation_index_of() os_unsigned_int16 get_affiliation_index_of( const os_database* target_db) const; Returns the index of the path to target_db in the path name pool of the this database. target_db must have been previously affiliated with the this database. If it is not affiliated, get_affiliation_index_of() returns 0. The return value is useful when you want to change the affiliation of a database; see os_database::change_affiliation() on page 149. os_database::get_all_databases() static void get_all_databases( 154 C++ A P I Reference Chapter 2: Class Library os_int32 max_to_return, os_database_p* dbs, os_int32& n_returned ); Provides access to all the databases retrieved by the current session. os_database_ p* is an array of pointers to databases. This array must be allocated by the user. The function os_database::get_n_databases( ) can be used to determine the size of an array to allocate. The max_to_return argument is specified by the user and is the maximum number of elements the array is to have. The n_returned argument refers to the actual number of elements in the array. os_database::get_all_roots() void get_all_roots( os_int32 max_to_return, os_database_root_p* roots, os_int32& n_returned ); Provides access to all the roots in the specified database (see os_database_root on page 172). os_database_root_p* is an array of pointers to roots. This array must be allocated by the user. The os_database::get_n_roots( ) function can be used to determine the size of an array to allocate. The max_to_return argument is specified by the user and is the maximum number of elements the array is to have. The n_ returned argument refers to the actual number of elements in the array. os_database::get_all_segments() void get_all_segments( os_int32 max_to_return, os_segment_p* segs, os_int32& n_returned ) const; Provides access to all the segments in the specified database. os_segment_p* is an array of pointers to segments. This array must be allocated by the user. The os_ database::get_n_segments( ) function can be used to determine the size of an array to allocate. The max_to_return argument is specified by the user and is the maximum number of elements the array is to have. The n_returned argument refers to the actual number of segment pointers returned. os_database::get_all_segments_and_permissions() void get_all_segments_and_permissions( os_int32 max_to_return, os_segment_p* segs, os_segment_access_p* controls, os_int32& n_returned ) const; Provides access to all the segments in the specified database, together with each segment’s associated os_segment_access. The nth element of controls points to the os_segment_access associated with the segment pointed to by the nth element of segs. The arrays controls and segs must be allocated by the user. The max_to_ return argument is specified by the user. Release 6.3 155 os_database os_database::get_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; os_allocation_strategy get_allocation_strategy(void) const; Returns the current strategy to use when allocating storage for an object in the specified database. For information about the return values, see objectstore::get_ allocation_strategy() on page 62. For information about setting the allocation strategy in a specific database, see os_database::set_allocation_strategy() on page 168. os_database::get_application_info() void* get_application_info( ) const; Returns a pointer to the object pointed to by the pointer last passed, during the current session, to os_database::set_application_info( ) for the specified database. If set_application_info( ) has not been called for the specified database during the current session, 0 is returned. os_database::get_default_segment() os_segment* get_default_segment( ) const; Returns a pointer to the default segment of the specified database. The default segment is the segment in which persistent memory is allocated by default when the function new is called with only an os_database* argument. Initially the default segment is the initial segment, the one segment (besides the schema segment) with which the database was created. A session can change this at any time (see os_ database::set_default_segment() on page 168), but the change remains in effect only for the duration of the session and is invisible to other sessions. Simple ObjectStore applications need not create any segments; all the database’s persistent data can be stored in the initial segment, if desired. If more sophisticated clustering is required, the application can create new segments in the database, and it might be convenient to make one of these the default. os_database::get_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; void get_fetch_policy( os_fetch_policy& policy, os_int32& bytes ) const; Retrieves the current fetch policy for the specified database. An enumerator of type os_fetch_policy is returned in policy, and the fetch quantum is returned in bytes. For information about the arguments, see objectstore::get_fetch_ 156 C++ A P I Reference Chapter 2: Class Library policy() on page 66. For information about setting the fetch policy for a database, see os_database::set_fetch_policy() on page 169. os_database::get_file_host_name() char* get_file_host_name( ) const; If the specified database is a file database, the function allocates on the heap and returns the name of the host machine for the database. If the database is a rawfs database or the transient database, 0 is returned. Note that it is the user’s responsibility to deallocate the character array when it is no longer needed. os_database::get_fragmentation() void get_fragmentation( os_fragmentation_statistics& stat); Returns statistics on the fragmentation of the physical structure of the database specified by the this argument. The statistics are returned in the stat argument. This function can be called outside a transaction. The stat argument is an os_fragmentation_statistics object that the get_ fragmentation() function fills with statistics about the fragmentation of this database. The os_fragmentation_statistics class has the following public data members: os_element_fragmentation_statistics cluster_data; os_element_fragmentation_statistics metadata_table_dirs; os_element_fragmentation_statistics metadata_table_leaves; Each member provides statistics for one of three types of physical data structure within a database: • Clusters, which refer to the disk space that holds the data (as opposed to metadata) for a cluster. • Metadata table directories, which point to metadata table leaves in clusters that are large enough to need more than one leaf per table. • Metadata table leaves, which contain per-page metadata such as free space, tags (object type information), and PRMs (pointer reference maps). The os_element_fragmentation_statistics class has the following public data members: os_item_fragmentation_statistics size; os_item_fragmentation_statistics n_fragments; os_item_fragmentation_statistics fragment_size; where size specifies the number of clusters/directories/leaves in the database, n_ fragments specifies how many of each type are fragmented, and fragment_size specifies the size of each fragment. The os_item_fragmentation_statistics class has the following public data members: os_unsigned_int32 count; os_unsigned_int32 minimum; Release 6.3 157 os_database os_unsigned_int32 maximum; os_unsigned_int32 average; os_unsigned_int32 median; As indicated by their names, these members specify the number of values, the minimum and maximum values encountered, the average value, and an estimate of the median value. The median value is a number such that half of the values are lower and the other half are higher. The median value is not computed exactly but is usually within 20% of the true median. Because these distributions tend to be very skewed, with more small values than large values, the median is often much smaller than the average. The size values are in units of 512-byte sectors. You can get the same statistical information in a report format either by invoking the ossize utility (with the -f option) on the command line or by calling os_ dbutil::ossize(). For more information, see • ossize in Chapter 4 of Managing ObjectStore • os_dbutil::ossize() on page 186 • Managing Database Fragmentation in Chapter 1 of Managing ObjectStore os_database::get_host_name() char* get_host_name( ) const; Returns the name of the host machine on which the specified database resides. The returned char* points to an array allocated on the heap by this function. Note that it is the user’s responsibility to deallocate the character array when it is no longer needed. os_database::get_incremental_schema_installation() os_boolean get_incremental_schema_installation( ) const; Returns nonzero (true) if the schema installation mode of the specified database is set to incremental mode. Returns 0 (false) if the mode is set to batch mode (the default). See os_database::set_incremental_schema_installation() on page 169. os_database::get_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; objectstore_lock_option get_lock_option() const; 158 C++ A P I Reference Chapter 2: Class Library Returns the locking behavior currently in effect for the specified database, including all its segments and clusters. For more information about the return value, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 For information about setting the lock option, see os_database::set_lock_ option() on page 169. os_database::get_n_databases() static os_int32 get_n_databases( ); Returns the number of databases retrieved by the current session. os_database::get_n_roots() os_int32 get_n_roots( ) const; Returns the number of roots in the specified database (see os_database_root on page 172). os_database::get_n_segments() os_int32 get_n_segments( ) const; Returns the number of segments in the specified database, including the schema segment. os_database::get_new_segment_reference_policy() objectstore::segment_reference_policy os_database::get_new_segment_reference_policy() const; Gets the default reference policy for new segments in the this database. See os_ database::create_segment() on page 152. os_database::get_null_illegal_pointers() os_boolean get_null_illegal_pointers() const; If the specified database is in null_illegal_pointers mode, the function returns nonzero (true); otherwise, it returns 0 (false). See os_database::set_null_ illegal_pointers() on page 170. Release 6.3 159 os_database os_database::get_open_mode() enum open_modes { not_open, open_for_update, open_for_read_only, open_for_multi_db_mvv, open_for_mvcc}; open_modes get_open_mode() const; Returns the open mode of the database specified as the this argument. The return value can be one of the following: Return Value Meaning not_open Database is not open. open_for_update Database is open for updates. open_for_read_only Database is open for read-only. open_for_multi_db_mvcc Database is open for multidatabase multiversion concurrency control; see os_database::open_ multi_db_mvcc() on page 165. open_for_mvcc Database is open for multiversion concurrency control; see os_database::open_mvcc() on page 165. os_database::get_path_to() char* get_path_to(os_database* target_db) const; Returns a newly allocated string that contains the path from the this database to target_db. Depending on how the affiliation was established, the path can be absolute or relative; see os_database::affiliate() on page 148. The user must delete the string. os_database::get_pathname() char* get_pathname( ) const; Returns the path name of the specified database. For databases in ObjectStore directories, the path name consists of a rawfs host prefix (rawfs-host-name::) followed by a rooted path name (for example, oak::/parts/db1). For file databases, the path name is identical to the one passed to os_database::open( ), os_ database::create( ), or os_database::lookup( ) when this was first retrieved by the current session. The returned char* points to an array allocated on the heap by this function. Note that it is the user’s responsibility to deallocate the array when it is no longer needed. os_database::get_required_DLL_identifiers() const char* const* get_required_DLL_identifiers( os_unsigned_int32& count ); 160 C++ A P I Reference Chapter 2: Class Library Returns an array of pointers to DLL identifiers and the number of elements in the array. The order of elements in the array is not significant. The array and the elements must not be modified or deallocated. This function can be called only within a transaction with the database open. The returned array and strings might reside in the database, so they are valid only for one transaction. os_database::get_schema_database() os_database* get_schema_database( ) const; Returns a pointer to the schema database for this. If this is not a database whose schema is stored remotely, 0 is returned. This function must be invoked within a transaction. os_database::get_sector_size() os_unsigned_int32 get_sector_size( ); Returns the size of a sector, in bytes. os_database::get_segment() os_segment* get_segment(os_unsigned_int32 seg_num); Returns a pointer to the segment in the specified database with the specified segment number. See os_segment::get_number() on page 357. os_database::get_segments() void get_segments( os_unsigned_int32 first_seg_num, os_unsigned_int32 max_segments, os_segment_p* segs, os_unsigned_int32& n_segments, os_boolean& b_more ) const; Returns a maximum number of segments, as specified in max_segments. The first_ seg_num argument specifies the number of the first segment in the range. The segments are returned in segs, which must be allocated by the user. The n_segments argument contains the number of segments actually returned, and b_more is nonzero (true) if there are more segments to retrieve. You can use get_segments() to write your own segment iterator, or you can use the iterator class os_segment_cursor; see os_segment_cursor on page 365. os_database::get_transient_database() static os_database* const get_transient_database( ); Returns a pointer to the transient database, which can be used as an argument to ::operator new() to request transient allocation. For information about ::operator new(), see ::operator new() on page 459. Release 6.3 161 os_database os_database::has_affiliation_to() os_boolean has_affiliation_to( const os_database* target_db ) const; Returns nonzero (true) if target_db is affiliated with the this database; otherwise, returns 0 (false). For information about retrieving a list of all the databases affiliated with a specific database, see os_database::get_affiliated_databases() on page 154. os_database::insert_required_DLL_identifier() void insert_required_DLL_identifier( const char* DLL_identifier ); Copies the DLL_identifier string and adds it to the database’s set of required DLLs. If DLL_identifier is already in the database’s set of required DLLs, this function does nothing. Call this function only in an update transaction with the database open for write. See also os_database::insert_required_DLL_identifiers() on page 162. os_database::insert_required_DLL_identifiers() void insert_required_DLL_identifiers (const char* const* DLL_identifiers, os_unsigned_int32 count ); Copies DLL_identifiers to a database’s set of required DLLs. For each identifier, checks that the identifier is not already in the set. If it is already present, the identifier is not copied. If the identifier is not present in the set of required DLLs, it is copied and added to the set. This function can only be called in an update transaction with the database open for write. os_database::insert_required_DLL_identifiers() is equivalent to repeated calls to os_database::insert_required_DLL_identifier(), but it is more efficient. os_database::is_open() os_boolean is_open( ) const; Returns nonzero (true) if the this database is open, and 0 (false) otherwise. os_database::is_open_multi_db_mvcc() os_boolean os_database::is_open_multi_db_mvcc() const; Returns nonzero (true) if the specified database is open for multidatabase MVCC and 0 (false) otherwise. 162 C++ A P I Reference Chapter 2: Class Library os_database::is_open_mvcc() os_boolean is_open_mvcc( ) const; Returns nonzero (true) if the this database is opened for either single-database or multidatabase multiversion concurrency control (MVCC) and 0 otherwise. See os_ database::open_multi_db_mvcc() on page 165 and os_database::open_mvcc() on page 165. os_database::is_open_read_only() os_boolean is_open_read_only( ) const; Returns nonzero (true) if the this database is open for read only, and 0 (false) otherwise. os_database::is_open_single_db_mvcc() os_boolean os_database::is_open_single_db_mvcc() const; Returns nonzero (true) if the specified database is open for single-database MVCC and 0 (false) otherwise. os_database::is_open_update() os_boolean is_open_update() const; Returns nonzero (true) if the this database is open for update, and 0 (false) otherwise. os_database::is_transient_database() os_boolean is_transient_database() const; Returns nonzero (true) if the this database is transient, and 0 (false) if it is persistent. os_database::lookup() static os_database* lookup( const char* db_path, os_int32 create_mode = 0 ); Returns a pointer to the database with the specified db_path but does not open it. If it is not found, an err_database_not_found exception is signaled. The create_ mode argument is a Boolean value; if its value is nonzero and no database named db_ path exists, it creates the database. For information on database path names, see os_database::create() on page 150. os_database::of() static os_database* of(void* location); Returns a pointer to the database in which the specified object resides. If the object is transiently allocated, a pointer to the transient database is returned. Release 6.3 163 os_database Note that using os_database::of( ) to allocate a new persistent object defeats clustering. Use os_cluster::with( ) instead; see os_cluster::with() on page 137. os_database::open() void open(os_boolean read_only = 0); Opens the this database, and establishes the access mode specified by the read_ only argument — nonzero for read only, and 0 for read and write. Note that you can use this overloading of os_database::open() only if you already have a pointer to the database you want to open. The first time a database is opened, ObjectStore establishes an open count for the database. Calling open() on a database that is already open increments the count if the second call requests the same mode as used in the initial call. If the second call requests a different mode, err_db_cannot_change_open is signaled. Calling os_ database::close() decrements the open count. An opened database is closed when its open count reaches 0. (However, see os_database::close() on page 150.) ObjectStore maintains open counts for all databases opened with this and the following overloadings of os_database::open(). Overloadings static os_database* open( const char* db_path, os_boolean read_only = 0, os_int32 create_mode = 0, objectstore::segment_reference_policy default_segment_reference_policy = objectstore::dsco_access_allowed ); Opens the database with the specified db_path, establishes the access type specified by the read_only argument — nonzero for read only, and 0 for read and write — and returns a pointer to that database. If the database is not found, an err_ database_not_found exception is signaled unless create_mode is nonzero. If create_mode is nonzero and no database named db_path exists, the effect is the same as calling os_database::create( ) with the same db_path, create_mode, schema_database, and default_segment_reference_policy arguments. The octal values for mode are the same as those used by the oschmod utility; see oschmod in Managing ObjectStore. For information on database path names, see os_database::create() on page 150. static os_database* open( const char* db_path, os_boolean read_only, os_int32 create_mode, os_database* schema_database, objectstore::segment_reference_policy default_segment_reference_policy = objectstore::dsco_access_allowed ); 164 C++ A P I Reference Chapter 2: Class Library All arguments other than schema_database are as described for the previous overloading of open( ). If no database named db_path is found and both create_ mode and schema_database are nonzero, schema_database is used as the schema database for the newly created database. This means that ObjectStore installs in the schema database all schema information for the data stored in the new database; the new database itself will have no schema information in it. The specified schema database must be open at the time of the call to open( ); if it is not, err_schema_database is signaled. If the schema database was opened for read only, ObjectStore attempts to reopen it for read or write. If this fails because of protections on the database, it remains open for read only. This prevents any update to the new database that requires schema installation. Note that the new database’s schema database can also contain regular user data (that is, data other than schema information). The schema database must store its own schema locally. If the schema for the user data in schema_database is stored remotely, err_schema_database is signaled. For information about closing a database and the effect of calling close() on the open count, see os_database::close() on page 150. os_database::open_multi_db_mvcc() void os_database::open_multi_db_mvcc(); Opens the database specified by the this argument for multidatabase multiversion concurrency control (MVCC). The err_db_already_open_single_db_mvcc exception is thrown if the specified database is already open for single-database MVCC. Opening databases with this function provides multiversion concurrency control across multiple databases. Like single-database MVCC, multidatabase MVCC allows nonblocking read — that is, an ObjectStore client or session can read data while another client or session is making concurrent updates to the same data, with no waiting for locks by either the reader or the writer. Unlike single-database MVCC, multidatabase MVCC provides a consistent, aggregate snapshot of multiple databases. Overloadings The following overloading is supported: static os_database* os_database::open_multi_db_mvcc( const char* pathname ); This overloading opens the database specified by pathname for multidatabase MVCC and returns a pointer to the opened database. The err_db_already_open_ single_db_mvcc exception is thrown if the specified database is already open for single-database MVCC. os_database::open_mvcc() void open_mvcc( ); Release 6.3 165 os_database Opens a single database for multiversion concurrency control (MVCC). After you open a database for MVCC, multiversion concurrency control is used for access to it until you close it. If the database is already opened, but not for MVCC, err_mvcc_ nested is signaled. If you try to perform write access on a database opened for MVCC, err_opened_read_only is signaled. If a database is open for multidatabase MVCC, err_db_already_open_multi_db_ mvcc is thrown if you try to open it for single-database MVCC. If an application has a database opened for MVCC, it never has to wait for locks to be released in order to read the database. Reading a database opened for MVCC also never causes other applications to have to wait to update the database. In addition, an application never causes a deadlock by accessing a database it has opened for MVCC. In each transaction in which an application accesses a database opened for MVCC, the application sees a snapshot of the database taken sometime during the transaction. This snapshot has the following characteristics: • It is internally consistent. • It might not contain changes committed during the transaction by other sessions. • It does contain all changes committed before the transaction started. Because of the second characteristic, the snapshot might not be consistent with other databases accessed in the same transaction, although it always will be internally consistent. Even two databases, both of which are opened for MVCC, might not be consistent with each other because updates might be performed on one of the databases between the times of their snapshots. Even though the snapshot might be out of date by the time some of the access is performed, multiversion concurrency control retains serializability if each transaction that accesses an MVCC database accesses only that one database. Such a transaction sees a database state that would have resulted from some serial execution of all transactions, and all the transactions produce the same effects as would have been produced by the serial execution. Overloadings The following overloading is supported: static os_database* open_mvcc(const char* db_path); Opens the database with the specified path name for multiversion concurrency control. os_database::release_pointer() void release_pointer(); Releases the pointer specified by the implicit this argument. When an application calls a function that returns an os_database pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. 166 C++ A P I Reference Chapter 2: Class Library When the application calls release_pointer(), ObjectStore decrements the use count for an ObjectStore object. When the last pointer is released, the count reaches 0 and the os_database object is deleted. See the following for related information: • The C++ A P I User Guide discusses how to release pointers. • You can also release os_database pointers when they go out of scope; see os_ release_database_pointer on page 313. • See os_database::retain_pointer() on page 167 for information about retaining os_database pointers. os_database::retain_pointer() void retain_pointer(); Retains the pointer specified by the this argument. When an application calls a function that returns an os_database pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. The application calls os_database::release_ pointer() when it no longer needs the pointer, thus releasing it and decrementing the use count. When the application calls retain_pointer(), ObjectStore increments the use count for an os_database object. Calling retain_pointer() ensures that the pointer is retained, even when another part of the application releases it. For information about using retain_pointer(), see the C++ A P I User Guide. See also os_database::release_pointer() on page 166. os_database::remove_required_DLL_identifier() void remove_required_DLL_identifier( const char* DLL_identifier ); Removes the DLL_identifier from the database’s set of required DLLs. If DLL_ identifier is not in the set, this function does nothing. This function can only be called in an update transaction with the database open for write. os_database::return_memory() void return_memory(os_boolean evict_now); Like objectstore::return_memory() on page 81 except that it acts on a specified database rather than on a range of addresses. os_database::session_of() os_session* session_of() const; Returns the os_session object for the session in the database specified by the this argument. Release 6.3 167 os_database This function can be used with os_session::set_current() to enable a thread to join the session associated with an os_database object. Consider the following example, where db_ptr references an os_database object: os_session::set_current(db_ptr->session_of()); This statement enables the currently executing thread to access the object by setting the thread’s current session to the session associated with db_ptr. os_database::set_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; void set_allocation_strategy(os_allocation_strategy); Sets the strategy to use when ObjectStore allocates storage for an object in the specified database. This strategy applies to all segments and clusters in the database unless specifically overridden by subsequent calls to • objectstore::set_allocation_strategy() on page 82 • os_cluster::set_allocation_strategy() on page 135 • os_database::set_allocation_strategy() on page 168 • os_segment::set_allocation_strategy() on page 359 For information about the meaning of the os_allocation_strategy enumerators that can be used as arguments, see objectstore::get_allocation_strategy() on page 62. os_database::set_application_info() void set_application_info(void* info); Associates the specified object with the specified database for the current session. The argument info must point to a transient object. See os_database::get_ application_info() on page 156. os_database::set_default_segment() void set_default_segment(os_segment* db); Sets the default segment for the specified database. The default segment is the segment in which persistent memory is allocated by default when the function new is called with only an os_database* argument. Initially the default segment is the initial segment — the one segment (besides the schema segment) with which the database was created. Changing the default segment remains in effect only for the duration of the session and is invisible to other sessions. Simple ObjectStore applications need not create any segments; all the database’s persistent data can be stored in the initial segment, if you want. If more sophisticated clustering is required, however, the application can create new segments in the database, and it might be convenient to make one of these the default. 168 C++ A P I Reference Chapter 2: Class Library os_database::set_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; void set_fetch_policy(os_fetch_policy policy, os_int32 bytes); Specifies the fetch policy for all clusters and segments in the specified database. The default fetch policy is os_fetch_page. For more information about the arguments, see objectstore::get_fetch_policy() on page 66. For information about retrieving the fetch policy, see os_database::get_fetch_policy() on page 156. os_database::set_incremental_schema_installation() void set_incremental_schema_installation(os_boolean); If nonzero (true) is supplied as the os_boolean argument, the schema installation mode of the specified database is set to incremental mode. With incremental schema installation, a class is added to a database’s schema only when an instance of that class is first allocated in the database. If 0 (false) is supplied as the argument, the mode is set to batch mode (the default). With batch mode, whenever an application creates or opens the database, every class in the application’s schema is added to the database’s schema (if the class is not already present in the database schema). os_database::set_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; void set_lock_option(objectstore_lock_option); Sets the locking behavior for the database specified by the this argument, including all its segments and clusters. For information about the argument, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 Release 6.3 169 os_database • objectstore::own_page_write on page 79 os_database::set_new_segment_reference_policy() void os_database::set_new_segment_reference_policy( objectstore::segment_reference_policy ref_policy); Sets the default reference policy for new segments in the this database. See os_ database::create_segment() on page 152. os_database::set_null_illegal_pointers() void set_null_illegal_pointers(os_boolean); Provides a convenient way to set null_illegal_pointers mode for every segment in the specified database. If the argument is nonzero (true), it loops over every segment, including internal segments, enabling null_illegal_pointers. It also enables default_null_illegal_pointers mode for the specified database. If the argument is 0 (false), it disables null_illegal_pointers mode for every segment and disables default_null_illegal_pointers mode for the specified database. See os_segment::set_null_illegal_pointers() on page 361. os_database::set_schema_database() void set_schema_database(os_database& schema_database); If you move a schema database, you must use os_database::set_schema_ database( ) or the ObjectStore utility ossetrsp to inform ObjectStore of the schema database’s new path name. Calling this function establishes schema_database as the schema database for this. You must invoke this function outside any transaction. If you copy the schema database with an operating system command or an ObjectStore utility, you can also use os_database::set_schema_database( ) to establish the copy as the schema database for this. If schema_database is not the result of copying or moving a database that has served as schema database for this, err_schema_database is signaled. os_database::set_size() os_unsigned_int64 set_size(os_unsigned_int64 n_bytes); Specifies the size in n_bytes of the database represented by the this argument and returns the new size. If the database’s could not be changed (for example, this database is a rawfs database or n_bytes would shrink the database), the size of the database is unchanged, and the function returns the old size. The new size can be smaller than the requested size if there was not enough disk space available. This function can be called outside a transaction. The set_size() function can be used to presize database files in order to minimize fragmentation. For more information, see Managing Database Fragmentation in Chapter 1 of Managing ObjectStore. 170 C++ A P I Reference Chapter 2: Class Library os_database::set_size_in_sectors() os_unsigned_int32 set_size_in_sectors( os_unsigned_int32 n_sectors); Specifies the size in n_sectors of the database represented by the this argument and returns the new size. A sector is 512 bytes. If the database’s could not be changed (for example, this database is a rawfs database or n_sectors would shrink the database), the size of the database is unchanged, and the function returns the old size. The new size can be smaller than the requested size if there was not enough disk space available. This function can be called outside a transaction. The set_size_in_sectors() function can be used to presize database files in order to minimize fragmentation. For more information, see Managing Database Fragmentation in Chapter 1 of Managing ObjectStore. os_database::size() os_unsigned_int32 size( ) const; Returns the size in bytes of the specified database. If this number cannot be represented in 32 bits, err_misc is signaled. os_database::size_in_sectors() os_unsigned_int32 size_in_sectors( ) const; Returns the size in sectors of the specified database. If this number cannot be represented in 32 bits, err_misc is signaled. os_database::time_created() os_unixtime_t time_created( ) const; Returns the time at which the database was created. Release 6.3 171 os_database_root os_database_root An object can be used as a database entry point if you associate a string with it by using a root — an instance of the system-supplied class os_database_root. Each root’s sole purpose is to associate an object with a name. After the association is made, you can retrieve a pointer to the object by performing a look-up on the name using a member function of the class os_database. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_database_root::destroy() void destroy(); Destroys the persistent root of the database for which the function is called. You cannot use ::operator delete() to destroy a persistent root. os_database_root::find() static os_database_root* find(char* name, os_database* db); Returns a pointer to the root in the specified database with the specified name. Returns 0 if not found. os_database_root::get_name() const char* get_name( ) const; Returns the name associated with the os_database_root for which the function is called. os_database_root::get_typespec() const os_typespec* get_typespec( ); Returns a pointer to the typespec associated with the os_database_root for which the function is called (the typespec last passed to set_value( ) for the root). os_database_root::get_value() void* get_value(os_typespec* typespec = 0); Returns a pointer to the entry-point object associated with the os_database_root for which the function is called. If an entry-point object was never set, this function returns 0; see os_database_root::set_value() on page 174. The return value is typed as void*, so a cast might be necessary when you use it. If typespec does not match the typespec argument specified with os_database_ root::set_value(), err_typespec_mismatch is signaled. Note that this exception 172 C++ A P I Reference Chapter 2: Class Library is signaled if and only if the specified typespec does not match the stored typespec; the actual type of the entry-point object is not checked. os_database_root::release_pointer() void release_pointer(); Releases the pointer specified by the implicit this argument. When an application calls a function that returns an os_database_root pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. When the application calls release_pointer(), ObjectStore decrements the use count for an ObjectStore object. When the last pointer is released, the count reaches 0 and the os_database_root object is deleted. See the following for related information: • The C++ A P I User Guide discusses how to release pointers. • You can also release os_database_root pointers when they go out of scope; see os_release_root_pointer on page 314. • See os_database_root::retain_pointer() on page 173 for information about retaining os_database_root pointers. os_database_root::retain_pointer() void retain_pointer(); Retains the pointer specified by the this argument. When an application calls a function that returns an os_database_root pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that currently are in use. The application calls os_database_root::release_ pointer() when it no longer needs the pointer, thus releasing it and decrementing the use count. When the application calls retain_pointer(), ObjectStore increments the use count for an os_database_root object. Calling retain_pointer() ensures that the pointer is retained even when another part of the application releases it. For information about using retain_pointer(), see the C++ A P I User Guide. See also os_database_root::release_pointer() on page 173. Release 6.3 173 os_database_root os_database_root::set_value() void set_value(void* new_value, os_typespec* typespec = 0); Establishes the object pointed to by new_value as the entry-point object associated with the os_database_root for which the function is called. If new_value points to transient memory or memory in a database other than the one containing the specified os_database_root, err_invalid_root_value is signaled. The typespec argument should designate the type of object pointed to by new_value. The typespec (if specified) is stored for later use by os_database_root::get_value( ). See os_ database_root::get_value() on page 172. os_database_root::~os_database_root() ~os_database_root( ); Called when a transient object of the class os_database_root is deleted. The destructor cannot delete a persistent root or its name (a persistent char*). 174 C++ A P I Reference Chapter 2: Class Library os_database_schema This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a database schema. os_database_schema is derived from os_schema. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_database_schema::get() static const os_database_schema& get(const os_database& db); Returns the schema of the specified database. Signals err_no_schema if the specified database has no schema installed. os_database_schema::get_for_update() static os_database_schema& get_for_update( const os_database& db ); Returns the schema of the specified database. Signals err_no_schema if the specified database has no schema installed. This differs from get( ) in that the return value is a reference to a non-const os_database_schema rather than a const os_ database_schema. os_database_schema::install() void install(os_schema& new_schema); Installs the classes in new_schema in the database schema specified by this. Release 6.3 175 os_Database_table os_Database_table The database table records the mapping between predump objects and postload objects. It stores sets of various kinds of fixups as well as the set of objects for which object forms should not be generated. You can obtain the one and only instance of this class with the static member get(). os_Database_table::find_reference() os_Dumper_reference find_reference ( const os_Dumper_reference given_reference ) const; Finds the postload object corresponding to a given predump object. Both objects are specified with instances of os_Dumper_reference. The given_reference argument refers to the predump object. The returned reference refers to the corresponding postload object. If there is no object that corresponds to the referent of given_reference, a null reference is returned. If given_reference is NULL, a null reference is returned. os_Database_table::get() static os_Database_table& get (); Returns a reference to the one and only database table. os_Database_table::insert() void insert ( const os_Dumper_reference source, const os_Dumper_reference target, const os_type& referent_type ); Inserts a mapping record that associates a predump object with a postload object. Typically, you call this from type_loader::create(). The source argument is a dumper reference to the predump object. target is a dumper reference to the postload object. referent_type refers to an os_type representing the type of the object. Overloadings The following overloadings are supported: void insert ( os_Reference_fixup_kind::Kind kind, const os_Dumper_reference ref, const os_Dumper_reference referent_original_location ); Inserts a fixup record that instructs the loader to adjust the pointer, C++ reference, or ObjectStore reference referred to by ref. The loader makes the adjustment after loading all object forms and before loading any fixup forms. Typically, you call this from type_loader::fixup(). 176 C++ A P I Reference Chapter 2: Class Library kind is one of the following: • os_Reference_fixup_kind::pointer • os_Reference_fixup_kind::reference_local • os_Reference_fixup_kind::reference_this_db • os_Reference_fixup_kind::reference • os_Reference_fixup_kind::reference_protected_local • os_Reference_fixup_kind::reference_protected The reference argument refers to the pointer or reference to be fixed up. The referent_original_location refers to the predump referent of the pointer or reference to be fixed up. void insert ( os_segment& seg, const os_Fixup& fixup ); Associates the specified fixup dumper with the specified segment. Each fixup dumper associated with a segment is invoked after all object forms for that segment have been dumped. Typically, you call this function from type_dumper::operator ()(). void insert ( os_database& db, const os_Fixup& fixup ); Associates the specified fixup dumper with the specified database. Each fixup dumper associated with a database is invoked after all object forms for that database have been dumped. Typically, you call this function from type_dumper::operator ()(). void insert ( const os_Fixup& fixup ); Associates the specified fixup dumper with the entire dump. Each fixup dumper associated with the entire dump is invoked after all object forms for the dump have been dumped. Typically, you call this function from type_dumper::operator ()(). void insert ( const os_Dumper_reference ignored_object ); Inserts the specified object into the ignored set. If the object is already in the ignored set, the insertion is silently ignored. Before dumping an object, the dumper checks to see whether the object is in the ignored set. If it is, the dumper does not dump the object. ignored_object is a dumper reference to the object that should not be dumped. os_Database_table::is_ignored() os_boolean is_ignored (const os_Dumper_reference obj) const; Returns nonzero if obj is in the ignored set; returns 0 otherwise. Release 6.3 177 os_dbutil os_dbutil The database utility API provides C++ functions corresponding to the utilities documented in Managing ObjectStore. You can use them as a basis for writing your own database utilities and tools. All the functions in this facility are members of the class os_dbutil. Call the following function before using any other members of os_dbutil: static void os_dbutil::initialize( ); You need to call this function only once in each application. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_dbutil::chgrp() static void chgrp( const char* pathname, const char* gname ); Changes the primary group of the rawfs directory or database whose name is pathname. The gname argument is the name of the new group. This function does not check for transaction consistency. For information about using an ObjectStore utility to change the group name, see oschgrp in Managing ObjectStore. os_dbutil::chmod() static void chmod( const char* pathname, const os_unsigned_int32 mode ); Changes the protections on the rawfs database or directory whose name is pathname. The mode argument specifies the new protections. This function does not check for transaction consistency. For information about using an ObjectStore utility to change permissions, see oschmod in Managing ObjectStore. os_dbutil::chown() static void chown( const char* pathname, const char* uname ); Changes the owner of the rawfs directory or database whose name is pathname. The uname argument is the user name of the new owner. This function does not check for transaction consistency. 178 C++ A P I Reference Chapter 2: Class Library For information about using an ObjectStore utility to change ownership, see oschown in Managing ObjectStore. os_dbutil::close_all_connections() static void close_all_connections(); Closes the application’s connections to the cache manager and to all ObjectStore servers. os_dbutil::close_all_server_connections() static void close_all_server_connections( ); Closes the application’s connections to all ObjectStore servers. os_dbutil::close_server_connection() static void close_server_connection(const char* hostname); Closes the application’s connection to the ObjectStore server running on the machine named hostname. os_dbutil::cmgr_remove_file() static char* cmgr_remove_file( const char* hostname, os_int32 cm_version_number ); Makes the cache manager on the machine with the specified hostname delete all the cache and commseg files that are not in use by any client. The cm_version_number argument must match the cache manager’s version number. Returns a pointer to the result message string. For information about using an ObjectStore utility to remove cache and commseg files, see oscmrf in Managing ObjectStore. os_dbutil::cmgr_shutdown() static char* cmgr_shutdown( const char* hostname, os_int32 cm_version_number ); Shuts down the cache manager running on the machine with the specified hostname. The cm_version_number argument must match the cache manager’s version number. Returns a pointer to the result message string. For information about using an ObjectStore utility to shut down the cache manager, see oscmshtd in Managing ObjectStore. os_dbutil::cmgr_stat() static void cmgr_stat( const char* hostname, os_int32 cm_version_number, Release 6.3 179 os_dbutil os_cmgr_stat* cmstat_data ); Gets information for the cache manager on the machine with the specified hostname. The cm_version_number argument must match the cache manager’s version number. The cmstat_data argument points to an instance of os_cmgr_stat allocated by the caller, using the no-argument constructor. The class os_cmgr_stat has the following public data members: os_unsigned_int32 struct_version; os_unsigned_int32 major_version; os_unsigned_int32 minor_version; os_unsigned_int32 pid; char *executable_name; char *host_name; os_unixtime_t start_time; os_int32 soft_limit; os_int32 hard_limit; os_int32 free_allocated; os_int32 used_allocated; os_int32 n_clients; os_cmgr_stat_client *per_client; /* array */ os_int32 n_servers; os_cmgr_stat_svr *per_server; /* array */ os_int32 n_cache_file_usage; os_cmgr_stat_file_usage *cache_file_usage; /* array */ os_int32 n_comseg_file_usage; os_cmgr_stat_file_usage *comseg_file_usage; /* array */ char *cback_queue; char *extra; The constructor sets struct_version to the value of os_free_blocks_version in the dbutil.hh file included by your application. If this version is different from that used by the library, err_misc is signaled. The constructor initializes all other members to 0. Within the results returned by os_dbutil::cmgr_stat, the information about each client is provided in an object of class os_cmgr_stat_client. A data member named notification, whose type is os_cmgr_stat_notification*, has been added to class os_cmgr_stat_client. The value of this pointer is 0 if this client is not using notifications because, for example, the client has not yet called os_notification::subscribe() or os_ notification::_get_fd(). Otherwise, the value is a pointer to an object of the class os_cmgr_stat_ notification. 180 C++ A P I Reference Chapter 2: Class Library The class os_cmgr_stat_client has the following public data members: os_unsigned_int32 struct_version; os_unsigned_int32 queue_size; os_unsigned_int32 n_queued; os_unsigned_int32 n_received; os_unsigned_int32 queue_overflows; os_unsigned_int32 thread_state; os_int32 pid; os_unsigned_int32 euid; char* name; os_int32 major_version; os_int32 minor_version; os_int32 commseg; The class os_cmgr_stat_svr has the following public data members: os_unsigned_int32 struct_version; char *host_name; os_int32 client_pid; char *status_str; The class os_cmgr_stat_file_usage has the following public data members: os_unsigned_int32 struct_version; char *file_name; os_unsigned_int32 file_length; os_boolean is_free; For information about using an ObjectStore utility to get information about the cache manager, see oscmstat in Managing ObjectStore. os_dbutil::compare_schemas() static os_boolean compare_schemas( const os_database* db1, const os_database* db2, os_boolean verbose = 1 os_boolean layout_only = 0 ); Compares the schemas of db1 and db2. Returns nonzero if the schemas are incompatible, and 0 otherwise. Each database can contain an application schema, a compilation schema, or a database schema. If the database contains a database schema, it can be local or remote. If verbose is nonzero, the function issues a message to standard output that describes any incompatibility. If layout_only is nonzero, this overloading compares only the layouts of persistent classes in the databases. Release 6.3 181 os_dbutil For information about using an ObjectStore utility to compare schema, see osscheq in Managing ObjectStore. os_dbutil::copy_database() static void copy_database( const char* src_database_name, const char* dest_database_name ); Copies the database named src_database_name and names the copy dest_ database_name. The database is copied in a separate thread, using a separate transaction. If there is already a database named dest_database_name, it is silently overwritten. If the copy fails for any reason, this function signals an exception. For information about using an ObjectStore utility to copy a database, see oscopy in Managing ObjectStore. os_dbutil::disk_free() static void disk_free( const char*hostname, os_free_blocks* blocks ); Gets disk space usage in the rawfs managed by the ObjectStore server on the machine named hostname. The blocks argument points to an instance of os_free_ blocks allocated by the caller, using the no-argument constructor. The class os_free_blocks has the following public data members: os_unsigned_int32 struct_version; os_unsigned_int32 free_blocks; os_unsigned_int32 file_system_size; os_unsigned_int32 used_blocks; disk_free( ) sets the values of these data members for the instance of os_free_ blocks pointed to by the blocks argument. The os_free_blocks constructor sets struct_version to the value of os_free_ blocks_version in the dbutil.hh file included by your application. If this version is different from that used by the library, err_misc is signaled. For information about using an ObjectStore utility to get disk space information, see osdf in Managing ObjectStore. os_dbutil::expand_global() static os_char_p* expand_global( char const* glob_path, os_unsigned_int32& n_entries ); Returns an array of pointers to rawfs path names matching glob_path by expanding glob_path’s wildcards (*, ?, {}, and [ ]). The n_entries argument is set to refer to 182 C++ A P I Reference Chapter 2: Class Library the number of path names returned. It is the caller’s responsibility to delete the array and path names when they are no longer needed. For information about using an ObjectStore utility to expand a pathname, see osglob in Managing ObjectStore. os_dbutil::file_db_pathname() static os_boolean file_db_pathname(const char *pathname); Returns nonzero (true) if pathname is a file-system pathname and 0 (false) if it is a rawfs pathname. See also os_dbutil::split_pathname() on page 191. os_dbutil::get_client_name() static char const* get_client_name( ); Returns the pointer last passed to set_client_name( ). If there was no prior call to set_client_name( ), 0 is returned. This function does not allocate any memory. os_dbutil::get_sector_size() static os_unsigned_int32 get_sector_size( ); Returns 512, the size of a sector in bytes. Certain ObjectStore utilities (for example, ossvrstat) report some of their results in numbers of sectors, and some ObjectStore server parameters are specified in sectors. os_dbutil::hostof() static const char* hostof(const char *pathname); Returns the name of the host of the database specified by pathname. For information about using an ObjectStore utility to get the name of the host of a database, see oshostof in Managing ObjectStore. os_dbutil::initialize() static void initialize( ); Call this before using any other members of os_dbutil. You need to call this function only once in each application. os_dbutil::install_backrest_control_c_handler() void install_backrest_control_c_handler( ); Call this function to install the control-c handler for backup-and-restore (backrest) operations. The backrest control-c handler ensures that when the application is killed with a control-c, os_archive, os_backup, and os_replicator processes will complete the current snapshot and terminate cleanly. For os_recover and os_ restore processes the current restore or recover transaction will be aborted. Release 6.3 183 os_dbutil This function should not be called when an application has its own control-c handler installed. For more information about ObjectStore’s backup-and-restore API, see the following: • os_archiver on page 104 • os_backup on page 110 • os_recover on page 287 • os_replicator on page 316 • os_restore on page 323 os_dbutil::list_directory() static os_rawfs_entry_p* list_directory( const char* rawfs_path, os_unsigned_int32& n_entries ); Lists the contents of the rawfs directory named rawfs_path. Returns an array of pointers to os_rawfs_entry_p objects. The n_entries argument is set to the number of elements in the returned array. If rawfs_path does not specify the location of a directory, err_not_a_directory is signaled. It is the caller’s responsibility to delete the array and os_rawfs_entry_p objects when they are no longer needed. For information about using an ObjectStore utility to list a rawfs directory, see osls in Managing ObjectStore. os_dbutil::make_link() static void make_link( const char* target_name, const char* link_name ); Makes a rawfs soft link. The target_name argument is the path pointed to by the link, and link_name is the path name of the link. Signals err_database_exists or err_directory_exists if link_name already points to an existing database or directory. A rawfs can have symbolic links pointing within itself or to another ObjectStore server’s rawfs. The server follows symbolic links within its rawfs for all os_dbutil members that pass path name arguments, unless otherwise specified by a function’s description; only os_dbutil::stat( ) can override this behavior. All members passing path name arguments also follow cross-server links on the application side, unless otherwise specified by a function’s description. A rawfs symbolic link always has the ownership and the permissions of the parent directory. For information about using an ObjectStore utility to create a rawfs link, see osln in Managing ObjectStore. 184 C++ A P I Reference Chapter 2: Class Library os_dbutil::mkdir() static void mkdir( const char* rawfs_path, const os_unsigned_int32 mode, os_boolean create_missing_dirs = 0 ); Makes a rawfs directory whose path is rawfs_path. The new directory’s protection is specified by mode. If create_missing_dirs is nonzero, creates the missing intermediate directories. Signals err_directory_not_found if create_missing_ dirs is 0 and there are missing intermediate directories. Signals err_directory_ exists if there is already a directory with the specified path. Signals err_database_ exists if there is already a database with the specified path. For information about using an ObjectStore utility to create a rawfs directory, see osmkdir in Managing ObjectStore. os_dbutil::osdbcontrol() static void osdbcontrol( const char** pathnames, os_unsigned_int32 n_pathnames, os_dbcontrol_options& options, os_dbcontrol_result* results = 0 ); Performs various operations on a list of databases where n_pathnames is the number of database names in the array. options is a reference to an instance of os_ dbcontrol_options allocated by the user using the zero-argument constructor. If os_dbcontrol_options is a flag_status or flag_statistics request and results is not null, the results from the request will be saved in the os_dbcontrol_ result object pointed to by result. See os_dbcontrol_result for additional information. Calling os_dbutil::osdbcontrol with the flag_offline option from an application that currently has the database open will result in the application hanging. This is because the processing of the offline request will first wait for all users to close the database, including the outstanding open from the same application that issued the offline request. The os_dbcontrol_options class has the following public data members os_boolean flag_offline Set database offline; corresponds to the osdbcontrol utility’s -offline option. os_boolean flag_online Set database online; corresponds to the osdbcontrol utility’s -online option. os_boolean flag_kill_clients Disconnect all clients using the database before setting offline; corresponds to the osdbcontrol utility’s -kill_clients option. os_boolean flag_status Release 6.3 Display database status; corresponds to the osdbcontrol utility’s -status option. 185 os_dbutil os_boolean flag_statistics Display database statistics; corresponds to the osdbcontrol utility’s -statistics option. os_boolean flag_do_print Print status or statistic information, default is TRUE, which specifies always print. char* reason_str Append a reason string to the offline exception message. The string is deleted in ~os_ dbcontrol_options(). The os_dbcontrol_options class has the following public method: void reset() Reset all the options. The results of flag_status and flag_statistics requests are returned in the os_ dbcontrol_result object pointed to by the results argument passed to os_ dbcontrol(). The os_dbcontrol_option data member flag_do_print should be set to zero to suppress os_dbutil::os_dbcontrol from printing the status and statistics information. The os_dbcontrol_result class has the following public data members: os_unsigned_int32 n_info Number of database names os_db_statistic_info** statistic_info Array of statistics information os_db_status_info ** status_info Array of status information char ** pathnames Array of database names The os_dbcontrol_result class has the following public methods: void format_and_print_status(os_unsigned_int32 index); The above method formats and prints status information for the database specified by index in the database names array . void format_and_print_statistics(os_unsigned_int32 index); The above method formats and prints statistic information for the database specified by index in the database names array. void initialize( const char** pathns, os_unsigned_int32 n_pathns, const os_dbcontrol_options& options ); The above method initializes all data members. It is always called by os_ dbutil::osdbcontrol(). For information about using an ObjectStore utility that corresponds to os_ dbutil::osdbcontrol(), see osdbcontrol in Managing ObjectStore. os_dbutil::ossize() static os_int32 ossize( const char* db_path, const os_size_options* opts 186 C++ A P I Reference Chapter 2: Class Library ); Prints to standard output the size of the database whose name is db_path. The opts argument points to an instance of os_size_options that has been allocated by the caller with the no-argument constructor. This function returns 0 for success, –1 for failure. If OS__DBUTIL_NO_MVCC is set, this function opens the database for read only, rather than for MVCC (the default). The class os_size_options has the following public data members: os_unsigned_int32 struct_version; os_boolean flag_all; /* -a */ os_boolean flag_segments; os_boolean flag_total_database; os_boolean flag_fragmentation; /* -f */ os_unsigned_int32 one_segment_number; /* -n */ /* -c */ /* -C */ os_boolean flag_every_object; /* -o */ char flag_summary_order; /* -s ‘s’=space ‘n’=number ‘t’=typename */ os_boolean flag_upgrade_rw; /* -u */ os_boolean flag_internal_segments; /* -0 */ os_boolean flag_access_control; /* -A */ The constructor sets struct_version to the value of os_size_options_version in the dbutil.hh file included by your application. If this version is different from that used by the library, err_misc is signaled. The constructor initializes all other members to 0. For information about using an ObjectStore utility to get the size of a database, see ossize in Managing ObjectStore. Note that each public data member of os_size_ options corresponds to an option of ossize. os_dbutil::osverifydb() static os_unsigned_int32 osverifydb( const char* db_path, os_verifydb_options* opt = 0 ); Prints to standard output all pointers and references in the database named db_path. The opt argument points to an instance of os_verifydb_options that has been allocated by the caller with the no-argument constructor.The function returns 0 for success, 1 for failure. Note that you must call os_collection::initialize( ) and os_ mop::initialize( ) before calling this function. If OS_ _DBUTIL_NO_MVCC is set, this function opens the database for read only, rather than for MVCC (the default). Release 6.3 187 os_dbutil The class os_verifydb_options has the following public data members: os_boolean verify_segment_zero; /* verify the schema segment */ os_boolean verify_collections; /* check all top-level collections */ os_boolean verify_pointer_verbose; /* print pointers as they are verified */ os_boolean verify_object_verbose; /* print objects as they are verified */ os_boolean verify_references; /* check all OS references */ os_int32 segment_error_limit; /* maximum errors per segment */ os_boolean print_tag_on_errors; /* print out the tag value on error */ const void* track_object_ptr; /* Track object identified by pointer */ const char* track_object_ref_ string; /* Track the object identified by the reference string. */ enum { default_action, ask_action, null_action } illegal_pointer_action; For information about using an ObjectStore utility to verify pointers and references in a database, see osverifydb in Managing ObjectStore. os_dbutil::osverifydb_one_segment() static os_unsigned_int32 osverifydb_one_segment( const char* db_path, os_unsigned_int32 seg_num, os_unsigned_int32 cluster_start_number = 0, os_unsigned_int32 cluster_end_number = 0, os_unsigned_int32 starting_offset = 0, os_unsigned_int32 ending_offset = 0, os_verifydb_options* opt = 0 ); Prints to standard output all pointers and references in seg_num in the database named db_path. The cluster_start_number and cluster_end_number arguments limit verification to a range of clusters in seg_num. To limit verification to one cluster, specify the same cluster number for both cluster_start_number and cluster_ end_number. If you omit these arguments or specify 0 for each, all clusters within the segment are verified. The offset items specify the starting and ending offsets (in bytes) in each cluster within seg_num in which verification is to occur. If starting_offset is not specified, it defaults to 0. This means verification starts at the beginning of the segment. Similarly, if ending_offset is not specified, it defaults to 0. This means verify to the end of the segment. The opt argument points to an instance of os_ verifydb_options that has been allocated by the caller with the no-argument constructor. The function returns 0 for success, 1 for failure. You must call os_collection::initialize() and os_mop::initialize() before calling this function. If OS_ _DBUTIL_NO_MVCC is set, this function opens the database for read only, rather than for MVCC (the default). 188 C++ A P I Reference Chapter 2: Class Library The class os_verifydb_options has the following public data members: os_boolean verify_segment_zero; /* verify the schema segment */ os_boolean verify_collections; /* check all top-level collections */ os_boolean verify_pointer_verbose /* print pointers as they are verified */ os_boolean verify_object_verbose /* print objects as they are verified */ os_boolean verify_references /* check all OS references */ os_int32 segment_error_limit /* maximum errors per segment */ os_boolean print_tag_on_errors /* print out the tag value on error */ const void* track_object_ptr /* Track object identified by pointer */ const char* track_object_ref_string /* Track the object identified by the reference string. */ enum { default_action, ask_action, null_action } illegal_pointer_action; For information about using an ObjectStore utility to verify pointers and references in a database, see osverifydb in Managing ObjectStore. os_dbutil::rehost_all_links() static void rehost_all_links( const char* server_host, const char* old_host, const char* new_host ); Changes the hosts of specified rawfs links. The server_host argument specifies the host containing the links to be changed. All links pointing to old_host are changed to point to new_host. On some operating systems, you must have special privileges to use this function. For information about using an ObjectStore utility to change the hosts of rawfs links, see oschhost in Managing ObjectStore. os_dbutil::rehost_link() static void rehost_link( const char* pathname, const char* new_host ); Changes the host to which a rawfs link points. The pathname argument must specify a symbolic link, otherwise err_not_a_link is signaled. The new_host argument specifies the new ObjectStore server host. For information about using an ObjectStore utility to change the host of a rawfs link, see oschhost in Managing ObjectStore. Release 6.3 189 os_dbutil os_dbutil::remove() static void remove(const char* path); Removes the database or rawfs link with the specified name. If path names a link, the link is removed but the target of the link is not. If path names a directory, it is not removed. Signals err_not_a_database if path exists in a rawfs but is not a database. Signals err_file_error when a problem is reported by the ObjectStore server host’s file system. Signals err_file_not_local if the file is not local to this server. For information about using an ObjectStore utility to remove a database or rawfs link, see osrm in Managing ObjectStore. os_dbutil::rename() static void rename( const char* source, const char* target ); Renames the rawfs database or directory. The source argument is the old name and target is the new name. Signals err_cross_server_rename if source and target are on different ObjectStore servers. Signals err_invalid_rename if the operation makes a directory its own descendant. Signals err_database_exists if a database named target already exists. Signals err_directory_exists if a directory named target already exists. For information about using an ObjectStore utility to rename (that is, move) a rawfs database or directory, see osmv in Managing ObjectStore. os_dbutil::rmdir() static void rmdir(const char* rawfs_path); Removes the rawfs directory with the specified path. Signals err_directory_not_ empty if the directory still contains databases. Signals err_not_a_directory if the argument does not specify a directory path. For information about using an ObjectStore utility to remove a rawfs directory, see osrmdir in Managing ObjectStore. os_dbutil::set_application_schema_path() static char* set_application_schema_path( const char* executable_path, const char* new_schema_path ); Finds or sets an executable’s application schema database. The executable_path argument specifies the executable. The new_schema_path argument is either the new schema’s path name or 0. If new_schema_path is 0, the function returns new storage containing the current path name. If new_schema_path is nonzero, the function returns 0. 190 C++ A P I Reference Chapter 2: Class Library For information about using an ObjectStore utility to set an executable’s application schema database, see ossetasp in Managing ObjectStore. os_dbutil::set_client_name() static void set_client_name(const char* name); Sets the client name string for message printing. os_dbutil::split_pathname() static os_boolean split_pathname( const char *input_pathname_arg, os_char_p *server_name, os_char_p *filename); Returns nonzero (true) if input_pathname_arg is a file-system pathname and 0 (false) if it is a rawfs pathname. If input_pathname_arg begins with a host name (followed by : or ::), the host name is copied to server_name, and the remainder of the path is copied to filename. If there is no host name at the head of input_ pathname_arg, ObjectStore sets server_name to null and copies input_pathname_ arg to filename. ObjectStore allocates storage for the server_name and filename arguments. It is the user’s responsibility to deallocate the storage when it is no longer needed. See also os_dbutil::file_db_pathname() on page 183. os_dbutil::start_backrest_logging() static void start_backrest_logging( const char* log_name, os_boolean append = 0, os_boolean write_log_only = 0 ); Directs backup-and-restore messages to the specified backrest log file. The log_name argument specifies the log file to which messages are written. If the append argument is set to true, all output messages will be appended to the log file. If the write_log_only argument is set to true, all output messages will be written to the log file and none will be directed to stdout. This function must be called before starting any backup-and-restore operations. For information about stopping output to the backrest log, see os_dbutil::stop_ backrest_logging() on page 192. For more information about ObjectStore’s backup-and-restore API, see the following: • os_archiver on page 104 • os_backup on page 110 • os_recover on page 287 • os_replicator on page 316 • os_restore on page 323 Release 6.3 191 os_dbutil os_dbutil::stat() static os_rawfs_entry* stat( const char* rawfs_path, const os_boolean b_chase_links = 1 ); Gets information about a rawfs path name. If b_chase_links is false and the path is a link, the ObjectStore server does not follow it. The server still follows intrarawfs links for the intermediate parts of the path. Returns a pointer to an os_rawfs_entry to be destroyed by the caller, or 0 on error. For information about using an ObjectStore utility to get information about a rawfs pathname, see ostest and osls in Managing ObjectStore. os_dbutil::stop_backrest_logging() static void stop_backrest_logging(); Stops the writing of backup-and-restore messages to the backrest log file. For information about starting output to the backrest log, see os_dbutil::start_ backrest_logging() on page 191. For more information about ObjectStore’s backup-and-restore API, see the following: • os_archiver on page 104 • os_backup on page 110 • os_recover on page 287 • os_replicator on page 316 • os_restore on page 323 os_dbutil::svr_checkpoint() static os_boolean svr_checkpoint( const char* hostname ); Makes the specified ObjectStore server take a checkpoint asynchronously. Returns nonzero when successful, 0 or an exception on failure. For information about using an ObjectStore utility to make a server take a checkpoint, see ossvrchkpt in Managing ObjectStore. os_dbutil::svr_client_kill() static os_boolean svr_client_kill( const char* server_host, os_int32 client_pid, const char* client_name, const char* client_hostname, os_boolean all, os_int32& status ); 192 C++ A P I Reference Chapter 2: Class Library Kills one or all clients of the specified ObjectStore server. The function returns 0 (false) if it fails and nonzero (true) if it succeeds. The server_host argument is the name of the machine running the server. client_ pid is the process ID of the client to kill. client_name is the name of the client to kill. client_hostname is the name of the machine running the client to kill. If all is 1, all clients matching the specified criteria will be disconnected. If the function fails (that is, it returns 0), you can examine status to learn the reason. status is set to one of the following: Return value Meaning 1 The user was authorized to disconnect the specified clients. -1 The user was denied access. 0 No clients matched the specified criteria. 2 More than one client matched the specified criteria. For information about using an ObjectStore utility to disconnect a client, see ossvrclntkill in Managing ObjectStore. os_dbutil::svr_debug() static os_boolean svr_debug( const char *server_host, os_unsigned_int32 debug_level); Enables the output of debugging information for the server specified by server_ host. If successful, this function returns nonzero (true). Debugging information is directed to standard output. The debug_level argument is an integer in the range 0 - 9, which specifies the level of debugging information. The higher the number, the more information that is displayed. Specifying 0 disables debugging output. For information about using the ossvrdebug utility to enable debugging output, see ossvrdebug in Managing ObjectStore. os_dbutil::svr_machine() static const char* svr_machine( const char* p_server_host); Maps p_server_host (the name of a server) to the name of the machine on which the server runs. If p_server_host is a logical server name, os_dbutil::svr_ machine() returns the machine name from the SERVER declaration in the locator file. Otherwise, os_dbutil::svr_machine() returns p_server_host — that is, the name of the machine is the name of the server. For information about the SERVER declaration, see SERVER Declaration (ObjectStore-Managed Failover Only) in Chapter 2 of Managing ObjectStore. Note Release 6.3 You cannot use os_dbutil::svr_machine() to map a logical host name as used with Sun Clusters operating system to the name of the machine (cluster node) that is 193 os_dbutil currently handling network connections to that logical host name. The node that is currently being used can change at any time. os_dbutil::svr_ping() static char* svr_ping( const char* server_host, os_svr_ping_state& state ); Returns a pointer to the status message string. This function determines whether an ObjectStore server is running on the machine named server_host. The referent of state is set to one of the following global enumerators: • os_svr_ping_is_alive • os_svr_ping_not_reachable • os_svr_ping_no_such_host Returns a pointer to the status message string. The os_dbutil::svr_ping() function returns the enumerator os_svr_ping_is_ alive_as_failover_backup if it is possible that the ObjectStore server is running in backup failover mode. The heuristic for determining whether it possibly is running in backup mode is if the exception err_broken_connection is signaled while pinging a server and the current locator file indicates that the server is a member of a failover pair. For information about using an ObjectStore utility to ping a server, see ossvrping in Managing ObjectStore. os_dbutil::svr_shutdown() static os_boolean svr_shutdown( const char* server_host ); Shuts down the ObjectStore server on the machine named server_host. Returns nonzero for success, 0 otherwise. On some operating systems, you must have special privileges to use this function. For information about using an ObjectStore utility to shut down a server, see ossvrshtd in Managing ObjectStore. os_dbutil::svr_stat() static void svr_stat( const char* server_host, os_unsigned_int32 request_bits, os_svr_stat* svrstat_data ); Retrieves statistics for an ObjectStore server on server_host. 194 C++ A P I Reference Chapter 2: Class Library The request_bits argument specifies the information that is desired. Supply this argument by forming the bit-wise disjunction of zero or more of the following enumerators: • os_svr_stat::get_svr_rusage: displays server process information (UNIX only) • os_svr_stat::get_svr_meter_samples: displays performance meters for the specified server • os_svr_stat::get_svr_parameters : displays server parameter values • os_svr_stat::get_client_info_self: displays information about the client that called os_dbutil::svr_stat() • os_svr_stat::get_client_info_others: displays the state of each client that is connected to this server and shows any clients that are contending for locks • os_svr_stat::get_log_statistics: displays information about the server transaction log on this database • os_svr_stat::get_client_open_databases: displays information about databases open by each client connected to this server For each enumerator that is specified, the corresponding information is retrieved. (With ObjectStore/Single, only the get_svr_meter_samples and get_log_ statistics arguments are supported.) For each of the classes described in the following paragraphs, the constructor sets struct_version to the value in the dbutil.hh file included by your application. If this version is different from that used by the library, err_misc is signaled. The constructor initializes all other members to 0. svrstat_data points to an os_svr_stat object. The user allocates an instance of the os_svr_stat class by calling the no-argument constructor, os_svr_stat(). The os_ svr_stat class has the following public data members: os_unsigned_int32 struct_version; os_svr_stat_svr_header header; os_svr_stat_svr_parameters* svr_parameters; os_svr_stat_svr_rusage* svr_rusage; os_svr_stat_svr_meters* svr_meter_samples; os_unsigned_int32 n_meter_samples; os_svr_stat_client_info* client_info_self; os_svr_stat_client_info* client_info_others; os_unsigned_int32 n_clients; os_svr_stat_extension* p_extended_status; The os_dbutil::svr_stat() function allocates these and all other pointer-valued members of all classes mentioned in this section. The ~os_svr_stat() destructor deallocates them. The class os_svr_stat_svr_header has the following public data members: os_unsigned_int32 Release 6.3 struct_version; 195 os_dbutil char* os_release_name; os_unsigned_int32 server_major_version; os_unsigned_int32 server_minor_version; char* compilation; The class os_svr_stat_svr_parameters has the following public data members. (There is no member corresponding to the Failover Script server parameter.) 196 os_unsigned_int32 struct_version; os_boolean allow_nfs_locks; os_boolean allow_remote_database_access; os_boolean allow_shared_mem_usage; os_int32* authentication_list; os_unsigned_int32 cache_mgr_ping_time; os_svr_stat_growth_policy cluster_growth_policy; os_unsigned_int32 current_log_size_sectors; os_svr_stat_growth_policy database_file_growth_policy; os_int32 deadlock_strategy; os_unsigned_int32 direct_to_segment_threshold; char* failover_heartbeat_file_pathname; os_unsigned_int32 failover_heartbeat_time os_unsigned_int32 growth_log_data_sectors; os_unsigned_int32 growth_log_record_sectors; char* identical_pathnames_on_failover_server; os_unsigned_int32 initial_log_data_sectors; os_unsigned_int32 initial_log_record_sectors; os_unsigned_int32 log_buffer_sectors; char* log_path; os_unsigned_int32 max_aio_threads; os_unsigned_int32 max_connect_memory_usage; os_unsigned_int32 max_data_propagation_threshold; os_unsigned_int32 max_memory_usage; os_unsigned_int32 max_msg_buffer_sectors; os_unsigned_int32 max_msg_buffers; os_unsigned_int32 max_propagation_sectors; os_unsigned_int32 max_two_phase_delay; os_unsigned_int32 n_authentications; char* parameter_file; os_int32 rawfs_db_expiration_time; os_svr_stat_growth_policy rawfs_partition_growth_policy; os_unsigned_int32 remote_db_grow_reserve; os_int32 restricted_file_db_access_only; os_unsigned_int32 sleep_time_between_2p_outcomes; C++ A P I Reference Chapter 2: Class Library os_unsigned_int32 sleep_time_between_propagates; os_unsigned_int32 tcp_recv_buffer_size; os_unsigned_int32 tcp_send_buffer_size; os_unsigned_int32 write_buffer_sectors; The os_svr_stat_growth_policy class has the following public data members: os_unsigned_int32* growth; os_boolean* percentage; os_unsigned_int32* limit; The members have the following meanings: • growth specifies the number of sectors, or the percentage, to grow • percentage specifies whether the growth member represents an absolute size (false) or a percentage (true) • limit specifies the size limit that determines whether or not this growth policy should be applied. It applies only if the current size of the cluster, database file, or rawfs partition is less than or equal to the value specified for limit. Each of the members (growth, percentage, and limit) is an array. A growth policy consists of a sequence of triplets, with one element from each array making up a triplet. Thus, { growth[0], percentage[0], limit[0] } is the first policy element, { growth[1], percentage[1], limit[1] } is the second if there are at least two, and so on. The end of the array is signalled when the value of limit[n] is the one’s complement of zero (~0). The os_svr_stat_svr_rusage class has the following public data members: os_unsigned_int32 struct_version; os_timesecs ru_utime; /* user time used */ os_timesecs ru_stime; /* system time used */ os_int32 ru_maxrss; /* maximum resident set size */ os_int32 ru_ixrss; /* integral shared memory size */ os_int32 ru_idrss; /* integral unshared data size */ os_int32 ru_isrss; /* integral unshared stack size */ os_int32 ru_minflt; /* page reclaims */ os_int32 ru_majflt; /* page faults */ os_int32 ru_nswap; /* swaps */ os_int32 ru_inblock; /* block input operations */ os_int32 ru_oublock; /* block output operations */ os_int32 ru_msgsnd; /* messages sent */ os_int32 ru_msgrcv; /* messages received */ os_int32 ru_nsignals; /* signals received */ os_int32 ru_nvcsw; /* voluntary context switches */ os_int32 ru_nivcsw; /* involuntary context switches */ The classes os_svr_stat_svr_meters and os_svr_stat_client_meters each have data members named n_notifies_sent and n_notifies_received. All four Release 6.3 197 os_dbutil are of type os_unsigned_int32. They give the total number of notifications that have been received by the ObjectStore server and the number that have been sent by the server, giving the total for the server as a whole and the total for each client. The class os_svr_stat_svr_meters has the following public data members: os_unsigned_int32 198 struct_version; os_boolean valid; os_unsigned_int32 n_minutes; os_unsigned_int32 n_receive_msgs; os_unsigned_int32 n_callback_msgs; os_unsigned_int32 n_callback_sectors_requested; os_unsigned_int32 n_callback_sectors_succeeded; os_unsigned_int32 n_sectors_read; os_unsigned_int32 n_sectors_written; os_unsigned_int32 n_commit; os_unsigned_int32 n_phase_2_commit; os_unsigned_int32 n_readonly_commit; os_unsigned_int32 n_abort; os_unsigned_int32 n_phase_2_abort; os_unsigned_int32 n_deadlocks; os_unsigned_int32 n_msg_buffer_waits; os_unsigned_int32 n_log_records; os_unsigned_int32 n_log_seg_switches; os_unsigned_int32 n_flush_log_data_writes; os_unsigned_int32 n_flush_log_record_writes; os_unsigned_int32 n_log_data_writes; os_unsigned_int32 n_log_record_writes; os_unsigned_int32 n_sectors_propagated; os_unsigned_int32 n_sectors_direct; os_unsigned_int32 n_do_some_propagation; os_unsigned_int32 n_notifies_sent; os_unsigned_int32 n_notifies_received; os_unsigned_int32 n_lock_waits; os_timesecs total_lock_wait_time; C++ A P I Reference Chapter 2: Class Library The class os_svr_stat_client_info has the following public data members: os_unsigned_int32 struct_version; os_svr_stat_client_process* process; os_svr_stat_client_state* state; os_svr_stat_client_meters* meters; The class os_svr_stat_open_database_info has the following public data members: os_unsigned_int32 struct_version; char* pathname; // Pathname of an open database os_unsigned_int32 when_open; // time (in time_t) when database was opened os_unsigned_int32 how_long_open; // Number of seconds open os_unsigned_int32 aio_thread_serial_number; // Which thread serves this DB os_boolean b_writable; // Open for writing os_boolean b_mvcc; // Open in MVCC mode os_boolean b_houdini; // What kind of database os_boolean b_rawhfs; // Where stored os_boolean b_read_locked; // Any read locks in this DB os_boolean b_write_locked; // Any write locks in this DB os_boolean b_read_owned; // Any read ownership in client cache os_boolean b_write_owned; // Any write ownership in client cache os_boolean b_used_in_transaction; // Current txn accessed this DB os_boolean b_mod_in_transaction; // Current txn modified this DB os_boolean b_mvcc_conflict; // Current txn conflicts with MVCC txn The class os_svr_stat_client_process has the following public data members: os_unsigned_int32 struct_version; char* host_name; os_unsigned_int32 process_id; char* client_name; os_unsigned_int32 client_id; The class os_svr_stat_client_state has the following public data members: Release 6.3 os_unsigned_int32 struct_version; os_client_state_type client_state; char* message_name; os_boolean txn_in_progress; os_unsigned_int32 txn_priority; os_unsigned_int32 txn_duration; os_unsigned_int32 txn_work; os_client_lock_type lock_state; os_unsigned_int32 db_id; 199 os_dbutil char* db_pathname; os_unsigned_int32 locked_seg_id; os_unsigned_int32 locked_cluster_id; os_unsigned_int32 locking_start_sector; os_unsigned_int32 locking_for_n_sectors; os_unsigned_int32 n_conflicts; os_svr_stat_client_process* lock_conflicts; enum os_client_lock_type { OSSVRSTAT_CLIENT_LOCK_TO_MAX_BLOCKS = 1, OSSVRSTAT_CLIENT_LOCK_TO_NBLOCKS }; enum os_client_state_type { OSSVRSTAT_CLIENT_WAITING_MESSAGE, OSSVRSTAT_CLIENT_EXECUTING_MESSAGE, OSSVRSTAT_CLIENT_WAITING_RANGE_READ_LOCK, OSSVRSTAT_CLIENT_WAITING_RANGE_WRITE_LOCK, OSSVRSTAT_CLIENT_WAITING_SEGMENT_WRITE_LOCK, OSSVRSTAT_CLIENT_DEAD, OSSVRSTAT_CLIENT_WAITING_SEGMENT_READ_LOCK, OSSVRSTAT_CLIENT_WAITING_DB_READ_LOCK, OSSVRSTAT_CLIENT_WAITING_DB_WRITE_LOCK, OSSVRSTAT_CLIENT_WAITING_CLUSTER_READ_LOCK, OSSVRSTAT_CLIENT_WAITING_CLUSTER_WRITE_LOCK, OSSVRSTAT_CLIENT_WAITING_CLUSTER_RANGE_READ_LOCK, OSSVRSTAT_CLIENT_WAITING_CLUSTER_RANGE_WRITE_LOCK, OSSVRSTAT_CLIENT_WAITING_WHILE_FREEZING_COHERENT_SET, OSSVRSTAT_CLIENT_WAITING_FOR_CONFLICTING_UPDATE_COMMIT }; Data in locking_start_sector and locking_for_n_sectors is valid only when lock_state is OSSVRSTAT_CLIENT_STATE_WAITING_RANGE_READ_LOCK, OSSVRSTAT_CLIENT_STATE_WAITING_RANGE_WRITE_LOCK, OSSVRSTAT_CLIENT_ WAITING_CLUSTER_RANGE_READ_LOCK, or OSSVRSTAT_CLIENT_WAITING_CLUSTER_ RANGE_WRITE_LOCK. The class os_svr_stat_client_meters has the following public data members: 200 os_unsigned_int32 struct_version; os_unsigned_int32 n_receive_msgs; os_unsigned_int32 n_callback_msgs; os_unsigned_int32 n_callback_sectors_requested; os_unsigned_int32 n_callback_sectors_succeeded; os_unsigned_int32 n_sectors_read; os_unsigned_int32 n_sectors_written; os_unsigned_int32 n_deadlocks; os_unsigned_int32 n_lock_timeouts; os_unsigned_int32 n_commit; os_unsigned_int32 n_phase_2_commit; os_unsigned_int32 n_readonly_commit; os_unsigned_int32 n_abort; C++ A P I Reference Chapter 2: Class Library os_unsigned_int32 n_phase_2_abort; os_unsigned_int32 n_notifies_sent; os_unsigned_int32 n_notifies_received; os_unsigned_int32 n_lock_waits; os_timesecs total_lock_wait_time; The class os_svr_stat_extension has the following public data members: os_svr_log_stat_sample* p_log_samples; os_unsigned_int32 n_log_samples; os_svr_stat_delayed_db_info* p_delayed_dbs; os_unsigned_int32 n_delayed_dbs; os_unsigned_int32 transaction_log_aio_thread_serial_number; The class os_svr_log_stat_sample has the following public data members: Release 6.3 os_unsigned_int32 struct_version; os_boolean valid; os_unsigned_int32 n_minutes; os_unsigned_int32 log_size; os_unsigned_int32 data_segment_size; os_unsigned_int32 record_segments_size; os_unsigned_int32 log_free_size; os_unsigned_int32 data_segment_active_size; os_unsigned_int32 data_segment_min_active_size; os_unsigned_int32 data_segment_max_active_size; os_unsigned_int32 current_record_segment_active_size; os_unsigned_int32 current_record_segment_min_active_size; os_unsigned_int32 current_record_segment_max_active_size; os_unsigned_int32 current_record_segment_live_size; os_unsigned_int32 current_record_segment_min_live_size; os_unsigned_int32 current_record_segment_max_live_size; os_unsigned_int32 previous_record_segment_active_size; os_unsigned_int32 previous_record_segment_min_active_size; os_unsigned_int32 previous_record_segment_max_active_size; os_unsigned_int32 previous_record_segment_live_size; os_unsigned_int32 previous_record_segment_min_live_size; os_unsigned_int32 previous_record_segment_max_live_size; os_unsigned_int32 delayed_data_size; os_unsigned_int32 delayed_data_min_size; os_unsigned_int32 delayed_data_max_size; os_unsigned_int32 n_garbage_collections; os_unsigned_int32 n_trivial_garbage_collections; os_unsigned_int32 n_grow_because_not_enough_time; 201 os_dbutil Example os_unsigned_int32 n_grow_because_not_enough_transactions; os_unsigned_int32 n_grow_because_not_enough_time_and_transactions; os_unsigned_int32 n_grow_because_not_enough_data; os_unsigned_int32 n_grow_because_mvcc; os_unsigned_int32 n_grow_because_unfinished_transactions; os_unsigned_int32 n_grow_because_unpropagated_data; os_db_statistic_info log_io_stats; The following code example calls the os_dbutil::svr_stat() function to retrieve server-use meters. After the call returns, the code reads the number of notifications sent and received by the server: // construct an os_svr_stat object to pass as an argument // to os_dbutil::svr_stat() os_svr_stat svrstat; os_dbutil::svr_stat(db->get_host_name(), // name of server os_svr_stat::get_svr_meter_samples, // get server meters , &svrstat); // os_svr_stat object for svr_stat() to fill // retrieve metrics from first element of svr_meter_samples // array, allocated by the call to os_dbutil::svr_stat() os_unsigned_int32 n_sent = svrstat.svr_meter_samples->n_notifies_sent; os_unsigned_int32 n_received = svrstat.svr_meter_samples->n_notifies_received; // svrstat and its subobjects are deallocated by the // ~os_svr_stat() destructor when svrstat goes out of scope For information about using an ObjectStore utility to get information about a server, see ossvrstat in Managing ObjectStore. 202 C++ A P I Reference Chapter 2: Class Library os_deadlock_exception Instances of this class contain information on the circumstances that prevent deadlocked processes from obtaining a transaction lock. An exception of this type can be signaled by processes that attempt to obtain a lock that conflicts with a lock held by a second process at the same time the second process is waiting for a lock held by the first process. This situation can occur with more than two processes, each waiting for a lock held by the next. os_deadlock_exception is a dynamically allocated descendant of err_deadlock. An exception handler that handles err_deadlock will normally receive an instance of os_deadlock_exception. Example Here is a simple example of handling os_deadlock_exception: TIX_HANDLE(err_deadlock) { // application code } TIX_EXCEPTION { os_deadlock_exception* e = \ tix_handler::get_exception()->get_os_deadlock_exception(); if (e) { os_char_p* deadlocked_applications = e->get_application_names(); \ for (os_int32 i = 0; i<e->number_of_blockers(); i++) printf("deadlocked with %s\n", \ deadlocked_applications[i]); e->release_pointer(); } } TIX_END_HANDLE See Chapter 6, Exception Handling in the C++ A P I User Guide for more information on handling exceptions. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. os_deadlock_exception::get_application_names() os_char_p* get_application_names( ); Returns an array of strings naming the deadlocked applications. This array is parallel to the arrays returned by get_hostnames( ) and get_pids( ); that is, the ith element of get_application_names( ) contains information about the same process as the ith elements of get_hostnames( ) and get_pids( ). The member function number_ of_blockers( ) returns the number of elements in these arrays. Deleting the os_ deadlock_exception deallocates the arrays. Release 6.3 203 os_deadlock_exception os_deadlock_exception::get_fault_addr() void* get_fault_addr( ); Returns the address on which ObjectStore faulted, causing the database access leading to the deadlock. os_deadlock_exception::get_hostnames() os_char_p* get_hostnames( ); Returns an array of strings naming the host machines running the deadlocked applications. This array is parallel to the arrays returned by get_application_ names( ) and get_pids( ); that is, the ith element of get_hostnames( ) contains information about the same process as the ith elements of get_application_ names( ) and get_pids( ). The member function number_of_blockers( ) returns the number of elements in these arrays. Deleting the os_deadlock_exception deallocates the arrays. os_deadlock_exception::get_lock_type() os_int32 get_lock_type( ); Returns a value (os_read_lock or os_write_lock) indicating the type of lock ObjectStore was requesting when the deadlock occurred. This will always be os_ write_lock. os_deadlock_exception::get_pids() os_unsigned_int32* get_pids( ); Returns an array of integers indicating the process IDs of the processes that are deadlocked. This array is parallel to the arrays returned by get_application_ names( ) and get_hostnames( ); that is, the ith element of get_pids( ) contains information about the same process as the ith elements of get_application_ names( ) and get_hostnames( ). The member function number_of_blockers( ) returns the number of elements in these arrays. Deleting the os_deadlock_ exception deallocates the arrays. os_deadlock_exception::number_of_blockers() os_int32 number_of_blockers( ); Returns the number of processes that are deadlocked, not counting the current process. 204 C++ A P I Reference Chapter 2: Class Library os_DLL_finder This class can be used to create a DLL identifier prefix. A prefix before a colon in a DLL identifier string maps to a DLL finder subclass. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/client/dll_fndr.hh>. os_DLL_finder::equal_DLL_identifiers() static os_boolean equal_DLL_identifiers( const char* id1, const char* id2 ); Compares two DLL identifier strings and returns nonzero (true) if the identifier strings are equivalent. os_DLL_finder::equal_DLL_identifiers_same_prefix() virtual os_boolean equal_DLL_identifiers_same_prefix( const char* id1, const char* id2) = 0 ; Each subclass of os_DLL_finder must provide an implementation of equal_DLL_ identifiers_same_prefix() that compares two DLL identifiers that are both implemented by this finder and returns true if they are equal. os_DLL_finder::get() static os_DLL_finder* get(const char* DLL_identifier); Gets the finder for the specified DLL_identifier’s prefix or returns NULL if none is registered. os_DLL_finder::load_DLL() virtual os_DLL_handle load_DLL( const char* DLL_identifier, os_boolean error_if_not_found) = 0 ; Each subclass of os_DLL_finder must provide an implementation of load_DLL() that interprets the suffix part of the DLL identifier and calls the appropriate operating system API (or calls another os_DLL_finder) to load the DLL. os_DLL_finder::register_() void register_(const char* prefix); Registers this as the finder for DLL identifiers with the given prefix. os_DLL_finder::unregister() void unregister(const char* prefix); Unregisters a DLL finder. It is no longer the finder for DLL identifiers with the given prefix. Release 6.3 205 os_DLL_schema_info os_DLL_schema_info This class provides access to information in a DLL about the component schema, including (for example) the path name of the schema database, DLL identifiers, and pointers to vtbls. Its base class is os_schema_info; for more information, see os_ schema_info on page 350. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/nreloc/schftyps.hh>. os_DLL_schema_info::add_DLL_identifier() void add_DLL_identifier(const char* id); Adds the specified DLL identifier to the set of DLL identifiers of the os_DLL_ schema_info. This function can be called before os_DLL_schema_info::DLL_ loaded() if the DLL identifier is determined independently of the schema. This can be used, for example, in a case in which one developer hands off the schema database, schema file, and other object files to another developer who incorporates these into a DLL that he builds. The schema starts with a dummy DLL identifier to make it a component schema and has the real identifiers added by the second developer. The add_DLL_identifier() function allocates a small amount of memory that is never freed. The amount of memory is proportional to the total number of DLL identifiers in the os_DLL_schema_info. It also retains a pointer to the id argument indefinitely. os_DLL_schema_info::DLL_loaded() os_schema_handle& DLL_loaded( os_boolean load_DLL_schema_for_current_session_only = 0 ); Notifies ObjectStore that a DLL has been loaded and that the component schema must be loaded and merged into the process’s complete program schema. The this argument identifies the schema to be loaded. Typically the this argument is an os_ DLL_schema_info structure generated by ossg in the DLL that is calling DLL_ loaded(). Typically the call is in the DLL’s initialization function. If load_DLL_schema_for_current_session_only is nonzero, the component schema is loaded in the current session; otherwise, the component schema is marked as global so that other sessions will automatically load it without calling this function. If this function is called outside a session, the component schema is marked as global regardless of the value of the boolean argument. This function returns 0 if called outside a session. Upon notification, one of the following then occurs: • If ObjectStore is not yet initialized or there is no current transaction, this function saves the arguments for later processing when the first database is put in use by 206 C++ A P I Reference Chapter 2: Class Library the next transaction. The arguments are saved in the form of an os_schema_ handle object that is not fully initialized. • If the component schema is already loaded, this function returns its os_schema_ handle. • For all other cases, os_DLL_schema_info::DLL_loaded() finds the schema and loads it. Aborting a transaction does not roll back os_DLL_schema_info::DLL_loaded(). The returned os_schema_handle represents the component schema that was loaded or is to be loaded. Debugging Delayed loading of a component schema after calling os_DLL_schema_info::DLL_ loaded() can raise exceptions. It can be difficult to debug these because they occur later than the program action that loaded the DLL, but the error message should always include a DLL identifier of the DLL. One way to debug such a program is to start a transaction and put a database in use to force deferred loading to happen: os_schema_handle& DLL_loaded( const char* explicit_schema_database_path ); The explicit_schema_database_path argument allows the file path name of the component schema database to be passed in, overriding the path name in the os_ DLL_schema_info. This calls os_schema_handle::set_schema_database_ pathname() and then calls the no-argument overloading of DLL_loaded(), as described above. See also os_schema_handle::set_schema_database_ pathname() on page 349. os_DLL_schema_info::DLL_unloaded() void DLL_unloaded(); Uses the os_DLL_schema_info to locate a loaded os_schema_handle and calls os_ schema_handle::DLL_unloaded(). An exception is thrown if no corresponding os_schema_handle currently exists. Release 6.3 207 os_Dumper_reference os_Dumper_reference Instances of the class os_Dumper_reference can be used as substitutes for pointers to predump or postload objects. Given a reference to a predump object, you can retrieve a reference to the corresponding postload object; see os_Database_ table::find_reference() on page 176. Dumper references are required as arguments to certain functions that your specializations call; see, for example, os_ Database_table::insert() on page 176. As with a pointer, after the object referred to by a dumper reference is deleted, use of the reference accesses arbitrary data and might cause a segmentation violation. For information about constructing or setting a reference, see • os_Dumper_reference::os_Dumper_reference() on page 210 • os_Dumper_reference::operator =() on page 209 For information about resolving a reference, see • os_Dumper_reference::resolve() on page 210 • os_Dumper_reference::resolve() on page 210 os_Dumper_reference::get_database() os_database* get_database () const; Returns the database containing the referent of this reference. os_Dumper_reference::get_database_number() os_unsigned_int32 get_database_number () const; Returns the database table number of the database containing the referent of this reference. os_Dumper_reference::get_offset() os_unsigned_int32 get_offset () const; Returns the offset of the referent of this reference within its segment. os_Dumper_reference::get_segment() os_segment* get_segment () const; Returns the segment containing the referent of this reference. os_Dumper_reference::get_segment_number() os_unsigned_int32 get_segment_number () const; Returns the segment number of the segment containing the referent of this reference. os_Dumper_reference::get_string() const char* get_string () const; 208 C++ A P I Reference Chapter 2: Class Library Returns the reference's value as an encoded string. os_Dumper_reference::is_valid() os_boolean is_valid () const; Returns nonzero if this is completely valid; returns 0 otherwise. os_Dumper_reference::operator void*() operator void*() const; Returns the pointer for which the specified reference is a substitute. os_Dumper_reference::operator =() os_Dumper_reference& operator = (const os_Dumper_reference&); Establishes the referent of the right operand as the referent of the left operand. Overloadings The following overloading is supported: os_Dumper_reference& operator = (void* obj); Establishes the object pointed to by the right operand as the referent of the left operand. os_Dumper_reference::operator ==() os_boolean operator == (const os_Dumper_reference&) const; Returns 1 if the arguments have the same referent; returns 0 otherwise. os_Dumper_reference::operator <() os_boolean operator < (const os_Dumper_reference&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument precedes the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_Dumper_reference::operator >() os_boolean operator > (const os_Dumper_reference&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument follows the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_Dumper_reference::operator !=() os_boolean operator != (const os_Dumper_reference&) const; Returns 1 if the arguments have different referents; returns 0 otherwise. Release 6.3 209 os_Dumper_reference os_Dumper_reference::operator >=() os_boolean operator >= (const os_Dumper_reference&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument follows or is the same as the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_Dumper_reference::operator <=() os_boolean operator <= (const os_Dumper_reference&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument precedes or is the same as the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_Dumper_reference::operator !() os_boolean operator ! () const; Returns nonzero if the reference is NULL, that is, has no current referent. os_Dumper_reference::os_Dumper_reference() os_Dumper_reference (const void*); Constructs a reference to substitute for the specified void*. Overloadings The following overloadings are supported: os_Dumper_reference os_unsigned_int32 os_unsigned_int32 os_unsigned_int32 ); ( database_number, seg_num, offset Constructs a reference to the object with the specified database number, segment number, and offset. os_Dumper_reference (const os_Dumper_reference&); Constructs a reference with the same referent as the specified reference. os_Dumper_reference (); Constructs a null reference, that is, a reference without a current referent. See os_ Dumper_reference::operator =() on page 209. os_Dumper_reference::resolve() void* resolve() const; Returns the valid void* for which the specified reference is a substitute. 210 C++ A P I Reference Chapter 2: Class Library os_Dumper_specialization This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It is an abstract base class that specifies the protocol for a user-defined class derived from it. The derived class handles the generation of object forms. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Dumper_specialization that can be implemented in the derived class. The class type_dumper is a class that is derived from os_Dumper_specialization for customization of the dumping of the type type. os_Dumper_specialization::get_specialization_name() char* type_Dumper_specialization::get_specialization_name( const os_class_type& class_type ) const; Returns 0 or the name of the type whose dumper should be used for instances of class_type, where class_type represents a subtype of type. If 0 is returned, it indicates that the dumper for class_type should be used. Deleting the returned string is the responsibility of the caller of this function. See Implementing get_specialization_name() in the Advanced C++ A P I User Guide for information on implementing this function. os_Dumper_specialization::operator ()() void type_Dumper_specialization::operator () ( const os_class_type& actual_class, void* obj ); An object form has the following structure: id (Type) value This function generates the value portion of the object form. The functions that generate the rest of the object form are internal to the dump/load facility. The function also inserts a fixup dumper into the database table, which causes the dumper to generate a fixup form for object after generating all the object forms. (When a load processes this kind of fixup form for object, it adjusts all pointers and C++ references in object so that they refer to the appropriate newly loaded referent.) See Implementing operator ()() in the Advanced C++ A P I User Guide for information on implementing this function. Overloadings The following overloading is supported: void type_Dumper_specialization::operator () ( Release 6.3 211 os_Dumper_specialization const os_class_type& actual_class, void* obj, unsigned number_of_elements ); Same as the first overloading, but for an array of instances of type. os_Dumper_specialization::should_use_default_constructor() os_boolean should_use_default_constructor( const os_class_type& class_type ) const; When you customize the dump and load of a type, you supply code to create instances of the type during a load. This code is used for all nonembedded instances of the type. But for an instance of the type embedded in a noncustomized type, the loader calls the customized type’s constructor automatically, using code generated by the dumper. This function returns 0 if the dumper-generated code calls a no-argument constructor. The function returns 1 if the dumper-generated code calls the special loader constructor, type(type_data&). See Implementing should_use_default_constructor() in the Advanced C++ A P I User Guide for information on implementing this function. 212 C++ A P I Reference Chapter 2: Class Library os_dynamic_extent An instance of this class can be used to create an extended collection of all objects of a particular type, regardless of the segments that the objects reside in. All objects are retrieved in an arbitrary order that is stable across traversals of the segments, if no objects are created or deleted from the segment and no reorganization is performed (using schema evolution or compaction). This class is derived from os_Collection. The os_dynamic_extent class is useful for joining together multiple collections of the same object type into a new collection. The new collection is created dynamically, which results in no additional storage consumption. By default, os_dynamic_extent does not search subclasses when the requested object type is a class type. To enable this behavior, set the argument include_ subclasses to true. When this behavior is enabled, os_dynamic_extent searches all classes that the requested class type is derived from. You iterate over the os_dynamic_extent collection by creating an associated instance of os_cursor. Only the os_cursor::more(), os_cursor::first(), and os_cursor::next() functions are supported by os_dynamic_extent. You can create an index for the os_dynamic_extent collection by calling add_index(); however, creating an index requires additional storage. os_dynamic_extent::insert() void insert(const void*); Adds the specified void* to the index for the current os_dynamic_extent collection. You must first create an index by calling os_collection::add_index(). For more information, see the C++ Collections Guide and Reference. os_dynamic_extent::os_dynamic_extent() os_dynamic_extent( os_database* db, os_typespec* typespec, os_boolean include_subclasses = 0 ); Constructs an os_dynamic_extent that associates all objects of os_typespec that exist in the specified os_database. This constructor should be used only for transient instances of os_dynamic_extent. By default, os_dynamic_extent does not search subclasses when the requested object type is a class type. Set the argument include_subclasses to true to enable os_dynamic_extent to search all classes that the requested class type is derived from. Overloadings The following overloadings are supported: os_dynamic_extent( os_typespec* typespec, os_boolean options = os_dynamic_extent::all_segments, os_boolean include_subclasses = 0 Release 6.3 213 os_dynamic_extent ); Constructs an os_dynamic_extent that associates all objects of os_typespec. This constructor assumes that the os_dynamic_extent is persistent and searches the database in which the os_dynamic_extent resides. If the option is os_dynamic_ extent::all_segments, all segments are searched. The alternative option is os_ dynamic_extent::of_segment, which searches only the segment in which the os_ dynamic_extent is allocated. By default, os_dynamic_extent does not search subclasses when the requested object type is a class type. Set the argument include_subclasses to true to enable os_dynamic_extent to search all classes that the requested class type is derived from. os_dynamic_extent( os_database* db, os_typespec* typespec, os_segment* seg, os_boolean include_subclasses = 0 ); Constructs an os_dynamic_extent that associates only those objects of os_ typespec that exist in the specified os_database and os_segment. This constructor should be used only for transient instances of os_dynamic_extent. By default, os_dynamic_extent does not search subclasses when the requested object type is a class type. Set the argument include_subclasses to true to enable os_dynamic_extent to search all classes that the requested class type is derived from. os_dynamic_extent::~os_dynamic_extent() ~os_dynamic_extent(); Performs internal maintenance associated with os_dynamic_extent deallocation. os_dynamic_extent::remove() os_int32 remove(const void*); Removes the specified void* from the os_dynamic_extent collection index. If the index is ordered, the first occurrence of the specified void* is removed. Returns a nonzero os_int32 if an element was removed; returns 0 otherwise. 214 C++ A P I Reference Chapter 2: Class Library os_enum_type class os_enum_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ enumeration type. This class is derived from os_type. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_enum_type::create() static os_enum_type& create( const char* name, os_List<os_enumerator_literal*>& ); Creates an instance of os_enum_type named name. The specified list contains the enumerators of the created enumeration type. os_enum_type::get_enumerator() const os_enumerator_literal* get_enumerator(os_int32) const; Returns the enumerator that names the specified integer. Returns 0 if there is no enumerator with the specified value. If there is more than one enumerator with the specified value, the first one is returned. os_enum_type::get_enumerators() os_List<const os_enumerator_literal*> get_enumerators( ) const; Returns a list, in declaration order, of the enumerator literals defined by the enumeration. os_enum_type::get_name() const char* get_name( ) const; Returns the name of the specified enumeration. A zero-length string is returned for an anonymous enumeration. os_enum_type::get_pragmas() os_List<os_pragma*> get_pragmas( ) const; Returns the pragmas associated with the specified enumeration. Release 6.3 215 os_enum_type os_enum_type::get_source_position() void get_source_position ( const char*& file, os_unsigned_int32& line ) const; Returns the source position associated with the specified enumeration. os_enum_type::set_enumerators() void set_enumerators(os_List<os_enumerator_literal*>&); Specifies, in declaration order, the enumerator literals defined by the specified enumeration. os_enum_type::set_name() void set_name(const char*); Sets the name of the specified enumeration. os_enum_type::set_pragmas() void set_pragmas(os_List<os_pragma*>); Sets the pragmas associated with the specified enumeration. os_enum_type::set_source_position() void set_source_position( const char* file, os_unsigned_int32 line ); Sets the source position associated with the specified enumeration. 216 C++ A P I Reference Chapter 2: Class Library os_enumerator_literal This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ enumerator. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. os_enumerator_literal::create() static os_enumerator_literal& create(const char*, os_int32); Creates an os_enumerator_literal of the specified name and value. os_enumerator_literal::get_name() const char* get_name( ) const; Returns the name of the specified enumerator. os_enumerator_literal::get_value() os_int32 get_value( ) const; Returns the integer value of the specified enumerator. os_enumerator_literal::set_name() void set_name(const char*); Sets the name of the specified enumerator. os_enumerator_literal::set_value() void set_value(os_int32); Sets the integer value of the specified enumerator. Release 6.3 217 os_evolve_subtype_fun_binding os_evolve_subtype_fun_binding Instances of this class represent an association between a class and a reclassifier function. Instances of os_evolve_subtype_fun_binding are used as arguments to os_schema_evolution::augment_subtype_selectors( ). Instances should be allocated in transient memory only. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/schmevol.hh>. os_evolve_subtype_fun_binding::os_evolve_subtype_fun_ binding() os_evolve_subtype_fun_binding( char* class_name, char* (*func)(const os_typed_pointer_void&) ); Associates the class named class_name with the function func. 218 C++ A P I Reference Chapter 2: Class Library os_export_id class os_export_id Instances of this class are used internally by ObjectStore in connection with segment reference policies. See os_database::create_segment() on page 152. os_export_id::create() static os_export_id create(os_unsigned_int32); Creates an export ID from the value returned by os_export_id::get_value(). os_export_id::get_value() os_unsigned_int32 get_value() const; Returns an integer representation of the this export ID. os_export_id::is_null() os_boolean is_null() const; Returns a nonzero value if the this export ID is a null export ID; returns 0 otherwise. os_export_id::operator ==() os_boolean operator==(os_export_id const&) const; If the operands are IDs for objects in the same segment, this function returns a nonzero value if and only if the operands are IDs for the same object or are both the null export ID (see os_export_id::is_null() on page 219). The function might return a nonzero value if the operands are IDs for objects in different segments. Release 6.3 219 os_export_id_cursor os_export_id_cursor An export ID cursor allows retrieval of the export IDs of all exported objects in a specified segment. The ordering used is arbitrary but stable across traversals in the absence of additions, deletions, or reorganization. os_export_id_cursor::get_current() os_export_id get_current() const; Returns the export ID at which the cursor is currently positioned. If the cursor is positioned before the first export ID or after the last export ID, returns the null export ID (see os_export_id::is_null() on page 219). os_export_id_cursor::next() os_export_id next(); Advances the cursor to the next export ID in the cursor’s associated segment. Returns the export ID at which it is positioned subsequent to being advanced. If there is no next export ID, positions the cursor immediately after the last export ID and returns the null export ID (see os_export_id::is_null() on page 219). os_export_id_cursor::os_export_id_cursor() os_export_id_cursor( os_segment* seg, os_unsigned_int32 max_n_ids_at_a_time = 100 ); Constructs a cursor suitable for retrieving the export IDs of all exported objects in the segment seg. The newly constructed cursor is positioned immediately before the first export ID in the segment. The max_n_ids_at_a_time argument is the batch size for fetching export IDs from the table of IDs for the cursor’s associated segment. If an exported object is deleted after its export ID has been fetched from the table, the ID is visited by the cursor, even though it is no longer valid. If this is a potential problem, you can protect against this either by specifying a batch size of 1 or by catching the err_invalid_export_id exception when attempting to resolve the export ID. A batch size larger than 1 can increase the efficiency of traversals performed with the cursor. 220 C++ A P I Reference Chapter 2: Class Library os_export_id_cursor::reset() void reset(); Positions the cursor immediately before the first export ID in the cursor’s associated segment. Overloadings The following overloadings are supported: void reset(os_export_id const& export_id); Positions the cursor at the specified export ID. void reset(os_segment* seg); Positions the cursor at the first export ID in the specified segment. os_export_id_cursor::~os_export_id_cursor() ~os_export_id_cursor(); Frees internally used memory associated with the this cursor. Release 6.3 221 os_failover_server os_failover_server class os_failover_server : public os_server This class is derived from os_server. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh> followed by <ostore/coll.hh> (if collections are used). See Managing ObjectStore for more information on failover. os_failover_server::get_logical_server_hostname() char* get_logical_server_hostname() const; Returns the logical name of a failover ObjectStore server. A failover server should always be referred to by its logical server name. The caller should delete the returned value. os_failover_server::get_online_server_hostname() char* get_online_server_hostname() const; Returns the name of the ObjectStore server that the client is currently connected to — the logical server, the alternative server, or the empty string if there is no connection. The caller should delete the returned value. os_failover_server::get_reconnect_retry_interval() os_unsigned_int32 get_reconnect_retry_interval() const; Returns the retry interval, which determines how often ObjectStore should ping the servers of a failover server pair while attempting to reconnect to them. os_failover_server::get_reconnect_timeout() os_unsigned_int32 get_reconnect_timeout() const; Returns the maximum amount of time that a client application attempts to reconnect to a broken failover server connection. When the timeout is reached, the exception err_broken_failover_server_ connection is signaled. 222 C++ A P I Reference Chapter 2: Class Library os_failover_server::set_reconnect_timeout_and_interval() os_boolean set_reconnect_timeout_and_interval( os_unsigned_int32 total_timeout_secs, os_unsigned_int32 interval_secs ); Sets the total amount of time to try to reconnect a broken connection to a failover server. The interval_secs argument is used to control how frequently the servers of a failover server pair are pinged to see whether they are available. Returns nonzero (true) if the function has reset the reconnect timeout and the retry interval with the given argument values. The arguments are invalid if interval_secs is greater than total_timeout_secs or if interval_secs equals 0 when total_timeout_secs is nonzero. If the arguments are invalid, the function returns 0 (false) and does not change the reconnect timeout or retry interval. Release 6.3 223 os_field_member_variable os_field_member_variable class os_field_member_variable : public os_member_variable This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a bit-field member. This class is derived from os_member_variable. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int8 is defined as an unsigned 8-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_field_member_variable::create() static os_field_member_variable& create( const char* name, os_type* var_type, os_unsigned_int8 size_in_bits ); Creates an os_field_member_variable of the specified name, var_type, and size_ in_bits. os_field_member_variable::get_offset() void get_offset( os_unsigned_int32& bytes, os_unsigned_int8& bits ) const; Returns the offset in bytes and bits to the specified bit field. os_field_member_variable::get_size() os_unsigned_int8 get_size( ) const; Returns the size in bits of the specified bit field. os_field_member_variable::set_size() void set_size(os_unsigned_int8 size_in_bits); Sets the size in bits of the specified bit field. 224 C++ A P I Reference Chapter 2: Class Library os_Fixup_dumper This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It is an abstract base class that specifies the protocol for a user-defined class derived from it. The derived class handles the generation of fixup forms. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Fixup_dumper that can be implemented in the derived class. It also describes some members that are implemented only by the base class. The class type_fixup_dumper is a class that is derived from os_Fixup_dumper for customization of the dumping of the type type. os_Fixup_dumper::dump_info() void type_fixup_dumper::dump_info(); A fixup form has the following structure: fixup id (Type) info This function generates the info portion. The functions that generate the rest of the fixup form are inherited from os_Fixup_dumper. The info portion consists of ASCII from which a loader can reconstruct function arguments. The arguments should be those required for recreation of the nonroot portion of the object being fixed up. See Implementing dump_info() in the Advanced C++ A P I User Guide for information on implementing this function. os_Fixup_dumper::duplicate() Fixup& type_fixup_dumper::duplicate(); Allocates a copy of the this type_fixup_dumper in the specified segment. See Implementing duplicate() in the Advanced C++ A P I User Guide for information on implementing this function. os_Fixup_dumper::get_number_elements() unsigned get_number_elements () const; If this is a fixup for an array, returns the number of elements to be fixed up. Returns 0 otherwise. os_Fixup_dumper::get_object_to_fix() os_Dumper_reference get_object_to_fix () const; Returns a dumper reference to the object for which this dumps a fixup form. Release 6.3 225 os_Fixup_dumper os_Fixup_dumper::get_type() os_type& get_type() const; Returns a reference to an os_type that represents the type of the object for which this is a fixup dumper. Overloadings The following overloadings are supported: type_fixup_dumper::type_fixup_dumper ( os_Dumper_stream&, os_Dumper&, const os_class_type&, const os_Dumper_reference object_to_fix, unsigned number_of_elements = 0 ); Passes the arguments to the base type constructor: os_Fixup_dumper ( os_Dumper_stream&, os_Dumper&, const os_class_type&, const os_Dumper_reference object_to_fix, unsigned number_of_elements = 0 ); Constructs a fixup dumper. The constructors for your customized fixup dumpers pass arguments to this constructor. See Implementing the Constructor in the Advanced C++ A P I User Guide for information on implementing this function. os_Fixup_dumper (const os_Fixup_dumper&); Copy constructor. os_Fixup_dumper::~os_Fixup_dumper() virtual ~os_Fixup_dumper(); Virtual destructor. 226 C++ A P I Reference Chapter 2: Class Library os_function_type class os_function_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ function type. This class is derived from os_type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_function_type::create() static os_function_type& create( os_arg_list_kind arg_list_kind, os_List<os_type*>& args, os_type* return_type ); Creates an os_function_type. The type of the new function’s nth argument is the nth element of args. The return type is return_type. The possible values of arg_ list_kind are os_function_type::Unknown, os_function_type::Variable, and os_function_type::Known. See os_function_type::get_arg_list_kind() on page 227. os_function_type::equal_signature() os_boolean equal_signature( const os_function_type& other_func, os_boolean check_return_type = 0 ) const; Returns nonzero (true) if the specified function types are equivalent. If check_ return_type is 0, returns nonzero if the arguments are the same. os_function_type::get_arg_list() os_list get_arg_list( ) const; Returns a list of os_type*s, pointers to the argument types of the specified function type. See os_function_type::get_arg_list_kind() on page 227. os_function_type::get_arg_list_kind() enum os_arg_list_kind {Unknown, Known, Variable}; os_arg_list_kind get_arg_list_kind( ) const; Returns an enumerator indicating the type of argument list associated with the specified function. os_function_type::Unknown indicates that the argument profile is unknown; a call to os_function_type::get_arg_list( ) returns an empty list. os_function_type::Variable indicates that the function accepts a variable number of arguments; a call to os_function_type::get_arg_list( ) returns the list of known leading arguments. os_function_type::Known indicates that the function takes a known fixed number of arguments; a call to os_function_ type::get_arg_list( ) returns the complete argument list. Release 6.3 227 os_function_type os_function_type::get_return_type() os_type& get_return_type( ) const; Returns the return type associated with the specified function. os_function_type::set_arg_list() void set_arg_list(os_List<os_type*>); Specifies a list of os_type*s, pointers to the argument types of the specified function type. See the member os_function_type::get_arg_list_kind() on page 227. os_function_type::set_arg_list_kind() void set_arg_list_kind(os_int32); Specifies an enumerator indicating the type of argument list associated with the specified function. os_function_type::Unknown indicates that the argument profile is unknown. os_function_type::Variable indicates that the function accepts a variable number of arguments. os_function_type::Known indicates that the function takes a known fixed number of arguments. os_function_type::set_return_type() void set_return_type(os_type&); Sets the return type associated with the specified function. 228 C++ A P I Reference Chapter 2: Class Library os_indirect_type class os_indirect_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class is either an os_named_ indirect_type (typedef) or os_anonymous_indirect_type (a type with const or volatile specifiers). This class is derived from os_class_type. os_indirect_type::get_target_type() const os_type& get_target_type( ) const; Returns the type for which this is a typedef or that this qualifies with a const or volatile specifier. os_type& get_target_type( ); Returns the type for which this is a typedef or that this qualifies with a const or volatile specifier. os_indirect_type::set_target_type() void set_target_type(os_type&); Sets the type for which this is a typedef or that this qualifies with a const or volatile specifier. Release 6.3 229 os_instantiated_class_type os_instantiated_class_type class os_instantiated_class_type : public os_class_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents an instantiation of a template class. This class is derived from os_class_type. os_instantiated_class_type::create() static os_instantiated_class_type& create(const char* name); Creates an os_instantiated_class_type with the specified name. Overloadings The following overloading is supported: static os_instantiated_class_type& create( const char* name, os_List<os_base_class*>&, os_List<os_member*>&, os_template_instantiation*, os_boolean defines_virtual_functions ); Creates an os_instantiated_class_type from the specified template instantiation and with the specified name, base classes, and members. os_instantiated_class_type::get_instantiation() const os_template_instantiation& get_instantiation( ) const; Returns a reference to a const os_template_instantiation that represents the template instantiation resulting in this class. Overloadings The following overloading is supported: os_template_instantiation& get_instantiation( ); Returns a reference to a non-const os_template_instantiation that represents the template instantiation resulting in this class. os_instantiated_class_type::set_instantiation() void set_instantiation(os_template_instantiation&); Sets the os_template_instantiation for the specified os_instantiated_class_ type. 230 C++ A P I Reference Chapter 2: Class Library os_int64 Instances of the class os_int64 represent signed 64-bit integers on any platform; the underlying implementation varies from platform to platform. Members of this class provide all the standard C++ operators for manipulating integers. For information about unsigned 64-bit integers, see os_unsigned_int64 on page 446. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_int64::os_int64() os_int64(os_int64 num); Constructs a copy of num. Overloadings The following overloadings are supported: os_int64(os_platform_int64 num); Constructs an instance of os_int64 based on the value of num. The os_platform_ int64 argument is an ObjectStore type definition for native 64-bit integer data types, if there is one. os_int64(os_int32 num); Constructs an instance of os_int64 based on the value of num, a 32-bit integer. os_int64(os_int32 high, os_int32 low); Constructs an instance of os_int64 based on the values of high and low, where high represents the upper 32 bits and low represents the lower 32 bits. os_int64::get_high() os_int32 get_low( ); Returns a 32-bit integer based on the upper 32 bits of the value of the object. os_int64::get_low() os_int32 get_low( ); Returns a 32-bit integer based on the lower 32 bits of the value of the object. os_int64::sprint() void sprint(char* result, os_int32 base = 10) const; Converts the value of the object into a formatted string at the specified base and writes the string to result. The base argument can be either 10 or 16; the default is 10. Release 6.3 231 os_integral_type os_integral_type class os_integral_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ integer type. This class is derived from os_type. Performing os_type::get_kind( ) on an os_integral_type returns one of the following enumerators: • os_type::Signed_char • os_type::Unsigned_char • os_type::Signed_short • os_type::Unsigned_short • os_type::Integer • os_type::Unsigned_integer • os_type::Signed_long • os_type::Unsigned_long Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. os_integral_type::create() static os_integral_type& create(const char*); Creates an os_integral_type representing the type with the specified name. os_integral_type::create_defaulted_char() static os_integral_type& create_defaulted_char( os_boolean signed ); Creates an os_integral_type representing the type char. os_integral_type::create_int() static os_integral_type& create_int(os_boolean signed_int); Creates an os_integral_type. If the signed_int argument is true, the type is int. If the signed_int argument is false, the type is unsigned int. os_integral_type::create_long() static os_integral_type& create_long(os_boolean signed_long); Creates an os_integral_type. If the signed_long argument is true, the type is long. If the signed_long argument is false, the type is unsigned long. 232 C++ A P I Reference Chapter 2: Class Library os_integral_type::create_short() static os_integral_type& create_short( os_boolean signed_short ); Creates an os_integral_type. If the signed_short argument is true, the type is short. If the signed_short argument is false, the type is unsigned short. os_integral_type::create_signed_char() static os_integral_type& create_signed_char( ); Creates an os_integral_type representing the type signed char. os_integral_type::create_unsigned_char() static os_integral_type& create_unsigned_char( ); Creates an os_integral_type representing the type unsigned char. os_integral_type::is_signed() os_boolean is_signed( ) const; Returns 1 if and only if the specified object represents a signed type. Release 6.3 233 os_literal os_literal class os_literal This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent literals that designate values. They can be used as actual parameters of class templates. os_literal::create_char() static os_literal& create_char(char); Creates a literal representing the specified char. os_literal::create_enum_literal() static os_literal& create_enum_literal( os_enumerator_literal& ); Creates a literal representing the specified enumerator. os_literal::create_pointer_literal() static os_literal& create_pointer_literal( os_pointer_literal& ); Creates a literal representing the specified pointer. os_literal::create_signed_char() static os_literal& create_signed_char(signed char); Creates a literal representing the specified signed char. os_literal::create_signed_int() static os_literal& create_signed_int(signed int); Creates a literal representing the specified signed int. os_literal::create_signed_long() static os_literal& create_signed_long(signed long); Creates a literal representing the specified signed long. os_literal::create_signed_short() static os_literal& create_signed_short(signed short); Creates a literal representing the specified signed short. os_literal::create_unsigned_char() static os_literal& create_unsigned_char(unsigned char); Creates a literal representing the specified unsigned char. 234 C++ A P I Reference Chapter 2: Class Library os_literal::create_unsigned_int() static os_literal& create_unsigned_int(unsigned int); Creates a literal representing the specified unsigned int. os_literal::create_unsigned_long() static os_literal& create_unsigned_long(unsigned long); Creates a literal representing the specified unsigned long. os_literal::create_unsigned_short() static os_literal& create_unsigned_short(unsigned short); Creates a literal representing the specified unsigned short. os_literal::create_wchar_t() static os_literal& create_wchar_t(wchar_t); Creates a literal representing the specified wchar_t. os_literal::get_char_value() char get_char_value( ) const; Returns the value designated by the specified literal. os_literal::get_enum_literal() const os_enumerator_literal& get_enum_literal( ) const; Returns a reference to the const os_enumerator_literal designated by the specified literal. Overloadings The following overloading is supported: os_enumerator_literal& get_enum_literal( ); Returns a reference to the os_enumerator_literal designated by the specified literal. os_literal::get_kind() enum os_literal_kind { Enumerator_literal, Function_literal, Function_literal_template, Unsigned_char_literal, Signed_char_literal, Unsigned_short_literal, Signed_short_literal, Integer_literal, Unsigned_integer_literal, Signed_long_literal, Unsigned_long_literal, Char_literal, Pointer_literal, Release 6.3 235 os_literal Wchar_t_literal }; os_literal_kind get_kind( ) const; Returns an enumerator indicating the kind of the specified literal. os_literal::get_pointer_literal() const os_pointer_literal& get_pointer_literal( ) const; Returns a reference to the const os_pointer_literal designated by the specified literal. Overloadings The following overloading is supported: os_pointer_literal& get_pointer_literal( ); Returns a reference to the os_pointer_literal designated by the specified literal. os_literal::get_signed_integral_value() long get_signed_integral_value( ) const; Returns the value designated by the specified literal. os_literal::get_type() const os_type& get_type( ) const; Returns the type of the value designated by the specified literal. os_literal::get_unsigned_integral_value() long get_unsigned_integral_value( ) const; Returns the value designated by the specified literal. os_literal::get_wchar_t_value() wchar_t get_wchar_t_value( ) const; Returns the value designated by the specified literal. 236 C++ A P I Reference Chapter 2: Class Library os_literal_template_actual_arg class os_literal_template_actual_arg : public os_template_actual_arg This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent values that are actual parameters of class templates. os_literal_template_actual_arg::create() static os_literal_template_actual_arg& create(os_literal*); Creates an actual parameter consisting of the specified literal. os_literal_template_actual_arg::get_literal() const os_literal& get_type( ) const; Returns a reference to a const literal, the literal of which the actual parameter consists. Overloadings The following is the non-const overloading of this function: os_literal& get_literal( ); Returns a reference to a non-const literal, the literal of which the actual parameter consists. os_literal_template_actual_arg::set_literal() void set_literal(os_literal&); Sets the literal of which the actual parameter consists. Release 6.3 237 os_lock_timeout_exception os_lock_timeout_exception Instances of this class contain information on the circumstances preventing acquisition of a lock within a specified timeout period. An exception of this type can be signaled by processes that have called the set_readlock_timeout( ) or set_ writelock_timeout( ) member of os_segment, os_database, or objectstore. A pointer to an instance of this class can be returned by objectstore::acquire_ lock( ). os_lock_timeout_exception is a dynamically allocated descendant of err_lock_ timeout. An exception handler that handles err_lock_timeout will normally receive an instance of os_lock_timeout_exception. Example Here is a simple example of handling os_lock_timeout_exception: TIX_HANDLE(err_lock_timeout) { // application code } TIX_EXCEPTION { os_lock_timeout_exception* e = \ tix_handler::get_exception()->get_os_lock_timeout_ exception(); if (e) { os_char_p *timed_out_applications = e->get_application_names(); \ for (os_int32 i = 0; i<e->number_of_blockers(); i++) printf("locked with %s\n", timed_out_applications[i]); e->release_pointer(); } } TIX_END_HANDLE See Chapter 6, Exception Handling in the C++ A P I User Guide for more information on handling exceptions. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. os_lock_timeout_exception::get_application_names() os_char_p* get_application_names( ); Returns an array of strings naming the applications preventing lock acquisition. This array is parallel to the arrays returned by get_hostnames( ) and get_pids( ); that is, the ith element of get_application_names( ) contains information about the same process as the ith elements of get_hostnames( ) and get_pids( ). The member function number_of_blockers( ) returns the number of elements in these arrays. Deleting the os_lock_timeout_exception deallocates the arrays. os_lock_timeout_exception::get_fault_addr() void* get_fault_addr( ); 238 C++ A P I Reference Chapter 2: Class Library Returns the address on which ObjectStore faulted, causing the database access leading to the attempted lock acquisition. os_lock_timeout_exception::get_hostnames() os_char_p* get_hostnames( ); Returns an array of strings naming the host machines running the applications preventing lock acquisition. This array is parallel to the arrays returned by get_ application_names( ) and get_pids( ); that is, the ith element of get_ hostnames( ) contains information about the same process as the ith elements of get_application_names( ) and get_pids( ). The member function number_of_ blockers( ) returns the number of elements in these arrays. Deleting the os_lock_ timeout_exception deallocates the arrays. os_lock_timeout_exception::get_lock_type() os_int32 get_lock_type( ); Returns a value (os_read_lock or os_write_lock) indicating the type of lock ObjectStore was requesting when the timeout occurred. os_lock_timeout_exception::get_pids() os_unsigned_int32* get_pids( ); Returns an array of integers indicating the process IDs of the processes preventing lock acquisition. This array is parallel to the arrays returned by get_application_ names( ) and get_hostnames( ); that is, the ith element of get_pids( ) contains information about the same process as the ith elements of get_application_ names( ) and get_hostnames( ). The member function number_of_blockers( ) returns the number of elements in these arrays. Deleting the os_lock_timeout_ exception deallocates the arrays. os_lock_timeout_exception::number_of_blockers() os_int32 number_of_blockers( ); Returns the number of processes preventing lock acquisition. Release 6.3 239 os_member os_member This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a class member. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_member::Access_modifier This enumerator is a possible return value from os_member::get_kind( ), indicating an access modification to an inherited member. See os_access_modifier on page 97. os_member::Field_variable This enumerator is a possible return value from os_member::get_kind( ), indicating a bit field. See os_instantiated_class_type on page 230. os_member::Function This enumerator is a possible return value from os_member::get_kind( ), indicating a member function. See os_member_function on page 244. os_member::get_access() int get_access( ) const; Returns one of the following enumerators describing the access to the specified member: • os_member::Private • os_member::Protected • os_member::Public os_member::get_defining_class() const os_class_type& get_defining_class( ) const; Returns a reference to a const os_class_type, the type that defines the specified member. Overloading The following overloading is supported: os_class_type& get_defining_class( ); Returns a reference to a non-const os_class_type object. os_member::get_kind() int get_kind( ) const; Returns an enumerator indicating the subtype of os_member of which the specified object is a direct instance. The possible return values are os_member::Variable, os_ member::Function, os_member::Type, os_member::Access_modifier, os_ 240 C++ A P I Reference Chapter 2: Class Library member::Field_variable, os_member::Namespace, and os_ member::Relationship. os_member::is_unspecified() os_boolean is_unspecified( ) const; Returns nonzero (true) if and only if the specified os_member is the unspecified member. Some os_member-valued attributes in the metaobject protocol are required to have values in a consistent schema but might lack values in the transient schema, before schema installation or evolution is performed. The get function for such an attribute returns a reference to an os_member. The fact that a reference rather than a pointer is returned indicates that the value is required in a consistent schema. In the transient schema, if such an attribute lacks a value (because you have not yet specified it), the get function returns the unspecified member. This is the only os_ member for which is_unspecified( ) returns nonzero. os_member::Namespace This enumerator is a possible return value from os_member::get_kind( ), indicating a member function. See os_member_namespace on page 248. os_member::operator const os_access_modifier&() operator const os_access_modifier&( ) const; Provides for safe casts from const os_member to const os_access_modifier&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator const os_field_member_variable&() operator const os_field_member_variable&( ) const; Provides for safe casts from const os_member to const os_field_member_ variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator const os_member_function&() operator const os_member_function&() const; Provides for safe casts from const os_member to const os_member_function&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator const os_member_type&() operator const os_member_type&() const; Provides for safe casts from const os_member to const os_member_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator const os_member_variable&() operator const os_member_variable&() const; Provides for safe casts from const os_member to const os_member_variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. Release 6.3 241 os_member os_member::operator const os_relationship_member_ variable&() operator const os_relationship_member_variable&() const; Provides for safe casts from const os_member to const os_relationship_member_ variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_access_modifier&() operator os_access_modifier&(); Provides for safe casts from os_member to os_access_modifier&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_field_member_variable&() operator os_field_member_variable&( ); Provides for safe casts from os_member to os_field_member_variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_member_function&() operator os_member_function&( ); Provides for safe casts from os_member to os_member_function&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_member_type&() operator os_member_type&( ); Provides for safe casts from os_member to os_member_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_member_variable&() operator os_member_variable&( ); Provides for safe casts from os_member to os_member_variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::operator os_relationship_member_variable&() operator os_relationship_member_variable&( ); Provides for safe casts from os_member to os_relationship_member_variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member::Private This enumerator is a possible return value from os_member::get_access( ), indicating private access. 242 C++ A P I Reference Chapter 2: Class Library os_member::Protected This enumerator is a possible return value from os_member::get_access( ), indicating protected access. os_member::Public This enumerator is a possible return value from os_member::get_access( ), indicating public access. os_member::Relationship This enumerator is a possible return value from os_member::get_kind( ), indicating a relationship (inverse) member. See os_relationship_member_ variable on page 311. os_member::set_access() void set_access(int); Specifies an enumerator describing access to the specified member: os_ member::Private, os_member::Protected, or os_member::Public. os_member::Type This enumerator is a possible return value from os_member::get_kind( ), indicating that the specified member is a nested type definition. See os_member_ type on page 249. os_member::Variable This enumerator is a possible return value from os_member::get_kind( ), indicating a data member. See os_member_variable on page 250. Release 6.3 243 os_member_function os_member_function This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent member functions. os_member_function is derived from os_member. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_member_function::create() static os_member_function& create( const char* name, os_function_type*func_type ); Creates a member function with the specified name and of the specified type. os_member_function::get_call_linkage() os_call_linkage get_call_linkage( ) const; Returns one of the following: • os_member_function::No_linkage • os_member_function::C_linkage • os_member_function::C_plus_plus_linkage • os_member_function::Fortran_linkage os_member_function::get_function_kind() enum os_function_kind { Regular, /* applicable only if it is a member function */ Constructor, Destructor, Cast_op, /* the return type gives the cast type */ /* the operators that can be overloaded */ New_op, Delete_op, Plus_op, Minus_op, Mul_op, Div_op, Mod_op, Xor_op, And_op, Or_op, Comp_op, Not_op, Assign_op, Lt_op, Gt_op, Plus_assign_op, Minus_assign_op, Mul_assign_op, Div_assign_op, Mod_assign_op, Xor_assign_op, And_assign_op, Or_assign_op, Lsh_op, Rsh_op, Lsh_assign_op, Rsh_assign_op, Eq_op, Neq_op, Le_op, Ge_op, And_and_op, Or_or_op, Inc_op, Dec_op, Comma_op, Member_deref_op, Deref_op, Paren_op, Subscript_op, Vec_new_op, Vec_delete_op }; 244 C++ A P I Reference Chapter 2: Class Library os_function_kind get_function_kind( ) const; Returns an enumerator indicating the kind of function the specified member function is. os_member_function::get_name() const char *get_name( ) const; Returns the name of the specified member. os_member_function::get_source_position() void get_source_position( const char*& file, os_unsigned_int32& line ) const; Returns the source position associated with the specified function. os_member_function::get_type() const os_function_type& get_type( ) const; Returns an os_function_type&, which contains information about the function, including its return type and argument list. Overloadings The following is the non-const overloading of this function: const os_function_type& get_type( ); os_member_function::is_const() os_boolean is_const( ) const; Returns nonzero if and only if the specified member function is const. os_member_function::is_inline() os_boolean is_inline( ) const; Returns nonzero if and only if the specified member function is inline. os_member_function::is_overloaded() os_boolean is_overloaded( ) const; Returns nonzero if and only if the specified member function is overloaded. os_member_function::is_pure_virtual() os_boolean is_pure_virtual( ) const; Returns nonzero if and only if the specified member function is pure virtual. os_member_function::is_static() os_boolean is_static( ) const; Returns nonzero if and only if the specified member function is static. Release 6.3 245 os_member_function os_member_function::is_virtual() os_boolean is_virtual( ) const; Returns nonzero if and only if the specified member function is virtual. os_member_function::is_volatile() os_boolean is_volatile( ) const; Returns nonzero if and only if the specified member function is volatile. os_member_function::set_call_linkage() void set_call_linkage(os_call_linkage); Passes one of the following: • os_member_function::No_linkage • os_member_function::C_linkage • os_member_function::C_plus_plus_linkage • os_member_function::Fortran_linkage os_member_function::set_is_const() void set_is_const(os_boolean); The value 1 specifies that the member function is const; 0 specifies that it is nonconst. os_member_function::set_is_inline() void set_is_inline(os_boolean); The value 1 specifies that the member function is inline; 0 specifies that it is not inline. os_member_function::set_is_overloaded() void set_is_overloaded(os_boolean); The value 1 specifies that the member function is overloaded; 0 specifies that it is not. os_member_function::set_is_pure_virtual() void set_is_pure_virtual(os_boolean); The value 1 specifies that the member function is a pure virtual function; 0 specifies that it is not. os_member_function::set_is_static() void set_is_static(os_boolean); The value 1 specifies that the member function is a static function; 0 specifies that it is not. 246 C++ A P I Reference Chapter 2: Class Library os_member_function::set_is_virtual() void set_is_virtual(os_boolean); The value 1 specifies that the member function is a virtual function; 0 specifies that it is not. os_member_function::set_is_volatile() void set_is_volatile(os_boolean); The value 1 specifies that the member function is volatile; 0 specifies that it is not. os_member_function::set_name() void set_name(const char* name); Sets the name of the specified member. os_member_function::set_source_position() void set_source_position( const char* file, os_unsigned_int32 line ); Sets the source position associated with the specified function. os_member_function::set_type() void set_type(os_function_type& mem_func); Sets the return type of the specified member function. Release 6.3 247 os_member_namespace os_member_namespace This class is part of the ObjectStore metaobject protocol (MOP). Because namespaces can be enclosed in namespaces, they must occur as members of namespaces. The class os_member_namespace is used to represent namespaces as members. os_member_namespace::create() static os_member_namespace& create(os_namespace* ns); Creates a member namespace for the specified os_namespace. os_member_namespace::get_namespace() const os_namespace& get_namespace() const; Returns the member namespace. Overloadings The following is the non-const overloading for this function: os_namespace& get_namespace(); os_member_namespace::set_namespace() void set_namespace(os_namespace&); Sets the member namespace. 248 C++ A P I Reference Chapter 2: Class Library os_member_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a member type definition, that is, a type definition that is nested within a class. os_member_type is derived from os_member. os_member_type::create() static os_member_type& create(os_type*); Creates a member type definition for the specified os_type. os_member_type::get_type() const os_type& get_type( ) const; Returns the type defined by the specified member type definition. Overloadings The following is the non-const overloading of this function: const os_type& get_type( ); os_member_type::set_type() void set_type(os_type&); Sets the type defined by the specified member type definition. Release 6.3 249 os_member_variable os_member_variable This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent data members. os_ member_variable is derived from os_member. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_member_variable::create() static os_member_variable& create( const char *name, os_type* value_type ); Creates an os_member_variable. The arguments specify the initial values for the attributes name and value_type. The initial values for the remaining attributes are as follows: Attribute Value storage_class os_member_variable::Regular is_field 0 is_static 0 is_persistent 0 os_member_variable::get_name() const char* get_name( ) const; Returns the name of the specified member. os_member_variable::get_offset() os_unsigned_int32 get_offset( ) const; Returns the offset in bytes of the specified member within its defining class. Signals err_mop if the specified member is an os_field_member_variable or is a static or persistent member. os_member_variable::get_size() os_unsigned_int32 get_size( ) const; Returns the size in bytes occupied by the specified member. Signals err_mop if the specified member is an os_field_member_variable. 250 C++ A P I Reference Chapter 2: Class Library os_member_variable::get_source_position() void get_source_position( const char*& file, os_unsigned_int32& line ) const; Returns the source position associated with the specified member. os_member_variable::get_storage_class() enum os_storage_class {Regular, Persistent, Static}; os_storage_class get_storage_class( ) const; Returns one of the following enumerators, indicating the storage class of the specified member: • os_member_variable::Regular • os_member_variable::Persistent • os_member_variable::Static os_member_variable::get_type() const os_type& get_type( ) const; Returns a reference to a const os_type, the value type of the specified member. Overloadings The following is the non-const overloading for this function: os_type& get_type(); Returns a reference to a non-const os_type, the value type of the specified member. os_member_variable::is_field() os_boolean is_field( ) const; Returns 1 if and only if the specified member is an os_field_member_variable. os_member_variable::is_persistent() os_boolean is_persistent( ) const; Returns 1 if and only if the specified member is a persistent data member. os_member_variable::is_static() os_boolean is_static( ) const; Returns 1 if and only if the specified member is a static data member. Release 6.3 251 os_member_variable os_member_variable::operator const os_field_member_ variable&() operator const os_field_member_variable&( ) const; Provides for safe casts from const os_member_variable to const os_field_ member_variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member_variable::operator const os_relationship_member_ variable&() operator const os_relationship_member_variable&( ) const; Provides for safe casts from const os_member_variable to const os_ relationship_member_variable&. If the cast is not permissible, err_mop_ illegal_cast is signaled. os_member_variable::operator os_field_member_variable&() operator os_field_member_variable&( ); Provides for safe casts from os_member_variable to os_field_member_ variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member_variable::operator os_relationship_member_ variable&() operator os_relationship_member_variable&( ); Provides for safe casts from os_member_variable to os_relationship_member_ variable&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_member_variable::set_name() void set_name(const char* mem_name); Specifies the name of the member specified by the this argument. ObjectStore copies the character array pointed to by the argument. os_member_variable::set_offset() void set_offset(os_unsigned_int32 offset); Sets the offset in bytes of the member specified by the this argument within its defining class. Signals err_mop if the specified member is an os_field_member_ variable or is a static or persistent member. os_member_variable::set_source_position() void set_source_position( const char* file, os_unsigned_int32 line ); Sets the source position associated with the member specified by the this argument. 252 C++ A P I Reference Chapter 2: Class Library os_member_variable::set_storage_class() void set_storage_class(os_unsigned_int32); Specifies one of the following enumerators, indicating the storage class of the member specified by the this argument: • os_member_variable::Regular • os_member_variable::Persistent • os_member_variable::Static os_member_variable::set_type() set_type(os_type& val_type); Specifies the value type of the member specified by the this argument. Release 6.3 253 os_mop os_mop This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. The members provided concern the transient schema. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_mop::bind() void os_mop::bind ( const char* hetero_set, os_schema_options* schema_options, os_boolean make_neutral_changes, os_boolean allow_schema_reorg, const char** neutral_output ); Causes all classes in the transient schema to be bound for the current architecture. A default invocation of this binding function occurs automatically when classes are installed into a database schema. This interface allows the binding to occur independently and allows additional functionality beyond the default behavior to be invoked. It is important to consider the effects of heterogeneity on schema neutralization. See ossg Neutralization Options in Chapter 5 of Building ObjectStore C++ Applications for detailed information. hetero_set can specify any heterogeneity set supported for the current platform or can be set to NULL if no heterogenity is requested. schema_options specifies the compiler options and pragmas to be used on this and other platforms. make_neutral_changes controls whether os_mop modifies the schema automatically to make it neutral. If make_neutral_changes is set to false and the schema is not neutral, the exception err_mop_not_neutral is signaled. allow_schema_reorg permits os_mop to make more complex modifications, to ensure schema neutralization. neutral_output allows the caller to receive a string containing a description of the neutralization changes or failures encountered. The caller must delete the returned string. Neutralization failures If the schema is not neutral and cannot be made neutral for some reason, the exception err_mop_cannot_neutralize is signaled. This could occur if • A schema construct is used that is incompatible with a selected heterogeneity set (such as using virtual base classes with the set1 heterogeneity set). • You fail to specify allow_schema_reorg when necessary (virtual base classes often require this). • You fail to specify a schema_options argument with the necessary options. 254 C++ A P I Reference Chapter 2: Class Library See Building ObjectStore C++ Applications, Chapter 5, Building Applications for Multiple Platforms, for more details on schema neutralization options and regulations. os_mop::copy_classes() static void copy_classes( const os_schema& schema, os_const_classes& classes ); Copies the specified classes into the transient schema. If any of the given classes is not well formed or is not from the given schema, or the given schema is the transient schema, an exception is raised. os_mop::current() static os_schema& current(); Returns the schema currently bound. The bound schema is the one in which dynamically created types are deposited. After initialization of schema services, the current schema is bound to the schema found in the transient database. os_mop::find_namespace() static os_namespace* find_namespace(const char* name); Returns the os_namespace associated with the given name in the os_ schema denoted by os_mop::current(). os_mop::find_type() static os_type* find_type(const char* name); Returns a pointer to the type in the transient schema with the specified name; returns 0 if there is no such type. os_mop::get_failure_classes() os_classes osmop::get_failure_classes (); Following a call to bind() and before a call to os_mop::reset() or os_database_ schema::install(), the function get_failure_classes() returns the classes for which no valid neutralization was found. This list should be empty except after a call to bind() that results in the exception err_mop_cannot_neutralize. Note that the neutralization failure of a class can hide further neutralization failures because no attempt is made to neutralize types derived from or that embed failing classes. os_mop::get_neutralized_classes() os_classes osmop::get_neutralized_classes(); Following a call to os_mop::bind() and before a call to os_mop::reset() or os_ database_schema::install(), the function get_neutralized_classes() returns the classes for which changes were required. If the previous call to os_ Release 6.3 255 os_mop mop::bind() resulted in the exception err_mop_cannot_neutralize, this list is not necessarily complete. os_mop::get_transient_schema() static os_schema& get_transient_schema( ); Returns a reference to the transient schema. os_mop::initialize() static void initialize( ); Must be called before you use the transient schema, that is, before you create any schema objects and before you copy any classes into the transient schema. os_mop::initialize_object_metadata() static void os_mop::initialize_object_metadata( void* obj, const char* type_name ); This interface initializes the compiler metadata, if any, associated with the object. The object instance can be transient or persistent; however, the schema for its class must be present in the application schema. If the object is transient, the type_name argument must be non-NULL and indicate the name of the class of the object. If the object is persistent, type_name can be NULL. If non-NULL, it must match exactly the real type of the object; otherwise, an exception is generated. For example, names returned by the os_types or os_mop subsystem are safe to use and will match correctly. The best method is to pass a null type_name when the instance is persistent. This call must be made inside a transaction. The object pointer must be a pointer to a valid top-level object. Pointers to embedded objects generate an exception in the case of persistent pointers in which this case can be verified. In the case of transient instances, no such checking is possible, and a bad initialization could result. Top-level arrays must be initialized one element at a time. The object pointer must point beyond any vector headers in a top-level array. Embedded arrays within objects are initialized correctly. Also, any compiler metadata inside a union with discriminants is not initialized. It is very difficult to arrange to call uniondiscriminant functions during this initialization. Virtual base class pointers, vector headers, and any other compiler metadata are not affected by this interface. It also has no effect on normal class data. os_mop::reset() static void reset (); Resets the portion of schema services responsible for the access and construction of schema types through the MOP interface. After this operation, the current schema is empty. 256 C++ A P I Reference Chapter 2: Class Library os_named_indirect_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ typedef. This class is derived from os_anonymous_indirect_type. Performing os_ anonymous_indirect_type::get_target_type( ) on an os_named_indirect_ type results in the type named by the typedef. os_named_indirect_type::create() static os_named_indirect_type& create( os_type* target, const char* ); Creates an os_named_indirect_type. os_named_indirect_type::get_name() const char* get_name( ) const; Returns the name of the specified typedef. os_named_indirect_type::get_source_position() void get_source_position( const char*& file, os_unsigned_int32& line ) const; Returns the source position associated with the specified typedef. os_named_indirect_type::set_name() const char* set_name( ) const; Sets the name of the specified typedef. os_named_indirect_type::set_source_position() void set_source_position( const char* file, os_unsigned_int32 line ); Sets the source position associated with the specified typedef. Release 6.3 257 os_namespace os_namespace This class is part of the ObjectStore metaobject protocol (MOP). os_namespace::create() static os_namespace& create(const char* name); Creates a namespace for the specified name. Overloadings The following overloading is supported: static os_namespace& create( const char* name, os_members& mems ); Creates a namespace for the specified name and members. os_namespace::get_enclosing_namespace() const os_namespace* get_enclosing_namespace() const; Returns the enclosing namespace if one exists; otherwise, returns 0. Overloadings The following is the non-const overloading for this function: os_namespace* get_enclosing_namespace(); os_namespace::get_members() os_const_members get_members() const; Returns the members of the namespace. Overloadings The following is the non-const overloading for this function: os_members get_members(); os_namespace::get_name() const char* get_name() const; Returns the members of the namespace. os_namespace::set_enclosing_namespace() const os_namespace* set_enclosing_namespace() const; Returns the enclosing namespace if one exists; otherwise, returns 0. Overloadings The following is the non-const overloading for this function: os_namespace* set_enclosing_namespace(); os_namespace::set_members() typedef os_List<os_members*> os_members; void set_members(os_members& mem_list); Uses mem_list to set the members of the namespace. 258 C++ A P I Reference Chapter 2: Class Library os_namespace::set_name() void set_name(const char* name); Sets the name of the namespace. Release 6.3 259 os_notification os_notification Objects of class os_notification represent notifications for sending and receiving. A notification object embodies a database location (os_soft_pointer), a signed 32bit integer kind, and a null-terminated C string. os_notification::assign() void assign( const os_soft_pointer<void>& loc, os_int32 kind=0, const char* string=0 ); Notifications can be reassigned using the assign member function. This is most useful when allocating arrays of notifications. When passing database locations to os_notification member functions, you need not explicitly convert to os_soft_pointer. You can retrieve the components of a notification by using the following accessor functions. os_notification::get_database() os_database* get_database()const; Retrieves the database associated with the notification. os_notification::get_kind() os_int32 get_kind()const; Retrieves the kind associated with the notification. os_notification::_get_fd() Returns a file descriptor that can be used to detect whether any notifications exist. The only legal operation on this file descriptor is to call select() or poll(), to determine whether any data has been received. If data has been received, a notification has been queued for this application. It can be retrieved using os_ notification::receive(). After retrieving a notification, you can test for further notifications again by using select() or poll(). (That is, os_notification::receive() resets the notification_fd to the not ready state unless further notifications are pending.) This function is not available on all platforms and configurations because file descriptors are not used portably on all platforms. If notifications are not delivered using an fd mechanism, this function returns –1. Note 260 Using this fd for any purpose other than poll() or select() could cause unexpected application behavior. The cache manager and/or ObjectStore server could disconnect from the client. C++ A P I Reference Chapter 2: Class Library os_notification::get_location() os_soft_pointer<void> get_location() const; Retrieves the reference associated with the notification. os_notification::get_string() const char* get_string()const; Retrieves the string associated with the notification. The following are member functions that provide shortcuts for the static member functions also defined for this class: void notify_immediate(); void notify_on_commit(); A public enumeration in class os_notification represents the maximum string length usable in notifications: enum {maximum_string_length = 16383}; A public enumeration in class os_notification represents the maximum notification queue size: enum {maximum_notification_queue_length = 512}; os_notification::notify_immediate() static void notify_immediate( const os_soft_pointer<void>& loc, os_int32 kind = 0, const char* string = 0, os_int32* n_queued = 0 ); static void notify_immediate( const os_notification* notifications, os_int32 n_notifications = 1, os_int32* n_queued = 0 ); Posts a notification to the object specified by loc. The database associated with loc must be open. The kind and string arguments are arguments sent to the receiving process. Note The kind argument must be greater than or equal to 0. Negative kind arguments are reserved for future use by ObjectStore. If the string specified is null (0), it is received as an empty string (""). If supplied, the n_queued argument is a signed 32-bit integer (or an array of n_ notifications integers). This integer is set to the number of receiving processes to which notifications were queued. Note that because notifications are asynchronous, no guarantees can be made that the process will ever receive the notification. (The receiving process might terminate before receiving the notification, it might never check for notifications, the ObjectStore server might crash, the cache manager might crash, or the notification queue could overflow.) Release 6.3 261 os_notification In the second (array) form of notify_immediate(), the n_queued argument, if specified, is an os_int32 array at least n_notifications long. The elements of the array are set to the number of receiving processes for each notification specified. Each call results in a single RPC call to each ObjectStore server. It is significantly more efficient to make one call with an array of notifications than to make many calls, each with its own notification. If the caller does not require the n_queued information, it should leave n_queued defaulted to 0. This could result in better performance in future releases. The notify_immediate() operation is not atomic. That is, if an error is signaled, the status of notifications is undefined. For example, notifications might have been delivered successfully to one server before a second server signals an error with respect to its notifications. os_notification::notify_on_commit() static void notify_on_commit( const os_soft_pointer<void> &loc, os_int32 kind = 0, const char* string = 0 ); static void notify_on_commit( const os_notification* notifications, os_int32 n_notifications = 1 ); Queues a commit-time notification to the object specified by loc. The database associated with loc must be open and there must be a transaction in progress. The notification is delivered when, and if and only if, • No enclosing transaction aborts. • The enclosing top-level transaction commits. The kind and string arguments are sent to the receiving processes after the commit completes. If the string specified is null (0), it is received as an empty string (""). Notification delivery and commit are an atomic operation from the perspective of the process sending the notification. That is, if the commit succeeds, the notifications are guaranteed to be sent, even if the sending application crashes. Note, however, that the notifications themselves are transient and might be lost if there is a server failure, cache manager failure, notification queue overflow, or a receiving process dies. The notifications are matched with subscriptions immediately after the commit succeeds. Because of this, there is no way to determine the number of processes that have been queued to receive notifications. If a deadlock occurs during a lexical transaction, ObjectStore aborts and automatically restarts the transaction. In this case, because the transaction aborted, commit-time notifications are discarded and execution resumes at the beginning of the lexical transaction. os_notification::notify_on_commit() does not immediately perform an RPC call to the server. If there are any calls to os_notification::notify_on_commit() 262 C++ A P I Reference Chapter 2: Class Library during a top-level transaction and the transaction commits, there is one additional RPC call to each server at commit time. In some read-only transactions, the ObjectStore client does not normally have to communicate with servers. If os_notification::notify_on_commit() is called during such a read-only transaction, the server must be contacted during the commit. If a database is closed after a notify_on_commit() but before committing the transaction, the notification is still delivered on successful commit. The database must be open when notify_on_commit() is called. os_notification::os_notification() os_notification( const os_soft_pointer<void>& loc, os_int32 kind=0, const char* string=0 ); Notifications can be created using a constructor that specifies all these elements. The os_notification object copies its string argument when the object is created and deletes the storage for the string copy when it is deleted. Overloadings The following overloading is supported: os_notification(); Notifications can also be allocated in arrays (see os_subscription on page 396). The default constructor for os_notification produces an uninitialized notification. os_notification::queue_status() static void queue_status( os_unsigned_int32& queue_size, os_unsigned_int32& count_pending_notifications, os_unsigned_int32& count_queue_overflows ); Returns information on the notification queue for the current process. If count_ pending_notifications is greater than 0, notifications are pending. This function can be used as a polling function to determine whether there are notifications without actually retrieving them. It does not lock out other ObjectStore operations in other threads. Generally, applications should call this at least once after each notification is retrieved to ensure that there are no queue overflows and to perform appropriate actions if there are. Release 6.3 263 os_notification Values returned are as follows: Return Values Meaning queue_size The size of the notification queue, as set by os_ notification::set_queue_size(), OS_ NOTIFICATION_QUEUE_SIZE, or defaulted. count_pending_ notifications The number of notifications currently in the queue, that is, notifications that have not yet been received by the process using os_ notification::receive(). count_queue_overflows The number of notifications discarded since the process started. A value of 0 indicates that no notifications have been discarded since this process began. os_notification::receive() static os_boolean receive( os_notification*& notification, os_int32 timeout = -1 ); Gets the next notification from the notification queue, if available. If a notification is available, it returns true and places the notification in the first argument. Otherwise, it returns false and the first argument is unmodified. If the notification queue is currently empty, the function waits as specified by the timeout argument. A value of –1 means to wait forever until a notification is received. A value of 0 means to return false immediately. A positive integer means to wait the specified number of milliseconds. On some platforms, this value is rounded up to the next higher number of seconds. The notification returned is allocated dynamically in transient storage. When the application finishes using it, it can be deleted using the C++ delete operator. (This causes the notification string to be deleted as well.) os_notification::receive() uses operating system primitives for waiting; it does not spin, polling for notifications. Users normally call this function in a separate thread that exists specifically to receive notifications. Only one thread can call os_notification::receive() at any one time. It is an error to call os_notification::receive() in multiple threads simultaneously. Only os_notification::receive() and os_notification::queue_status() can be called asynchronously with other ObjectStore operations. All other APIs, including the os_notification accessors, are subject to normal thread-locking rules. This means that the retrieved notifications cannot be accessed in concurrent threads without locking out ObjectStore threads. If os_notification::receive() is called before you subscribe to notifications, it returns false immediately, regardless of the timeout argument. This is to avoid deadlocks in some situations involving multiple threads. To avoid this, ensure that 264 C++ A P I Reference Chapter 2: Class Library os_notification::subscribe() or os_notification::_get_fd() is called before calling os_notification::receive() or before launching a thread that calls os_notification::receive(). With long strings, os_notification::receive() might have to wait slightly for the entire string, even if timeout==0 is specified. os_notification::set_queue_size() static void set_queue_size( os_unsigned_int32 queue_size ); Sets the size of the notification queue for a process. It must be called before os_ notification::subscribe() or os_notification::_get_fd(). If this function is not called, the queue size is determined by the value of the OS_NOTIFICATION_ QUEUE_SIZE environment variable. If the environment variable is not set, the queue size is set to a default value, currently 50. A public enumeration in class os_notification represents the maximum notification queue size: enum {maximum_notification_queue_length = 16384}; Notification queues are part of the ObjectStore cache manager process. os_notification::subscribe() static void subscribe( const os_subscription* sub, os_int32 number_of_elements = 1 ); Subscribes to one or more os_subscription objects that were created to perform subscribe operations while using the notifications API. If sub is an array, number_ of_elements must be greater than 1. The database must be open. Closing the database immediately unsubscribes all locations in the database. If a database location is subscribed more than once, the notification system behaves as if there were only one subscription on the location. That is, except for the first, all subscriptions to the same location are ignored. Each call results in a single RPC call to each ObjectStore server. It is significantly more efficient to make one call with an array of subscriptions than to make many calls, one with each subscription. The subscription operation is not atomic. That is, if an error is signaled, the status of subscriptions is undefined. For example, subscriptions might have succeeded on one server before a second server signals an error with respect to its subscriptions. Overloadings Release 6.3 The following overloadings subscribe to receive notifications in a database, a segment, a cluster, or an address range. A subscription in a database, segment, or cluster applies to all addresses in the database, segment, or cluster—even addresses not yet allocated. 265 os_notification static void subscribe( const os_database* db ); static void subscribe( const os_segment* seg ); static void subscribe( const os_cluster* clstr ); static void subscribe( const os_soft_pointer<void>& addr_range, os_int32 number_of_bytes = 1 ); os_notification::unsubscribe() static void unsubscribe( const os_subscription* sub, os_int32 number_of_elements = 1 ); Unsubscribes to one or more os_subscription objects that were created to perform subscribe operations while using the notifications API. If sub is an array, number_ of_elements must be greater than 1. Closing a database automatically unsubscribes all notifications for the database. Because notifications are processed asynchronously, an application might continue to receive notifications after having unsubscribed. Each call results in a single RPC call to each ObjectStore server. It is much more efficient to make one call with an array of subscriptions than to make many calls, one with each subscription. The unsubscription operation is not atomic. That is, if an error is signaled, the status of unsubscriptions is undefined. For example, unsubscriptions might have succeeded on one server before a second server signals an error with respect to its unsubscription. Overloadings The following overloadings unsubscribe to notifications in a database, a segment, a cluster, or an address range: static void unsubscribe( const os_database* db ); static void unsubscribe( const os_segment* seg ); static void unsubscribe( const os_cluster* clstr ); static void unsubscribe( const os_soft_pointer<void>& addr_range, os_int32 number_of_bytes = 1 ); 266 C++ A P I Reference Chapter 2: Class Library If a subscription was made on an entire database, the only way to remove it is to unsubscribe the entire database; you cannot selectively unsubscribe segments or database locations. If a subscription was made on an entire segment, the only way to remove it is to unsubscribe the entire database or unsubscribe the entire segment. You cannot selectively unsubscribe database locations within the segment. If a subscription was made on a cluster or address range, ranges can be selectively unsubscribed within the original cluster or range. Notes • If os_notification::queue_status() is called before os_ notification::subscribe() or os_notification::_get_fd(), all values returned are 0. • n_queued can sometimes be larger than queue size. • In general, queue_status() should be called in the same thread as os_ notification::receive(). • If queue_status() is called in another thread while os_ notification::receive() is in process, - os_notification::receive() might not actually retrieve a notification. - n_queued might not actually reflect the receipt of this notification. • If n_queued is nonzero, os_notification::receive() might still sometimes return 0 (false), particularly if receive() is called with a zero timeout. This happens if the cache manager cannot empty its queue as fast as the receiving process is calling os_notification::receive(). Network service When an ObjectStore application uses notifications, it automatically establishes a second network connection to the cache manager daemon on the local host. The application uses this connection to receive and acknowledge the receipt of incoming notifications from the cache manager. (Outgoing notifications are sent to the server, not the cache manager.) For more information, see Managing ObjectStore. Notification errors The notification APIs do not do complete validation of the arguments passed to them. Malformed arguments can therefore cause segmentation violations or other undefined behavior. See General ObjectStore Exceptions on page 501 for details. Utilities ossvrstat currently prints statistics on the number of notifications received and sent by the server. oscmstat prints information on notifications queued for clients. This is useful in debugging applications that use notifications. For more information on these user interfaces, see Managing ObjectStore. Release 6.3 267 os_object_cursor os_object_cursor An object cursor allows retrieval of the objects stored in a specified cluster or segment, one object at a time, in an arbitrary order. This order is stable across traversals of the cluster or segment, as long as no objects are created or deleted and no reorganization is performed (using schema evolution or compaction). Operations are provided for creating a cursor, advancing a cursor, and for testing whether a cursor is currently positioned at an object (or has run off the end of the cluster or segment). It is also possible to position a cursor at a specified object. In addition, an operation is provided for retrieving the object at which a cursor is positioned, together with an os_type representing the type of the object, and, for an object that is an array, a number indicating how many elements it has. os_object_cursor::current() os_boolean current( void*& p, const os_type*& type, os_int32& count ) const; If the cursor is positioned at an object, returns nonzero (true), sets p to refer to the address of the object, and sets type to refer to an os_type representing the object’s type. If the object is an array, count is set to refer to the number of elements it has; if the object is not an array, count is set to 0. If the cursor is not positioned at an object, 0 (false) is returned, and all three arguments are set to refer to 0. os_object_cursor::first() void first( ); Positions the cursor at the first object in the cursor’s associated cluster or segment. The object is first in an arbitrary order that is stable across traversals of the cluster or segment, as long as no objects are created or deleted and no reorganization is performed (using schema evolution or compaction). If there are no objects in the cursor’s associated cluster or segment, the cursor is positioned at no object. os_object_cursor::more() os_boolean more( ) const; Returns nonzero (true) if the cursor is positioned at an object. Returns 0 (false) otherwise. os_object_cursor::next() void next( ); Positions the cursor at the next object in the cursor’s associated cluster or segment. The object is next in an arbitrary order that is stable across traversals of the cluster or segment, as long as no objects are created or deleted and no reorganization is performed (using schema evolution or compaction). If the cursor is positioned at no 268 C++ A P I Reference Chapter 2: Class Library object, err_cursor_at_end is signaled. Otherwise, if there is no next object, the cursor is positioned at no object. os_object_cursor::os_object_cursor() os_object_cursor(const os_cluster* clstr); os_object_cursor(const os_segment* seg); Creates a new os_object_cursor associated with the specified cluster or segment. If the cluster or segment is empty, the cursor is positioned at no object; otherwise, it is positioned at the first object in the cursor’s associated cluster or segment. The object is first in an arbitrary order that is stable across traversals of the cluster or segment, as long as no objects are created or deleted and no reorganization is performed (using schema evolution or compaction). os_object_cursor::release_address_space() void release_address_space(); Release the entire persistent address space while preserving the state of this object cursor only. Overloading The following overloading is supported: void release_address_space( os_address_space_marker& marker, os_boolean unmap_all_fast = 0); Release address space by calling marker.release() while preserving the state of this object cursor only. If the unmap_all_fast argument is nonzero (true), ObjectStore unmaps the entire PSR. Such an operation takes less time than unmapping only the marked pages. Note, however, that setting unmap_all_fast to true can decrease performance by causing the application to take more page faults after releasing the marker. The default — unmap_all_fast is set to 0 (false) — is to unmap only the marked pages. If you use the unmap_all_fast argument, you should set it to true only when you are sure that the application will no longer need to access the unmapped pages or is near the end of a transaction, when all pages in the PSR will be unmapped anyway. os_object_cursor::reset() void reset(const void* p); Moves the cursor to the object at the address p. If p points to deleted space, the cursor is positioned at the object immediately after that address. If there is no object after the deleted space, err_cursor_not_at_object is signaled. Release 6.3 269 os_object_cursor os_object_cursor::set() void set(const void* p); Positions the cursor at the object containing the address p. If p is not an address in the specified cursor’s associated cluster or segment, signals err_cursor_not_at_ object. If p is in the cursor’s associated cluster or segment but within unallocated space, the cursor is positioned at no object or is arbitrarily positioned at an object in the cluster or segment. os_object_cursor::~os_object_cursor() ~os_object_cursor( ); Performs internal maintenance associated with os_object_cursor deallocation. 270 C++ A P I Reference Chapter 2: Class Library os_path_to_data An os_path_to_data object denotes an unambiguous path to a base class or a data member of a class. Because there may be a number of possible paths to a component of a virtual base class, paths to virtual base class components merit special attention. All virtual base classes are treated as though they are immediate base classes of the root class of the path. This rule permits an unambiguous specification of a path that traverses a virtual base class. The os_path_to_data object is used by user-defined untranslatable pointer handlers during schema evolution. (For more information about untranslatable pointer handlers, see os_untranslatable_pointer_handler on page 448). The os_path_to_data class is part of the ObjectStore metaobject protocol (MOP). os_path_to_data::add() Methods for building up a path by adding components. In the case of a virtual base class, the base class must be the one that represents the actual allocated storage. There are three overloadings: void add(const os_base_class& b); Adds a base class component. void add(const os_member_variable& m); Adds a simple member selection component. void add( const os_member_variable& m, os_unsigned_int32 subscript); Adds a subscripted member component. os_path_to_data::bit_offset() os_unsigned_int32 bit_offset() const; Returns the offset in bits to the datum at the end of the path, starting from the root class. os_path_to_data::byte_offset(); os_unsigned_int32 byte_offset() const; Returns the offset in bytes to the datum at the end of the path starting from the root class. Wrong if not byte-aligned. os_path_to_data::get_root() const os_class_type& get_root() const; Returns the class in which the path is rooted. Release 6.3 271 os_path_to_data os_path_to_data::get_total_number_of_elements() os_unsigned_int32 get_total_number_of_elements() const; Gets the total number of elements (for example, array[2][2] returns 4) for the path to a member with arrayness. An assertion violation occurs if to_subscript() == false. os_path_to_data::has_array_components() os_boolean has_array_components() const; Returns true if there are any array components in the path. os_path_to_data::is_base_path () os_boolean is_base_path() const; Returns true if this is a path to a base class component. os_path_to_data::is_member_variable_path() os_boolean is_member_variable_path() const; Returns true if path can be interpreted to a data member. os_path_to_data::local_path() os_path_to_data* local_path() const; Returns the path relative to the most derived enclosing class along the path, stripping off all preceding member selections, if any. os_path_to_data::make() There are two overloadings: static os_path_to_data* make(const os_class_type& root_class); Constructs a path that consists of just the class root_class. static os_path_to_data* make( const os_path_to_data& other_path); Constructs a path that is a copy of another path. You can call pop() and add() to make adjustments to the copy. os_path_to_data::minor_subscript() os_unsigned_int32 minor_subscript() const; Gets the minor subscript associated with the path. It assumes to_subscript() == true. os_path_to_data::name() char *name() const; Returns a unique string suitable for printing associated with the path. The caller must free the string when done with it. 272 C++ A P I Reference Chapter 2: Class Library os_path_to_data::outer_collocated_path() os_path_to_data* outer_collocated_path() const; Returns a path to the outermost base class or member located at exactly the same address as the object at the end of the current path. os_path_to_data::outer_path() os_path_to_data& outer_path( os_boolean remove_indexing = false) const; Returns a simple path to the outermost base class, member, or dope relative to the root class. If remove_indexing is true, outermost member subscripts and union member offsets are converted to ordinary members. os_path_to_data::pop() void pop(); Removes and deletes the last component in the path. os_path_to_data::to_bit_field() os_boolean to_bit_field() const; Returns true if it is a path to a bit field. os_path_to_data::to_dope() os_boolean to_dope() const; Returns true if it is a path to internal representation dope. os_path_to_data::to_static_member() os_boolean to_static_member() const; Returns true if it is a path to a static data member. os_path_to_data::to_subscript() os_boolean to_subscript() const; Returns true if it is a path to a member with arrayness. os_path_to_data::type() os_type* type() const; The type of the datum at the end of the path. Return NULL when there is no type that can be associated with the path. This can happen in one of two ways: • There are multiple possible types, since it ends in a union offset component. • The path leads to internal dope. os_path_to_data::unique_name() char *unique_name() const; Release 6.3 273 os_path_to_data A truly unique string suitable for printing associated with the path. The caller must free the string when done with it. 274 C++ A P I Reference Chapter 2: Class Library os_pathname_and_segment_number This class is used by the compactor API to identify segments; see os_ compact::compact() on page 142. For information about identifying a cluster for compaction, see os_pathname_segment_cluster on page 276. Required header file Programs using this function must include <ostore/compact.hh>. os_pathname_and_segment_number::database_pathname const char* database_pathname; The value of this member is the path name of the database containing the segment identified by the specified os_pathname_and_segment_number. os_pathname_and_segment_number::os_pathname_and_ segment_number() os_pathname_and_segment_number( const char* db, os_unsigned_int32 seg_num ); The constructor takes two arguments. The db argument initializes the member database_pathname, and the seg_num argument initializes the member segment_ number. os_pathname_and_segment_number::segment_number os_unsigned_int32 segment_number; The value of this member is the segment number of the segment identified by the specified os_pathname_and_segment_number. The segment number of a specified segment can be obtained using os_segment::get_number() on page 357. Release 6.3 275 os_pathname_segment_cluster os_pathname_segment_cluster This class is used by the compactor API to identify clusters; see os_ compact::compact() on page 142. For information about identifying a segment for compaction, see os_pathname_and_segment_number on page 275. Required header file Programs using this function must include <ostore/compact.hh>. os_pathname_segment_cluster::database_pathname const char* database_pathname; The value of this member is the path name of the database containing the segment identified by the os_pathname_segment_cluster object. os_pathname_segment_cluster::os_pathname_segment_ cluster() os_pathname_segment_cluster( const char* db, os_unsigned_int32 seg_num os_unsigned_int32 clstr_num ); The constructor takes three arguments. The db argument initializes the member database_pathname, seg_num initializes the member segment_number, and clstr_ num initializes the member cluster_number. os_pathname_segment_cluster::cluster_number os_unsigned_int32 cluster_number; The value of this member is the number of the cluster identified by the os_ pathname_segment_cluster object. For information about obtaining the number of a cluster, see os_cluster::get_number() on page 133. os_pathname_segment_cluster::segment_number os_unsigned_int32 segment_number; The value of this member is the number of the segment identified by the os_ pathname_segment_cluster object. For information about obtaining the number of a segment, see os_segment::get_number() on page 357. 276 C++ A P I Reference Chapter 2: Class Library os_persistent_to_transient_pointer_manager The os_persistent_to_transient_pointer_manager class is an abstract base class from which you derive a concrete class for managing persistent pointers to transient objects. os_persistent_to_transient_pointer_manager::release() virtual void release(void* p) = 0; Your concrete class must define a release() function to be called by ObjectStore in response to an application call to objectstore::release_cleared_persistent_ to_transient_pointers(). This function is responsible for handling applicationspecific details of the persistent-to-transient connection. For example, the release() function could decrement a use count on the transient object and delete the object when appropriate. The release() function runs without holding the session lock. The application should not delete the user-defined manager while there is any possibility that ObjectStore retains a pointer to it For more information on persistent pointers to transient objects, see: • objectstore::change_type() • objectstore::release_cleared_persistent_to_transient_pointers() • objectstore::set_persistent_to_transient_pointer() • Persistent Pointers to Transient Objects on page 32 in the Advanced C++ A P I User Guide. Release 6.3 277 os_Planning_action os_Planning_action This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It is an abstract base class that specifies the protocol for a user-defined class derived from it. The derived class handles dump planning, including the identification of objects for which object forms should not be generated. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Planning_action that can be implemented in the derived class. The class type_ planner is a class that is derived from os_Planning_action for customization of the dumping of the type type. os_Planning_action::operator ()() void type_planner::operator () ( const os_type& actual_type, void* obj ) Marks the objects that should be skipped during the generation of object forms. (The objects should be skipped because they will be created during the fixup of other objects.) See Implementing operator ()() in the Advanced C++ A P I User Guide for information on implementing this function. 278 C++ A P I Reference Chapter 2: Class Library os_pointer_literal This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ pointer literal. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. os_pointer_literal::create() static os_pointer_literal& create( const char* name, os_pointer_type* ); Creates an os_pointer_literal of the specified name and type. os_pointer_literal::get_name() const char* get_name( ) const; Returns the name of the specified literal. os_pointer_literal::get_type() os_pointer_type& get_type( ) const; Returns the type of the specified pointer. os_pointer_literal::set_name() void set_name(const char*); Sets the name of the specified literal. os_pointer_literal::set_type() void set_type(os_pointer_type&); Sets the type of the specified pointer. Release 6.3 279 os_pointer_to_member_type os_pointer_to_member_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ pointer-tomember type. This class is derived from os_pointer_type. os_pointer_to_member_type::create() static os_pointer_to_member_type& create( os_type* target, os_class_type* ); The argument is used to initialize target_class and target_type. os_pointer_to_member_type::get_target_class() const os_class_type& get_target_class( ) const; Returns the class associated with the specified pointer-to-member. Overloadings The following is the non-const overloading of this function: os_class_type& get_target_class( ); os_pointer_to_member_type::set_target_class() void set_target_class(os_class_type&); Sets the class associated with the specified pointer-to-member. 280 C++ A P I Reference Chapter 2: Class Library os_pointer_type class os_pointer_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ pointer type. This class is derived from os_type. os_pointer_type::create() static os_pointer_type& create(os_type* target); The argument is used to initialize the attribute target_type. os_pointer_type::get_target_type() const os_type& get_target_type( ) const; Returns the type of object pointed to by instances of the specified pointer type. os_pointer_type::set_target_type() void set_target_type(os_type&); Sets the type of object pointed to by instances of the specified pointer type. Release 6.3 281 os_pragma os_pragma This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ pragma. os_pragma::create() static os_pragma& create(const char*); Creates a new pragma and associates the specified string with it. os_pragma::get_string() const char* get_string( ) const; Returns the string associated with the specified pragma. os_pragma::is_recognized() os_boolean is_recognized( ) const; Returns nonzero if the specified pragma is recognized. 282 C++ A P I Reference Chapter 2: Class Library os_rawfs_entry The functions os_dbutil:stat( ) and os_dbutil::list_directory( ) return pointers to instances of this class. Each os_rawfs_entry represents a rawfs directory, database, or link. os_rawfs_entry::get_abs_path() const char* get_abs_path( ) const; Returns the absolute path name for the specified entry. os_rawfs_entry::get_creation_time() os_unixtime_t get_creation_time( ) const; Returns the creation time for the specified entry. os_rawfs_entry::get_group_name() const char* get_group_name( ) const; Returns the name of the primary group for the specified entry. os_rawfs_entry::get_link_host() const char* get_link_host( ) const; Returns the name of the host for the target of the link represented by the specified entry. If the entry does not represent a link, 0 is returned. os_rawfs_entry::get_link_path() const char* get_link_path( ) const; Returns the path name of the target of the link represented by the specified entry. If the entry does not represent a link, 0 is returned. os_rawfs_entry::get_n_sectors() os_unsigned_int32 get_n_sectors( ) const; Returns the number of sectors in the specified entry. os_rawfs_entry::get_name() const char* get_name( ) const; Returns the terminal component of the path name for the specified entry. os_rawfs_entry::get_permission() os_unsigned_int32 get_permission( ) const; Returns a bit-wise disjunction representing the permissions on the specified entry. Release 6.3 283 os_rawfs_entry os_rawfs_entry::get_server_host() const char* get_server_host( ) const; Returns the name of the host for the specified entry. os_rawfs_entry::get_type() os_int32 get_type( ) const; Returns an enumerator indicating whether the specified entry represents a directory, database, or link. One of the following enumerators is returned: • os_rawfs_entry::OSU_DIRECTORY • os_rawfs_entry::OSU_DATABASE • os_rawfs_entry::OSU_LINK os_rawfs_entry::get_user_name() const char* get_user_name( ) const; Returns the name of the user for the specified entry. os_rawfs_entry::is_db() os_boolean is_db( ) const; Returns nonzero if the specified entry represents a database; returns 0 otherwise. os_rawfs_entry::is_dir() os_boolean is_dir( ) const; Returns nonzero if the specified entry represents a directory; returns 0 otherwise. os_rawfs_entry::is_link() os_boolean is_link( ) const; Returns nonzero if the specified entry represents a link; returns 0 otherwise. os_rawfs_entry::operator =() os_rawfs_entry& operator =(const os_rawfs_entry&); Modifies the left operand so that it is a copy of the right operand. The copy behaves like the original with respect to the member functions of os_rawfs_entry. os_rawfs_entry::os_rawfs_entry() os_rawfs_entry(const os_rawfs_entry&); Creates an os_rawfs_entry that is a copy of the specified os_rawfs_entry. The copy behaves like the original with respect to the member functions of the class os_ rawfs_entry. 284 C++ A P I Reference Chapter 2: Class Library os_rawfs_entry::~os_rawfs_entry() ~os_rawfs_entry( ); Frees storage associated with the specified os_rawfs_entry. os_rawfs_entry::OSU_DATABASE Enumerator used as possible return value for os_rawfs_entry::get_type( ), indicating that the specified os_rawfs_entry represents a database. os_rawfs_entry::OSU_DIRECTORY Enumerator used as possible return value for os_rawfs_entry::get_type( ), indicating that the specified os_rawfs_entry represents a directory. os_rawfs_entry::OSU_LINK Enumerator used as possible return value for os_rawfs_entry::get_type( ), indicating that the specified os_rawfs_entry represents a link. Release 6.3 285 os_real_type os_real_type class os_real_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ floating type. This class is derived from os_type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_real_type::create() static os_real_type& create(const char*); Creates an os_real_type representing the type with the specified name. os_real_type::create_double() static os_real_type& create_double( ); Creates an os_real_type representing the type double. os_real_type::create_float() static os_real_type& create_float( ); Creates an os_real_type representing the type float. os_real_type::create_long_double() static os_real_type& create_long_double( ); Creates an os_real_type representing the type long double. 286 C++ A P I Reference Chapter 2: Class Library os_recover The os_recover class provides the means to perform a database recovery from an ObjectStore application. The ObjectStore application recovers the database from an archive image that you create with the osarchiv utility or with an ObjectStore application that uses methods of the os_archive classes. For more information on using a command-line utility to recover databases, see osrecovr in Managing ObjectStore. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_recover::os_recover() os_recover(const char* recover_ID) Constructs the necessary class for recovering databases. The recover_ID argument should be a unique character string identifying this recovery process in the backrest log, as described in os_dbutil::start_backrest_logging() on page 191. os_recover::~os_recover() ~os_recover(); Performs internal cleanup of the recovery process. Calling ~os_recover() while the recovery process is running will abort the recovery. os_recover::get_status() os_int32 get_status(); Returns the current status of the recovery process. The possible return values are: Return Value Meaning -1 The recovery process is still running. 0 The recovery process has either completed successfully or has not yet started. 1 The recovery process has failed. Check the backrest log for additional information. os_recover::start_and_run_recover() os_boolean start_and_run_recover( os_recover_options & options); Starts and runs the recovery process to completion. The options calling argument should have the necessary data members set. A return code of zero indicates the restore process successfully completed. For a non-zero return code, check the backrest log for further information. For information about the options you can use, see os_recover_options on page 289. Release 6.3 287 os_recover os_recover::start_recover() void start_recover(os_recover_options & options); Starts the recovery process in a separate thread and then returns immediately. The options calling argument should have the necessary data members set. After calling start_recover(), call os_recover::get_status() to determine when recovery is complete. For information about the options you can use, see os_recover_options on page 289. os_recover::stop_recover() void stop_recover(); Stops the recovery process by waiting for the recover to complete before returning. After calling stop_recover(), call os_recover::get_status() to verify that the recovery was successful. 288 C++ A P I Reference Chapter 2: Class Library os_recover_options The os_recover_options class specifies data members that must be set in order for an instance of the os_recover class to recover ObjectStore databases. An instance of the os_recover_options class is used as an argument when starting the recovery process. See also os_recover on page 287 for more information on the os_recover class. For more information on using a command-line utility to recover databases, see osrecovr in Managing ObjectStore. Required header files Programs using the os_recover_options class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_recover_options class has the following public data members: os_boolean flag_auto_commits; os_boolean flag_no_recursive; os_boolean flag_list_contents; os_boolean flag_permissions; os_unsigned_int32 network_timeout; os_unsigned_int32 send_buffer_size_in_KB; os_unsigned_int32 n_archive_files; os_unsigned_int32 n_translate_pairs; os_backrest_verification_hook verification_hook; void * verification_hook_context; const char* import_file; const char* recover_date; const char* recover_time; const char** archive_files; const char** translate_paths; The following describes the public data members: flag_auto_commits When true, applies each archive log snapshot and each backup image in its own transaction. Default is false, all changes are applied in a single transaction. flag_no_recursive If a directory is specified as a target for a recover operation, setting this to true limits the recover operation to databases contained in the named directory. Default is false; all databases in the directory and its subdirectory will be recovered. flag_list_contents Setting this to true will only display all databases contained in the specified archive files when restore is started. Default is false. flag_permissions Setting this to true causes recover to restore database permissions for the rawfs stored in the archive log file for the database being recovered. Default is false. Release 6.3 289 os_recover_options network_timeout Sets the timeout value in seconds that the recovery process will wait for osserver to respond. Default is 10 hours. send_buffer_size_in_KB Specifies the buffer size in kilobytes when sending recovered data to osserver. The maximum value is 1024KB Default is 512KB, which is also the minimum value. n_archive_files Specifies the number of archive log files listed in the archive_files array. Default is zero; the import_file option must be set instead. n_translate_pairs Specifies the number of pairs of database paths listed in the translate_paths array. Default is zero verification_hook Specifies a pointer to a user defined function in the format: os_boolean my_function( const char * previous_image, const char * current_image, void* context) where previous_image is the ID from the previous backup image applied to the archive set, current_image is the ID from the current archive image, and context is user-specified data (see the verification_hook_context option, below). This function is called to ensure that the previous image has been applied before proceeding with the current image. For example, the current archive image is based on a previous backup image that should be restored before running recovery on the current image. The format of the images are: current_image "ID: 20021105135832.[2158298816,349722884,207 3045581].osarchiv" previous_image "ID: 20021105135831.[2158298816,349657348,207 3045217].0.osbackup" If the previous image has been applied, the function should return 0 to continue processing. A return of -1 will abort recovery. Default is NULL, no function defined. The verification message is sent to stdout. 290 C++ A P I Reference Chapter 2: Class Library verification_hook_context The value of this pointer is passed to verification_hook through the context calling argument. This data member should point to any user data that will be needed within the hook. Default is NULL. import_file Specifies the name of a file that contains a list of archive files or backup images from which to recover specified databases. If you specify a hyphen (-) as the import_file name, the list read from standard input. Default is NULL. recover_date Specifies a date in the current locale — for example, mm/dd/yy in the United States. Recovery rolls forward all database changes committed before or on this date Default is NULL; roll forward to the last snapshot taken. recover_time Specifies a recover-to time in HH:MM:SS format. Recovery rolls forward all database changes committed before or at this time. Default is NULL; roll forward to the last snapshot taken. archive_files Specifies an array of archive log files from which to recover committed database changes made since the last backup. The number of archive_files must correspond to the number specified in n_ archive_files. Default is NULL and the import_file option must be set instead. translate_paths Specifies an array of pairs of path names. The first path name in the pair indicates the source of the database as recorded in the archive log or backup image. The second path name indicates the target; that is, the path name for the database after it is recovered. Each path name can be a directory or a single database. However, you cannot specify a directory as the source and a database as the target. The number of translate_paths pairs must correspond to the number of pairs specified in n_translate_ pairs. Default is NULL. Member functions Release 6.3 The following functions are public members of the os_recover_options class: 291 os_recover_options os_recover_options::os_recover_options() os_recover_options(); Constructs the os_recover_options class and sets all options to their default values. os_recover_options::~os_recover_options() ~os_replicator_options() {} Performs internal cleanup. os_recover_options::reset() void reset(); Resets all options back to their default values. 292 C++ A P I Reference Chapter 2: Class Library os_Reference<T> template <class T> class os_Reference : public os_reference_internal ObjectStore references provide an alternative to using regular pointers to persistent memory. Like soft pointers, references reduce address space usage by deferring the reservation of address space for the reference’s referent until the reference is dereferenced. See Controlling Address Space Reservation in Chapter 1 of the Advanced C++ A P I User Guide. Use soft pointers instead of ObjectStore references if possible. Use instances of os_ Reference<T> only in place of top-level pointers or pointers in top-level arrays. References are implemented in terms of soft pointers. See Using ObjectStore Soft Pointers in Chapter 1 of the Advanced C++ A P I User Guide. os_Reference<T> defines constructors, assignment and conversion operators, operator ->(), resolve(), and get_os_typespec(). Other operations are inherited from the base class; see os_reference_internal on page 301. The template parameter is the referent type — the type of object referred to by the reference. If you use a reference type whose referent type is not a class, you must call the macro OS_REFERENCE_NOCLASS() on page 484, passing the referent type. If a reference refers to an object in a database that is not open, ObjectStore opens the database automatically when the object is accessed (unless the autoopen mode is auto_open_disable). The mode in which the database is opened is determined by the value of objectstore::get_auto_open_mode(). In some cases, comparing two references has a result different from comparing the corresponding pointers. See basic_undo on page 52 for more information. os_Reference<T>::get_os_typespec() static os_typespec* get_os_typespec( ); Returns an os_typespec* for the class os_Reference. Release 6.3 293 os_Reference<T> os_Reference<T>::operator =() os_Reference<T>& operator =( const os_Reference<T>& ); Establishes the referent of the right operand as the referent of the left operand. os_Reference<T> &operator =(const T*); Establishes the object pointed to by the right operand as the referent of the left operand. If the right operand is 0, the left operand becomes a null reference. os_Reference<T>::operator !() os_boolean operator ! () const; Returns nonzero if the reference is NULL— that is, has no current referent. os_Reference<T>::operator T*() operator T*( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. os_Reference<T>::operator –>() T* operator –>( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. os_Reference<T>::os_Reference() os_Reference(); Constructs a null reference. os_Reference(T* hard_ptr); Constructs a reference with the same referent as the specified hard pointer. If hard_ ptr is 0, constructs a null reference. os_Reference(os_Reference<T> const& ref); Constructs a reference with the same referent as the specified reference. If the specified reference is NULL, constructs a null reference. os_Reference<T>::resolve() T* resolve( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. 294 C++ A P I Reference Chapter 2: Class Library os_Reference_cross_session<T> template <class T> class os_Reference_cross_session : public os_reference_cross_session Instances of the class os_Reference_cross_session<T> can be used to reference persistent data across sessions. Cross-session references are valid under a wider array of circumstances than are pointers to persistent storage and are always valid across transaction boundaries. Once the object referred to by a cross-session reference is deleted, use of the reference accesses arbitrary data and might cause a segmentation violation. The template parameter is the referent type — the type of object referred to by the reference. If you use a reference type whose referent type is not a class, you must call the macro OS_REFERENCE_NOCLASS() on page 484, passing the referent type. os_Reference_cross_session<T> defines constructors, assignment and conversion operators, operator ->(), resolve(), and get_os_typespec(). Other operations are inherited from the base class; see os_reference_cross_session on page 297. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_Reference_cross_session<T>::get_os_typespec() static os_typespec* get_os_typespec( ); Returns an os_typespec* for the class os_Reference_cross_session. os_Reference_cross_session<T>::operator =() os_Reference_cross_session<T>& operator =( const os_Reference_cross_session<T>& right_arg); Establishes right_arg as the referent of the left operand. Overloadings os_Reference_cross_session<T> &operator =(const T* right_arg); os_Reference_cross_session<T> &operator =( const os_soft_pointer<void>& right_arg); os_Reference_cross_session<T>::operator T*() operator T*( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. Release 6.3 295 os_Reference_cross_session<T> os_Reference_cross_session<T>::operator –>() T* operator –>( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. os_Reference_cross_session<T>::os_Reference_cross_session() os_Reference_cross_session(); Constructs a null reference. os_Reference_cross_session(T* hard_ptr); Constructs a reference with the same referent as the specified hard pointer. If hard_ ptr is 0, constructs a null reference. os_Reference_cross_session(os_Reference_cross_session<T> const& ref); Constructs a reference with the same referent as the specified reference. If the specified reference is NULL, constructs a null reference. os_Reference_cross_session<T>::resolve() T* resolve( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. 296 C++ A P I Reference Chapter 2: Class Library os_reference_cross_session This class serves as base class to os_Reference_cross_session<T>. It defines comparison operators and hash, dump, and load functions. See os_Reference_ cross_session<T> on page 295 for more information. Note The os_reference_cross_session class is internal and should not be instantiated. It is described here for documentation purposes only. Cross-session references are valid under a wider array of circumstances than are pointers to persistent storage and are always valid across transaction boundaries. Once the object referred to by a cross-session reference is deleted, use of the reference accesses arbitrary data and might cause a segmentation violation. You can create a cross-session reference by initializing a variable of type os_ Reference_cross_session<T> with the pointer or by assigning the pointer to a variable of types os_Reference_cross_session<T> (implicitly invoking the conversion constructor os_Reference_cross_session::os_Reference_cross_ session(void*)). In general a pointer can be used anywhere an os_Reference_ cross_session is expected, and the conversion constructor will be invoked. part* p = . . .; os_reference_cross_session part_ref = a_part; When an os_Reference_cross_session<T> is cast to a pointer-to-referent_type (that is, pointer to the type of object referenced by the os_Reference_cross_ session<T>), os_Reference_cross_session::operator void*() is implicitly invoked, returning a valid pointer to the object referenced by the os_Reference_ cross_session<T>. printf("%d\n", (part*)(part_ref)->part_id); In some cases, comparing two cross-session references has a different result from comparing the corresponding pointers. Consider, for example, == comparisons of hard pointers, where the referent type of one operand is a base class of the referent type of the other operand. Even though the hard pointers might have different values, the result is nevertheless always 1 because of the pointer adjustment described in Section 10.3c of Ellis and Stroustrup’s Annotated C++ Reference Manual. In contrast, for such an == comparison of references, the result might not be 1 because ObjectStore does not perform the pointer adjustment described in Section 10.3c of the C++ Annotated Reference Manual. Each instance of os_Reference_cross_session stores a relative pathname to identify the referent database. The pathname is relative to the lowest common directory in the pathnames of the referent database and the database containing the reference. For example, if a reference stored in /A/B/C/db1 refers to data in /A/B/D/db2, the lowest common directory is A/B, so the relative pathname ../../D/db2 is used. Type definitions Release 6.3 The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. 297 os_reference_cross_session Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_reference_cross_session::dump() char* dump() const; Returns a heap-allocated text string representing the specified reference. os_reference_cross_session::get_database() os_database* get_database( ) const; Returns a pointer to the database containing the referent of this. os_reference_cross_session::load() void load(const char* dump_str); The dump_str argument is assumed to be the result of a call to a compatible dump function. The exception err_reference_syntax is signaled if dump_str is not in the expected format. os_reference_cross_session::operator =() os_reference_cross_session& operator =( const os_reference_cross_session& right_arg); Establishes right_arg as the referent of the left operand. Overloadings os_reference_cross_session& operator =( const void* right_arg); os_reference_cross_session& operator =( os_soft_pointer<void>& right_arg); os_reference_cross_session::operator ==() os_boolean operator ==( os_reference_cross_session const& right_arg) const; Returns 1 if the this argument and right_arg have the same referent; returns 0 otherwise. os_reference_cross_session::operator !() os_boolean operator !=( os_reference_cross_session const& right_arg) const; Returns 1 if right_arg is pointing to NULL; returns 0 otherwise. os_reference_cross_session::operator !=() os_boolean operator !=( os_reference_cross_session const& right_arg) const; Returns 1 if the this argument and right_arg have different referents; returns 0 otherwise. 298 C++ A P I Reference Chapter 2: Class Library os_reference_cross_session::operator <() os_boolean operator <( os_reference_cross_session const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_cross_session::operator >() os_boolean operator >( os_reference_cross_session const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_cross_session::operator <=() os_boolean operator <=( os_reference_cross_session const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes or is the same as the referent of right_arg, and a return value of 0 indicates that it does not precede it or is not the same. Otherwise, the results are undefined. os_reference_cross_session::operator >=() os_boolean operator >=( os_reference_cross_session const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows or is the same as the referent of right_arg, and a return value of 0 indicates that it does not follow it or is not the same. Otherwise, the results are undefined. os_reference_cross_session::os_reference_cross_session() os_reference_cross_session(void* ptr); Constructs a cross-session reference to substitute for ptr. os_reference_cross_session::~os_reference_cross_session() ~os_reference_cross_session(); Cleans up internal data structures. Release 6.3 299 os_reference_cross_session os_reference_cross_session::resolve() void* resolve( ) const; Returns a hard pointer with the same referent as this reference. Returns 0 if this is a null reference. err_reference_not_found is signaled if the referent has been deleted. 300 C++ A P I Reference Chapter 2: Class Library os_reference_internal This class serves as the base class to os_Reference<T>. It defines comparison operators, and hash, dump, and load functions. See os_Reference<T> on page 293 for more information. Note The os_reference_internal class is internal and should not be instantiated. It is described here for documentation purposes only. In some cases, comparing two references has a different result from comparing the corresponding pointers. Consider, for example, == comparisons of hard pointers, in which the referent type of one operand is a base class of the referent type of the other operand. Even though the hard pointers might have different values, the result is nevertheless always 1 because of the pointer adjustment described in Section 10.3c of Ellis and Stroustrup’s Annotated C++ Reference Manual. In contrast, for such an == comparison of references, the result might not be 1 because ObjectStore does not perform the pointer adjustment described in Section 10.3c of the C++ Annotated Reference Manual. os_reference_internal::dump() char* dump() const; Returns a heap-allocated text string representing the specified reference. Overloading The following overloading is supported: char* dump(const char* db_str) const; Returns a heap-allocated text string representing the specified reference. However, unlike the string returned by the char * os_reference_internal::dump(void) function, this string does not contain an absolute database path. The returned string is intended to be used as the dump_str argument of a reference load function of the form load(const char* dump_str, os_database* db). It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the dumped reference. It is the user’s responsibility to delete the returned string when it is no longer needed. This operation is useful in those applications in which you do not want the overhead of storing the absolute database path in the dumped strings. os_reference_internal::get_database() os_database* get_database( ) const; Returns a pointer to the database containing the referent of this. os_reference_internal::get_database_key() char* get_database_key(const char* dump_str); Returns a heap-allocated string containing the database_key component of the string dump_str. The dump_str argument must have been generated using the dump Release 6.3 301 os_reference_internal operation. Otherwise, the exception err_reference_syntax is signaled. It is the user’s responsibility to delete the returned string when it is no longer needed. os_reference_internal::hash() os_unsigned_int32 hash( ) const; Returns an integer suitable for use as a hash table key. If two references refer to the same object, hash() performed on one reference returns the same value as hash performed on the other reference. In other words, hash() ensures that coreferential references hash to the same value. os_reference_internal::load() void load(const char* dump_str); The dump_str argument is assumed to be the result of a call to a compatible dump function. void load(const char* dump_str, const os_database* db); The dump_str argument is assumed to be the result of a call to a compatible dump function. It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the originally dumped reference. The loaded reference refers to the same object as the reference used to dump the string as long as the db argument is the same as the database of the dumped reference. The exception err_reference_syntax is signaled if dump_str is not in the expected format. os_reference_internal::operator ==() os_boolean operator ==(os_reference_internal const&) const; Returns 1 if the arguments have the same referent; returns 0 otherwise. os_reference_internal::operator !() os_boolean operator !(os_reference_internal const&) const; Returns 1 if the argument is a null reference; returns 0 otherwise. os_reference_internal::operator !=() os_boolean operator !=(os_reference_internal const&) const; Returns 1 if the arguments have different referents; returns 0 otherwise. os_reference_internal::operator <() os_boolean operator <(os_reference_internal const&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first 302 C++ A P I Reference Chapter 2: Class Library argument precedes the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_internal::operator >() os_boolean operator >(os_reference_internal const&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument follows the referent of the second, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_internal::operator <=() os_boolean operator <=(os_reference_internal const&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument precedes or is the same as the referent of the second, and a return value of 0 indicates that it does not precede it or is not the same. Otherwise, the results are undefined. os_reference_internal::operator >=() os_boolean operator >=(os_reference_internal const&) const; If the first argument and second argument refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the first argument follows or is the same as the referent of the second, and a return value of 0 indicates that it does not follow it or is not the same. Otherwise, the results are undefined. os_reference_internal::~os_reference_internal() ~os_reference_internal(); Cleans up internal data structures. os_reference_internal::resolve() void* resolve( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. Release 6.3 303 os_Reference_protected<T> os_Reference_protected<T> template <class T> class os_Reference_protected : public os_reference_protected_internal ObjectStore references support referential integrity. They provide an alternative to using regular pointers to persistent memory. If you attempt to dereference a protected reference and the referent has been deleted, err_reference_not_found is thrown. Like soft pointers, protected references reduce address space usage by deferring the reservation of address space for the reference’s referent until the reference is dereferenced. See Controlling Address Space Reservation in Chapter 1 of the Advanced C++ A P I User Guide. os_Reference_protected<T> defines constructors, assignment and conversion operators, operator ->(), resolve(), and get_os_typespec(). Other operations are inherited from the base class; see os_reference_protected_internal on page 306. The referent type parameter (T) indicates the type of the object referred to by a reference. If you use a protected reference type whose referent type is not a class, you must call the macro OS_REFERENCE_PROTECTED_NOCLASS() on page 485, passing the referent type. If a reference refers to an object in a database that is not open, ObjectStore opens the database automatically when the object is accessed (unless the autoopen mode is auto_open_disable). The mode in which the database is opened is determined by the value of objectstore::get_auto_open_mode(). In some cases, comparing two references has a result different from comparing the corresponding pointers. See os_reference_protected_internal on page 306 for more information. os_Reference_protected<T>::get_os_typespec() static os_typespec* get_os_typespec( ); Returns an os_typespec* for the class os_Reference_protected<T>. os_Reference_protected<T>::operator =() os_Reference_protected<T>& operator =( const os_Reference_protected<T>& ); Establishes the referent of the right operand as the referent of the left operand. Overloadings The following overloading is supported: os_Reference_protected<T>& operator =(const T*); Establishes the object pointed to by the right operand as the referent of the left operand. If the right operand is 0, the left operand becomes a null reference. 304 C++ A P I Reference Chapter 2: Class Library os_Reference_protected<T>::operator T*() operator T*( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. err_reference_not_found is signaled if the referent has been deleted. os_Reference_protected<T>::operator –>() T* operator –>( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. err_reference_not_found is signaled if the referent has been deleted. os_Reference_protected<T>::os_Reference_protected() os_Reference_protected(); Constructs a null reference. Overloadings The following overloadings are supported: os_Reference_protected(T* hard_ptr); Constructs a reference with the same referent as the specified hard pointer. If hard_ ptr is 0, constructs a null reference. os_Reference_protected(os_Reference_protected<T> const& ref); Constructs a reference with the same referent as the specified reference. If the specified reference is NULL, constructs a null reference. os_Reference_protected<T>::resolve() T* resolve( ) const; Returns a hard pointer with the same referent as the this reference. Returns 0 if this is a null reference. err_reference_not_found is signaled if the referent has been deleted. Release 6.3 305 os_reference_protected_internal os_reference_protected_internal This class serves as base class to os_Reference_protected<T>. It defines comparison operators and hash, dump, and load functions. See os_Reference_ protected<T> on page 304 for more information. Note The os_reference_protected_internal class is internal and should not be instantiated. It is described here for documentation purposes only. In some cases, comparing two references has a different result from comparing the corresponding pointers. Consider, for example, == comparisons of hard pointers, where the referent type of one operand is a base class of the referent type of the other operand. Even though the hard pointers might have different values, the result is nevertheless always 1 because of the pointer adjustment described in Section 10.3c of Ellis and Stroustrup’s C++ Annotated Reference Manual. In contrast, for such an == comparison of references, the result might not be 1 because ObjectStore does not perform the pointer adjustment described in Section 10.3c of the C++ Annotated Reference Manual. os_reference_protected_internal::deleted() os_boolean deleted() const; Returns nonzero if the referent of this has been deleted. Returns 0 otherwise. os_reference_protected_internal::dump() char* dump() const; Returns a heap-allocated text string representing the specified reference. Overloading The following overloading is supported: char* dump(const char* db_str) const; Returns a heap-allocated text string representing the specified reference. However, unlike the string returned by the char* os_reference_protected_ internal::dump(void) function, this string does not contain an absolute database path. The returned string is intended to be used as the dump_str argument of a reference load function of the form load(const char* dump_str, os_database* db). It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the dumped reference. It is the user’s responsibility to delete the returned string when it is no longer needed. This overloading is useful in applications for which you do not want the overhead of storing the absolute database path in the dumped strings. os_reference_protected_internal::get_database() os_database* get_database( ) const; Returns a pointer to the database containing the referent of this. 306 C++ A P I Reference Chapter 2: Class Library os_reference_protected_internal::get_database_key() char* get_database_key(const char* dump_str); Returns a heap-allocated string containing the database_key component of the string dump_str. The dump_str argument must have been generated using the dump operation. Otherwise, the exception err_reference_syntax is signaled. It is the user’s responsibility to delete the returned string when it is no longer needed. os_reference_protected_internal::hash() os_unsigned_int32 hash( ) const; Returns an integer suitable for use as a hash table key. If two references refer to the same object, hash() performed on one reference returns the same value that hash() performed on the other reference. In other words, hash() ensures that coreferential references hash to the same value. os_reference_protected_internal::load() void load(const char* dump_str); The dump_str argument is assumed to be the result of a call to a compatible dump function. Overloadings The following overloading is supported: void load(const char* dump_str, const os_database* db); The dump_str argument is assumed to be the result of a call to a compatible dump function. It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the originally dumped reference. The loaded reference refers to the same object as the reference used to dump the string if the db argument is the same as the database of the dumped reference. The exception err_reference_syntax is signaled if dump_str is not in the expected format. os_reference_protected_internal::operator ==() os_boolean operator ==( os_reference_protected_internal const& right_arg) const; Returns 1 if the this argument and right_arg have the same referent; returns 0 otherwise. os_reference_protected_internal::operator !() os_boolean operator !( os_reference_protected_internal const& arg) const; Returns 1 if the argument is a null reference; returns 0 otherwise. os_reference_protected_internal::operator !=() os_boolean operator !=( Release 6.3 307 os_reference_protected_internal os_reference_protected_internal const& right_arg) const; Returns 1 if the this argument and right_arg have different referents; returns 0 otherwise. os_reference_protected_internal::operator <() os_boolean operator <( os_reference_protected_internal const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_protected_internal::operator >() os_boolean operator >( os_reference_protected_internal const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_reference_protected_internal::operator <=() os_boolean operator <=( os_reference_protected_internal const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes or is the same as the referent of right_arg, and a return value of 0 indicates that it does not precede it or is not the same. Otherwise, the results are undefined. os_reference_protected_internal::operator >=() os_boolean operator >=( os_reference_protected_internal const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows or is the same as the referent of right_arg, and a return value of 0 indicates that it does not follow it or is not the same. Otherwise, the results are undefined. os_reference_protected_internal::~os_reference_protected_ internal() ~os_reference_protected_internal(); Cleans up internal data structures. 308 C++ A P I Reference Chapter 2: Class Library os_reference_protected_internal::resolve() void* resolve( ) const; Returns a hard pointer with the same referent as this reference. Returns 0 if this is a null reference. err_reference_not_found is signaled if the referent has been deleted. Release 6.3 309 os_reference_type os_reference_type class os_reference_type : public os_pointer_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a C++ reference type. This class is derived from os_pointer_type. Performing os_pointer_ type::get_target_type( ) on an os_reference_type results in the reference type’s target type. os_reference_type::create() static os_reference_type& create(os_type* target); The argument initializes the attribute target. 310 C++ A P I Reference Chapter 2: Class Library os_relationship_member_variable This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a relationship (inverse) member. This class is derived from os_member_variable. os_relationship_member_variable::get_related_class() const os_class_type&get_related_class( ) const; Returns the class at the target end of the relationship. Overloadings The following is the non-const overloading of this function: os_class_type& get_related_class( ); os_relationship_member_variable::get_related_member() const os_relationship_member_variable& get_related_member( ) const; Returns the inverse of the specified relationship member. Overloadings The following is the non-const overloading of this function: os_relationship_member_variable& get_related_member( ); Release 6.3 311 os_release_cluster_pointer os_release_cluster_pointer The os_release_cluster_pointer class enables you to release pointers to objects of the class os_cluster. To do so, declare an automatic variable of the class os_ release_cluster_pointer, giving its constructor a pointer to an os_cluster object. When the variable goes out of scope, its destructor releases the pointer. For information about releasing pointers to os_cluster objects, see os_ cluster::release_pointer() on page 133 and the C++ A P I User Guide. 312 C++ A P I Reference Chapter 2: Class Library os_release_database_pointer The os_release_database_pointer class enables you to release pointers to objects of the class os_database. To do so, declare an automatic variable of the class os_ release_database_pointer, giving its constructor a pointer to an os_database object. When the variable goes out of scope, its destructor releases the pointer. For information about releasing pointers to os_database objects, see os_ database::release_pointer() on page 166 and the C++ A P I User Guide. Release 6.3 313 os_release_root_pointer os_release_root_pointer The os_release_root_pointer class enables you to release pointers to objects of the class os_database_root. To do so, declare an automatic variable of the class os_ release_root_pointer, giving its constructor a pointer to an os_database_root object. When the variable goes out of scope, its destructor releases the pointer. For information about releasing pointers to os_database_root objects, see os_ database_root::release_pointer() on page 173 and the C++ A P I User Guide. 314 C++ A P I Reference Chapter 2: Class Library os_release_segment_pointer The os_release_segment_pointer class enables you to release pointers to objects of the class os_segment. To do so, declare an automatic variable of the class os_ release_segment_pointer, giving its constructor a pointer to an os_segment object. When the variable goes out of scope, its destructor releases the pointer. For information about releasing pointers to os_segment objects, see os_ segment::release_pointer() on page 358 and the C++ A P I User Guide. Release 6.3 315 os_replicator os_replicator The os_replicator class provides the means to control database replication from an application. Replica databases are continuously updated MVCC copies of ObjectStore databases. When updating the replica databases, the os_replicator copies only changed data. For more information on replicating databases, see osreplic in Managing ObjectStore. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_replicator::os_replicator() os_replicator(const char* replica_ID) Constructs an os_replicator. The unique string identifies this replica during logging operations, as described in os_dbutil::start_backrest_logging() on page 191. os_replicator::~os_replicator() ~os_replicator(); Destructor function. os_replicator::change_time_interval() void change_time_interval(os_unsigned_int32 n_seconds); Change the time between snapshots where time is in seconds. os_replicator::get_statistics() void get_statistics(os_replicator_statistic_info & info); Returns replication statistics in the form of an instance of the os_replicator_ statistic_info class. See os_replicator_statistic_info on page 321 for more information on the os_replicator_statistic_info class. 316 C++ A P I Reference Chapter 2: Class Library os_replicator::get_status() os_int32 os_replicator::get_status() Returns the current status of the replica. The possible return values are: Return Value Meaning -1 The replication process is still running. 0 The replication process has either completed successfully or has not yet started. 1 The replication process has failed. Check the backrest log for additional information. os_replicator::reset_statistics() void reset_statistics(); Resets the meters used for statistics. Replication must be stopped before calling this function. os_replicator::start_replicator() void start_replicator(os_replicator_options & options); Starts the os_replicator using the specified os_replicator_options. For information about the options you can use, see os_replicator_options on page 318. os_replicator::stop_replicator() void stop_replicator(); Stop replication after completing current replication. Release 6.3 317 os_replicator_options os_replicator_options The os_replicator_options class specifies how the os_replicator copies ObjectStore databases. An instance of the os_replicator_options class is used as an argument to the replicator’s start_replicator() function. See also os_ replicator on page 316 for more information on the os_replicator class. For more information on using a command-line utility to replicate databases, see osreplic in Managing ObjectStore. Required header files Programs using the os_replicator_options class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_replicator_options class has the following public data members: os_boolean flag_permissions; os_boolean flag_recursive; os_boolean flag_verbose; os_boolean flag_exclusive; os_boolean flag_compression; os_unsigned_int32 server_buf_size_in_KB; os_unsigned_int32 send_buf_size_in_KB; os_unsigned_int32 receive_buf_size_in_KB; os_unsigned_int32 time_interval; os_unsigned_int32 network_timeout; os_unsigned_int32 n_rep_db_pairs; const char * import_file; const char * archive_record_file; const char ** source_pathnames; const char ** target_pathnames; Deleting all char* options is the caller’s responsibility. Each pathname in the source_pathname array must correspond to the pathname in the target_pathname array. The following describes the public data members: flag_permissions Setting this option to true causes the replication process to copy database permissions to the target rawfs databases. Default is false; permissions are not copied. flag_recursive Instructs the replication process to descend into any rawfs directories specified in the source_pathnames array, adding all rawfs databases found to the list of databases to be replicated. This option has no effect when replicating file databases; you must explicitly specify each file database. Default is false; only databases in the specified directory will be replicated. flag_verbose Setting this option to true enables verbose output. Default is false; verbose output is disable. 318 C++ A P I Reference Chapter 2: Class Library flag_exclusive Setting this option to true opens the target database in exclusive mode, which prohibits clients from using the target databases until the replicator process is stopped. Default is false; databases are opened in nonexclusive mode. flag_compression Setting this option to true compresses the replicated data from osserver; this reduces the amount of data transferred to the replication application. Default is false; no compression takes place. server_buf_size_in_KB Specifies the size of the buffer used by the ossevers contacted by the replicator process. Default is 1204KB. send_buf_size_in_KB Specifies the buffer size in kilobytes when sending replicated data to osserver. The maximum value is 1024KB and the minimum value is 512KB. Default is 512KB. receive_buf_size_in_KB Specifies the buffer size in kilobytes when receiving replicated data from osserver. The maximum value is 102400KB and the minimum value is 256KB. Default is 256KB. time_interval Specifies in seconds an integer used by the replicator process as the interval between snapshots. Setting this option to 0 (zero) results in the replication of one snapshot after which the replicator process stops. Default is 600 seconds. network_timeout Specifies the timeout value in seconds that the replicator process will wait for osserver to respond. Default is 10 hours. n_rep_db_pairs Specifies the number of pairs in the source_ pathnames and target_pathnames arrays. Default is 0 (zero); the import_file option must be set instead. import_file Specifies the name of an input file containing databases and directories to be replicated. Each line in the input file must consist of a source path followed by a target path. If a directory is specified, its contents are added to the source set. Default is NULL. archive_record_file Release 6.3 Required. This specifies the archive record file, a file that contains information about those databases that have been replicated and when they were replicated. This information is used to determine the clusters within a database that have been modified since the last time replication ran; only modified clusters are replicated. 319 os_replicator_options source_pathnames Specifies an array of source database pathnames to be replicated. Entries in this array must have a corresponding entry in the target_pathnames array. Default is NULL; the import_file option must be set instead. target_pathnames Specifies an array of target database pathnames. Entries in this array must correspond to the entries in the source_pathnames array. Default is NULL; the import_file option must be set instead. os_replicator_options::os_replicator_options() os_replicator_options(); Constructs the os_replicator_options class and sets all options to their default values. os_replicator_options::~os_replicator_options() ~os_replicator_options() { } Destructor function for os_replicator_options. os_replicator_options::reset() void reset(); Resets all options back to their default values. 320 C++ A P I Reference Chapter 2: Class Library os_replicator_statistic_info The os_replicator_statistic_info class contains information about an os_ replicator. For more information about the os_replicator class, see os_ replicator on page 316. For more information on using a command-line utility to replicate databases, see osreplic in Managing ObjectStore. Required header files Programs using the os_replicator_statistic_info class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_replicator_statistic_info class has the following public data members: float compress_decrease_percent; os_unsigned_int32 n_snapshots; os_unsigned_int32 n_snapshots_with_data; os_unixtime_t time_last_snapshot; os_unsigned_int32 n_KB_last_snapshot; os_unsigned_int32 snapshot_time; os_unsigned_int32 average_KB_per_snapshot; os_unsigned_int32 average_time; os_unsigned_int32 n_snapshot_resets; os_unsigned_int32 n_backup_and_restore_overlaps; The public data members are described as follows: compress_decrease_percent Decrease percentage from data compression. n_snapshots Number of snapshots taken. n_snapshots_with_data Number of snapshots that data was replicated. time_last_snapshot Time of last snapshot, regardless if data was replicated (UTC). n_KB_last_snapshot Last snapshot with replication, number of KB replicated. snapshot_time How many seconds last snapshot with replication took. average_KB_per_snapshot Average amount of KB processed per snapshot. average_time In seconds, average amount of time per snapshot. n_snapshot_resets Number of times the backup was restarted by osserver. n_backup_and_restore_ overlaps Number of overlaps where the backup started before restore completed. - This can indicate that snapshot interval is too low. os_replicator_statistic_info::os_replicator_statistic_info() os_replicator_statistic_info(); The constructor function for the os_replicator_statistic_info class. Release 6.3 321 os_replicator_statistic_info os_replicator_statistic_info::~os_replicator_statistic_info() ~os_replicator_statistic_info(); The destructor function for the os_replicator_statistic_info class. os_replicator_statistic_info::format_and_print_statistics() void format_and_print_statistics(); Format and print statistic information. os_replicator_statistic_info::format_statistics() char * format_statistics(); Statistic information is returned in a formatted string which is the caller’s responsibility to delete. os_replicator_statistic_info::get_replica_ID() const char * get_replica_ID(); Returns the replica ID for which the statistics were accumulated. 322 C++ A P I Reference Chapter 2: Class Library os_restore The os_restore class provides the means to perform restoration of databases from an ObjectStore application. The ObjectStore application restores the databases from a backup image that you create with the osbackup utility or with an ObjectStore application that uses methods of the os_backup classes. For more information on using a command-line utility to restore databases, see osrestore in Managing ObjectStore. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. os_restore::os_restore() os_restore(const char* restore_ID) Constructs the necessary class for restoring databases. The restore_ID argument should be a unique character string identifying this restore process in the backrest log, as described in os_dbutil::start_backrest_logging() on page 191. os_restore::~os_restore() ~os_restore(); Performs internal cleanup of the restore process. Calling ~os_restore() while the restore process is running will abort the restore. os_restore::get_status() os_int32 get_status(); Returns the current status of the restore process. The possible return values are: • -1 indicates the restore process is still running • 0 indicates the restore process has completed successfully or has not yet started. • 1 indicates the restore process has failed. Check the backrest log for additional information. Release 6.3 323 os_restore os_restore::start_and_run_restore() os_boolean start_and_run_restore( os_restore_options & options); Starts and runs the restore process to completion. The options calling argument should have the necessary data members set. A return code of zero indicates the restore process successfully completed. For a non-zero return code, check the backrest log for further information. For information about the options you can use, see os_restore_options on page 325. os_restore::start_restore() void start_restore(os_restore_options * options); Starts the restore process in a separate thread and then return immediately. The options calling argument should have the necessary data members set. After calling start_restore() call os_restore::get_status() to determine when the restore process is complete. For information about the options you can use, see os_restore_ options on page 325. os_restore::stop_restore() void stop_restore(); Stops the restore process by waiting for the restore to complete before returning. After calling stop_restore() call os_restore::get_status() to verify that the restore was successful. 324 C++ A P I Reference Chapter 2: Class Library os_restore_options The os_restore_options class specifies data members that must be set in order for an instance of the os_restore class to restore ObjectStore databases. An instance of the os_restore_options class is used as an argument when starting the restore process. See also os_restore on page 323 for more information. For more information on a command-line utility to restore databases, see osrestore in Managing ObjectStore. Required header files Programs using the os_restore_options class must include <ostore/ostore.hh>, followed by <ostore/dbutil.hh>. Public data members The os_restore_options class has the following public data members: os_boolean flag_no_recursive; os_boolean flag_list_contents; os_boolean flag_permissions; os_unsigned_int32 network_timeout; os_unsigned_int32 send_buffer_size_in_KB; os_unsigned_int32 block_factor; os_unsigned_int32 n_backup_files; os_unsigned_int32 n_translate_pairs; os_restore_switch_volume_hook switch_volume_hook; void * switch_volume_hook_context; const char * switch_volume_command; const char ** backup_files; const char ** translate_paths; const char * translation_import_file; The public data members are described as follows flag_no_recursive If a directory is specified as a target for restore, setting this to true limits the restore operation to databases contained in the named directory. Default is false; all databases in the directory and its subdirectory will be restored. flag_list_contents Setting this to true will only display all databases contained in the specified archive files when restore is started. Default is false. flag_permissions Setting this to true causes restore to restore database permissions for the rawfs stored in the archive log file for the database being restored. Default is false. network_timeout Sets the timeout value in seconds that restore will wait for osserver to respond. Default is 10 hours. Release 6.3 325 os_restore_options send_buffer_size_in_KB Specifies the buffer size in kilobytes when sending restored data to osserver. The maximum value is 1024KB Default is 512KB, which is also the minimum value. block_factor Specifies a blocking factor to use for tape input and output. This option applies only when you are restoring data from a tape. The blocking factor is in units of 512-byte blocks. The maximum blocking factor is 512 blocks. Default on UNIX is 126 blocks. n_backup_files Specifies the number of backup image files listed in the backup_files array. Default is zero; The import_file option must be set instead. n_translate_pairs Specifies the number of pairs of database paths listed in the translate_paths array. switch_volume_hook Specifies a pointer to a user-defined function in the format: os_boolean my_function( os_unsigned_int32 vol_number, void* context) where vol_number indicates the next volume number, and context is user-specified data (see the switch_volume_hook_context option, below). This function will be called when os_restore reaches the end of the media. The function should signal that the next volume is needed and return after the volume has been mounted. The return code should be 0 to continue processing or 1 to abort the restore. Default is NULL; no function defined. If switch_ volume_command is not set, the prompt is processed through stdin/stdout. switch_volume_hook_context The value of this pointer is passed to switch_ volume_hook through the context calling argument. This data member should point to any user data that will be needed within the hook. Default is NULL. 326 C++ A P I Reference Chapter 2: Class Library switch_volume_command Specifies the path of a command to be executed when the restore reaches the end of the media. This command should mount the next volume before returning. The exit status from this command must be 0 or the restore operation aborts. Default is NULL. If switch_volume_hook is not defined, the prompt is processed through stdin/stdout. backup_files Required. Specifies an array of files or tape devices that contains backup images from which to restore databases. The number of backup_files must correspond to the number specified in n_ backup_files. translate_paths Specifies an array of pairs of path names. The first path name in the pair indicates the source of the database as recorded in the backup image. The second path name indicates the target; that is, the path name for the database after it is restored. Each path name can be a directory or a single database. However, you cannot specify a directory as the source and a database as the target. The number of translate_paths pairs must correspond to the number of pairs specified in n_translate_pairs. Default is NULL. translation_import_file Release 6.3 Specifies the name of a file that contains a list of pathname pairs for translation. The first pathname is the source database as recorded in the backup image. The second pathname is the target — that is, the pathname for the database after it is restored. Each pathname can be a directory or a single database. However, you cannot specify a directory as the source and a database as the target. Each line in the file should contain one pathname only; a translation pair should occupy two lines in the file. 327 os_restore_options Member functions The following functions are public members of the os_restore_options class: os_restore_options::os_restore_options() os_restore_options(); Constructs the os_restore_options class and sets all options to their default values. os_restore_options::~os_restore_options() ~os_replicator_options() {} Performs internal cleanup. os_restore_options::reset() void reset(); Resets all options back to their default values. 328 C++ A P I Reference Chapter 2: Class Library os_retain_address The class os_retain_address allows an application to specify that certain address ranges be kept assigned across calls to objectstore::release_persistent_ addresses() and top-level transactions. The os_retain_address constructor takes a pointer to a transient pointer that the application wants to remain assigned. A single os_retain_address instance can track modifications made to a pointer. When the client releases address space, it iterates through all os_retain_address instances and dereferences their ptr_to_ptrs to determine those address ranges that should be retained. There are no error states: if ptr_to_ptr is 0 or if it points to a pointer that does not point into persistent space, no error is signaled and no address range is retained by the os_retain_address instance. Because address space is reserved in 64 KB units, the amount of address space reserved by a single os_retain_address is some multiple of 64 KB. Typically, for objects 64 KB or less, it is just 64 KB. os_retain_address inherits from basic_undo, so all instances must be on the stack (correspond to automatic C++ variables). When an instance of os_retain_address is deleted, it is removed from consideration by the client. More than one instance of os_retain_address can refer to the same persistent address. As long as at least one instance of os_retain_address refers to a persistent address when the client releases addresses, that persistent address is retained. os_retain_address::os_retain_address() os_retain_address::os_retain_address(void** ptr_to_ptr); Creates an os_retain_address object. The argument ptr_to_ptr is an address of a pointer you want to retain. os_retain_address::release() void os_retain_address::release(); Releases the retained address specified by the this argument, allowing the os_ retain_address object to retain other addresses. os_retain_address::retaining() void* os_retain_address::retaining() const; If the retained pointer points to a persistent object, this function returns the address of the object. If the retained pointer does not point to a persistent object, this function returns 0. os_retain_address::set_retain() void os_retain_address::set_retain(void** ptr_to_ptr); Sets ptr_to_ptr to be the retained address, replacing the previously retained address. Release 6.3 329 os_schema os_schema This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this abstract base class represents a schema. The classes os_comp_schema, os_app_schema, and os_database_schema are derived from os_schema. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_schema::find_type() const os_type* find_type(const char *typename) const; Returns a pointer to the type with the specified name in the specified schema. The name can designate a class or any C++ fundamental type. All pointer types are treated identically and result in the type for void*’s being returned. If there is no type with the specified name, 0 is returned. For nested classes, the name must be a fully qualified name that describes the path to the nested class, for example, outer::inner. os_schema::get_classes() os_collection get_classes( ) const; Returns a collection of the classes in the schema. Each element of the returned collection points to a const os_class_type. os_schema::get_kind() enum os_schema_kind { Compilation_schema, Application_schema, Database_schema }; os_schema_kind get_kind( ) const; Returns an enumerator indicating the kind of the specified schema. os_schema::operator const os_app_schema&() operator const os_app_schema&( ) const; Provides safe conversion to const os_app_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. os_schema::operator const os_comp_schema&() operator const os_comp_schema&( ) const; Provides safe conversion to const os_comp_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. 330 C++ A P I Reference Chapter 2: Class Library os_schema::operator const os_database_schema&() operator const os_database_schema&( ) const; Provides safe conversion to const os_database_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. os_schema::operator os_app_schema&() operator os_app_schema&( ); Provides safe conversion to os_app_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. os_schema::operator os_comp_schema&() operator os_comp_schema&( ); Provides safe conversion to os_comp_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. os_schema::operator os_database_schema&() operator os_database_schema&( ); Provides safe conversion to os_database_schema&. If the conversion is not permissible, err_mop_illegal_cast is signaled. Release 6.3 331 os_schema_evolution os_schema_evolution This class provides the user interface to the ObjectStore schema evolution facility. Schema evolution refers to the changes undergone by a database’s schema during the course of the database’s existence. It refers especially to schema changes that potentially require changing the representation of objects already stored in the database. The schema evolution process has two phases: • Schema modification: Modification of the schema information associated with the databases being evolved • Instance migration: Modification of any existing instances of the modified classes Instance migration itself has two phases: • Instance initialization • Instance transformation Instance initialization modifies existing instances of modified classes so their representations conform to the new class definitions. This might involve adding or deleting fields or subobjects, changing the type of a field, or deleting entire objects. This phase of migration also initializes any storage components that have been added or that have changed type. In most cases, new fields are initialized with zeros. There is one useful exception to this, however. In the case in which a field has changed type, and the old and new types are assignment compatible, the new field is initialized by assignment from the old field value. See os_schema_evolution::evolve() on page 337 for the initialization rules. During the initialization phase, the address of objects generally change. Even objects whose classes are not being evolved can move, typically because a preceding object in the same cluster changed size because its class evolved. The object will be in the same cluster but its offsets within the cluster will be different. If the size of a top-level object changes from less than 64 KB to 64 KB or greater, the object will be moved to a new cluster in the same segment. Because of these address changes, the schema evolution facility automatically modifies all pointers to the instance so that they point to the new instance. This is done for all pointers in the databases being evolved, including pointers contained in instances of unmodified classes, cross-database pointers, and pointers to subobjects of migrated instances. During this process of adjusting pointers, ObjectStore might detect various kinds of untranslatable pointers (see os_schema_evolution::evolve() on page 337). For example, it might detect a pointer to the value of a data member that has been removed in the new schema. Because the data member has been removed, the subobject serving as value of that data member is deleted as part of instance initialization. Any pointer to such a deleted subobject is untranslatable and is detected by ObjectStore. 332 C++ A P I Reference Chapter 2: Class Library In such a case, you can provide a special handler object (see os_schema_ evolution::set_untranslatable_pointer_handler() on page 345) to process the untranslatable pointer (for example, by changing it to NULL or simply reporting its presence). Each time an untranslatable pointer is detected, the handler function is executed on the pointer, and schema evolution is resumed. If you do not provide a handler function, an exception is signaled when an untranslatable pointer is encountered. C++ references are treated as a kind of pointer. References to moved instances are adjusted as described previously. Untranslatable references are detected and you can provide a handler object to process them (see os_schema_evolution::set_ untranslatable_pointer_handler() on page 345). Just as some pointers and references become obsolete after schema evolution, so do some indexes and persistently stored queries. For example, the selection criterion of a query or the path of an index might reference a removed data member. ObjectStore detects all obsolete queries and indexes. As with untranslatable pointers, you can handle obsolete queries or indexes by providing special handler functions for each purpose. An obsolete index handler, for example, might create a new index by using a path that is valid under the new schema. If you do not supply handlers, ObjectStore signals an exception when it detects an obsolete query or index. If you supply an obsolete query handler function that allows the schema evolution to continue when it encounters an obsolete query, ObjectStore internally marks the query so that subsequent attempts to use it result in the exception err_os_query_evaluation_error. For more information on these handlers, see os_schema_evolution::set_ obsolete_query_handler() on page 343 and os_schema_evolution::set_ obsolete_index_handler() on page 343. Instance transformation phase For some schema changes, the instance initialization phase is all that is needed. In other cases, however, further modification of class instances or associated data structures is required to complete the schema evolution. This further modification generally is application dependent, so ObjectStore allows you to define your own functions, transformer functions, to perform the task (see os_schema_ evolution::augment_pre_evol_transformers() on page 336and os_schema_ evolution::augment_post_evol_transformers() on page 336). You associate exactly one transformer with each class whose instances you want to be transformed. During the transformation phase of instance migration, the schema evolution facility invokes each transformer function on each instance of the function’s associated class, including instances that are subobjects of other objects. Transformers are useful for updating data structures that depend on the addresses of instances. A hash table, for example, that hashes on addresses should be rebuilt by using a transformer. Note that you need not rebuild a data structure if the position of an entry in the structure does not depend on the address of an object pointed to by the entry but depends, instead, for example, on the value of some field of the object pointed to. Such data structures are still correct after the instance initialization phase. Release 6.3 333 os_schema_evolution To help you get an overall picture of the operations involved in instance initialization for a particular evolution, the schema evolution facility allows you to obtain a task list describing the process. The task list consists of function definitions indicating how the instances of each class are initialized. You can generate this list without actually invoking evolution, so you can verify your expectations concerning a particular schema change before migrating the data (see os_schema_ evolution::task_list() on page 346). To perform schema evolution, you make and execute an application that does the following: 1 Calls os_schema_evolution::initialize( ). This initializes the schema evolution facility by setting the number of threads to be used by the application, the amount of persistent pages to prefetch, and the size of virtual address space to use for secondary sessions. The default number of threads is 1.5 times the number of CPUs in the system (rounded up). You might need to decrease the number of threads when running on a system with lots of processors but a small persistent storage region (PSR) size. Using too many threads can cause the PSR size for the main thread to be too small, causing address space exhaustion. It is acceptable to restart an interrupted schema evolution while specifying a different number of threads. You can increase the address space available to the main thread by decreasing the number of threads, by decreasing the address_space_release_interval, or by setting the environment variable OS_AS_SIZE to a larger number. 2 Sets various parameters if necessary by calling the os_schema_evolution::set_ xxx functions that are appropriate for your schema evolution. Examples are set_ maplet_size() and set_untranslatable_pointer_handler(). 3 Specifies the name of the application schema, if necessary. This is the new schema and is specified by making a call to os_schema_evolution::set_evolved_ schema_db_name() and/or os_schema_evolution::augment_dll_schema_db_ names(). If you do not call either of these functions, the application schema used is the application schema of the schema evolution application itself. 4 Calls os_schema_evolution::evolve( ) or os_schema_evolution::task_ list( ). 5 Calls os_schema_evolution::shutdown( ). The schema evolution application should not use objectstore::initialize() or objectstore::shutdown(). The os_schema_evolution::evolve( ) function should not be called inside a transaction. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/schmevol.hh>. 334 C++ A P I Reference Chapter 2: Class Library os_schema_evolution::augment_classes_to_be_removed() static void augment_classes_to_be_removed( const char* class_name ); Adds the class with the specified name to the set of classes to be removed from the schema during subsequent evolutions. This applies to evolutions initiated in the current process. If the indicated class is actually part of the new schema, err_se_ cannot_delete_class is signaled. Note that when you remove a class, C, you must also remove or modify any class that mentions C in its definition. Otherwise, err_ se_cannot_delete_class is signaled. Overloadings The following overloading is supported: static void augment_classes_to_be_removed( const os_collection& class_names ); Adds the classes named by the elements of the specified collection to the set of classes to be removed from the schema during schema evolution. This applies to evolutions initiated during the current process after the call to this function. If the indicated class is actually part of the new schema, err_se_cannot_delete_class is signaled. Note that when you remove a class, C, you must also remove or modify any class that mentions C in its definition. Otherwise, err_se_cannot_delete_class is signaled. os_schema_evolution::augment_cluster_split_avoidance() static void augment_cluster_split_avoidance( const char* class_name) This function specifies that any cluster containing objects of class_name will not be split when the cluster size exceeds set_maximum_cluster_size(). This is useful when a cluster contains user defined data that should not be split across clusters. For more information on maximum cluster size, see os_schema_evolution::set_ maximum_cluster_size() on page 343. os_schema_evolution::augment_dll_schema_db_names() static void augment_dll_schema_db_names(const char* name); Adds a component schema to the previously specified schema during schema evolution. The name of the component schema is specified by name. After this function has been called, the effective schema is the union of the component schema and the application schema. Overloadings The following overloading is supported: static void augment_dll_schema_db_names( const os_charp_collection& dll_schema_db_names ); Adds a list of component schemas to the previously specified schema during schema evolution. The dll_schema_db_names argument is a collection of component schema names — each member of the collection is a const char*. After this function has been called, the effective schema is the union of the collection of component Release 6.3 335 os_schema_evolution schemas and the application schema. This function is useful when you are performing schema evolution on a database that has multiple component schemas and you want to avoid having to perform multiple evolutions. os_schema_evolution::augment_optional classes() static void augment_optional_classes(const char*); Specifies that the class identified by the specified string is an optional class. In schema evolution programs, you can write transformer functions for optional classes even when instances of those classes are not in the database being evolved. This is useful when performing incremental schema installation. Classes can be in the application schema but not in the database schema. This occurs when persistent instances of these classes have not yet been created. Overloadings The following overload is supported: static void augment_optional_classes( const os_Collection<const char*>&); Use this overload to pass more than one class name at a time. If you want to be able to define transformer functions for all classes in the application schema, regardless of whether there are instances of these classes in the databases, use os_schema_evolution::set_disable_transformer_class_checks(). os_schema_evolution::augment_pre_evol_transformers() static void augment_pre_evol_transformers( const os_transformer_binding& ); Adds the specified transformer binding to the set of transformer bindings to be used during subsequent evolutions. This applies to evolutions initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class before any object is moved or evolved. See os_transformer_binding on page 417. Overloadings The following overloading is supported: static void augment_pre_evol_transformers( const os_Collection<os_transformer_binding*>& ); Adds the elements of the specified collection to the set of transformer bindings to be used during subsequent evolutions. This applies to evolutions initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class before any object is moved or evolved. See os_transformer_binding on page 417. os_schema_evolution::augment_post_evol_transformers() static void augment_post_evol_transformers( const os_transformer_binding& ); 336 C++ A P I Reference Chapter 2: Class Library Adds the specified transformer binding to the set of transformer bindings to be used during subsequent evolutions. This applies to evolutions initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class after all objects are moved and evolved. See os_transformer_binding on page 417. Overloadings The following overloading is supported: static void augment_post_evol_transformers( const os_Collection<os_transformer_binding*>& ); Adds the elements of the specified collection to the set of transformer bindings to be used during subsequent evolutions. This applies to evolutions initiated in the current process. A transformer binding associates a class with a function so that the function is executed on each instance of the class after all objects are moved and evolved. See os_transformer_binding on page 417. os_schema_evolution::evolve() static void evolve( const char* work_db_name, const char* db_to_evolve ); Invokes schema evolution on the database named by db_to_evolve. The function must be called outside the dynamic scope of a transaction. If no database is named by work_db_name, one with that name is created and used as the work database. If a database is named by work_db_name, it must be a work database from a prior interrupted evolution performed on the database named by db_to_evolve. In this case, evolution resumes from the most recent consistent state before the last interruption. The new schema is determined by the schema of the database being evolved together with the modification schema. The modification schema is the compilation or application schema database specified in the most recent call in the current process to os_schema_ evolution::set_evolved_schema_db_name( ) along with any schema specified in a call to os_schema_evolution::augment_dll_schema_db_names(). If there are no prior calls to set_evolved_schema_db_name( ) or augment_dll_schema_db_ names(), the modification schema is the schema for the application calling evolve( ). The new schema is the result of merging the schema of the databases being evolved with the modification schema; that is, the new schema is the union of the old schema and the modification schema, minus the definitions in the old schema of classes that are also defined in the modification schema. If any classes are present in the old schema but not in the new schema, they must be specified before the call to evolve( ) by using os_schema_evolution::augment_ classes_to_be_removed( ). Release 6.3 337 os_schema_evolution During the instance initialization phase, the instances of modified classes are modified to conform to the layouts imposed by the new classes. Data members whose value type has changed are initialized by assignment with the old data member value if old and new value types are assignment compatible. That is, ObjectStore assigns the value of the old data member to the storage associated with the new member, applying only standard conversions defined by the C++ language. In some cases, schema evolution considers types assignment compatible when C++ would not. For example, if D is derived from B, schema evolution assigns a B* to a D* if it knows that the B is also an instance of D. If the new and old value types are not assignment compatible and the new value type is a class, the new members are initialized as if by a constructor that sets each field to the appropriate representation of 0. If the new value type is not a class, the new members are initialized with the appropriate representation of 0. Data members added to the schema whose value type is a class are initialized as if by a constructor that sets each field to 0. Other new data members are initialized with 0. Array-valued members are initialized using the rules outlined earlier, as if the ith array element were a separate data member corresponding to the ith element of the old data member value. If there is no ith element of the old data member value (either because the old value is not an array or because the old value is an array but does not have an ith element), the new element is initialized as if by a constructor that sets each field to 0, or with 0. Very large databases See Advanced C++ A P I User Guide, Evolving or Compacting Very Large Databases. Note Bit fields are evolved according to the default signed or unsigned rules of the implementation that built the evolution application. This can lead to unexpected results when an evolution application built with one default rule evolves a database originally populated by an application built by an implementation whose default rule differs. The unexpected results occur when the evolution application attempts to increase the width of a bit field. Schema evolution cannot evolve a pointer-to-member that points to a member in a virtual base class. When a class is modified to inherit from a base class, subobjects corresponding to the base class are initialized as if by a constructor that sets each field to 0. Subobjects corresponding to removed data members or base classes are deleted, as are instances of classes removed from the schema. Changing inheritance from virtual to nonvirtual is treated as removal of the virtual base class and addition of nonvirtual base classes. Changing inheritance from nonvirtual to virtual is treated as removal of the nonvirtual base classes and addition of a virtual base class. In each case, subobjects corresponding to the added classes are initialized as if by a constructor that sets each field to 0. 338 C++ A P I Reference Chapter 2: Class Library Untranslatable pointers and references can be processed by an untranslatablepointer handler supplied by the user (see os_schema_evolution::set_ untranslatable_pointer_handler() on page 345). Untranslatable pointers and C++ references for which there is no handler signal the exception err_se_illegal_pointer or one of its child exceptions. When the selection criterion of a query or the path of an index references a removed class or data member or makes incorrect type assumptions in light of a schema change, the query or index becomes obsolete. ObjectStore detects all obsolete queries and indexes. As with untranslatable pointers, you can handle obsolete queries and indexes by providing a special handler function for each purpose. Each obsolete index handled by such a function is dropped automatically after the function returns. If you do not supply handlers, ObjectStore signals err_schema_evolution when an obsolete query or index is detected. If you supply an obsolete query handler function that allows the schema evolution to continue when it encounters an obsolete query, ObjectStore marks the query internally so that subsequent attempts to use it result in the signaling of the exception err_os_query_evaluation_error. See os_schema_ evolution::set_obsolete_index_handler() on page 343 and os_schema_ evolution::set_obsolete_query_handler() on page 343. Subsequent to instance initialization, each transformer function (see os_schema_ evolution::augment_post_evol_transformers() on page 336) is executed on each instance of its associated class. The order of execution of transformers on embedded objects follows the same pattern that constructors follow. When the transformer for a given class is invoked, the transformers for base classes of the given class are executed first (in declaration order), followed by the transformers for classvalued members of the given class (in declaration order), after which the transformer for the given class itself is executed. Overloadings The following overloadings are supported: static void evolve( const char* work_db_name, const os_Collection<const char*>& dbs_to_evolve ); Invokes schema evolution on the databases named by the elements of dbs_to_ evolve. The rest of the behavior for this function is as described for the previous overloading of evolve( ). static void evolve( const char* work_db_name, const os_Collection<const char*>& dbs_to_evolve, os_schema& new_schema ); Invokes schema evolution on the databases named by the elements of dbs_to_ evolve. The rest of the behavior for this function is as described for the first overloading of evolve( ) earlier in this section, except that the modification schema is specified by new_schema. static void evolve( Release 6.3 339 os_schema_evolution const char* work_db_name, const char* db_to_evolve, os_schema& new_schema ); Invokes schema evolution on the database specified by db_to_evolve. The rest of the behavior for this function is as described for the first overloading of evolve( ) previously, except that the modification schema is specified by new_schema. os_schema_evolution::get_enclosing_object() static os_typed_pointer_void get_enclosing_object(const void*); Returns the top-level persistent object that encloses the specified address. This function can be useful in transformer functions. os_schema_evolution::get_evolved_schema() static const os_schema& get_evolved_schema(); Returns the evolved schema. This schema is in transient memory. os_schema_evolution::get_evolved_schema_db_name() static const char* get_evolved_schema_db_name(); Returns the name of the evolved application schema database. os_schema_evolution::get_explanation_level() static os_int32 get_explanation_level(); Returns the level of debugging information that is output during schema evolution. The return value is one of the following enumerators: Enumerator Meaning silent Do not output any debugging information. This is the default. phase_level Output information about the phases of schema evolution for each cluster, segment, and database. type_level Output information about all types in the database. object_level Output information about all objects in the database. verbose Output information about all pointers in the database. Note that the levels are accumulative; that is, each level includes information that is output at the previous levels. See also os_schema_evolution::set_explanation_ level(). os_schema_evolution::get_path_to_member() static os_path_to_data* get_path_to_member(const void*); Returns the path from the enclosing top-level persistent object to the innermost data member that encloses the specified address. If the top-level object is a primitive type, the result is null. The caller must delete the returned path object. 340 C++ A P I Reference Chapter 2: Class Library os_schema_evolution::get_unevolved_schema() static const os_schema& get_unevolved_schema(); Returns the unevolved schema. This schema is in transient memory. os_schema_evolution::get_work_database() static os_database* get_work_database( ); This function returns a pointer to the work database for the current evolution. os_schema_evolution::initialize() static void initialize( os_unsigned_int32 n_threads, os_unsigned_int32 prefetch_KB, os_ptr_val secondary_psr_size); n_threads specifies number of threads to use for schema evolution. The default value is 1.5 times the number of CPUs in the system (rounded up). The default should provide good performance on most hardware if there is no other significant load on the system. prefetch_KB specifies the size in KB of persistent pages to prefetch at one time. The default is 1024 KB which should provide good performance on most hardware. secondary_psr_size specifies the size in MB of virtual address space for secondary sessions. The default is 16 MB. Increase this value in the unlikely event that your application runs out of address space, for example, because of an extremely large schema. Specifying zero for the arguments to initialize() sets them to the current default values. It is possible that the defaults listed here will change in future releases of ObjectStore. os_schema_evolution::set_address_space_release_interval() static void set_address_space_release_interval( os_unsigned_int32 interval); Specifies the frequency of address space releases, where interval is in units of bytes and controls the frequency. Specify a smaller value for more frequent releases, a larger value for less frequent. The default value is 1 MB. os_schema_evolution::set_avoid_page_boundary() static void set_avoid_page_boundary( os_unsigned_int32 max_bytes_wasted); Specifies that you want schema evolution to avoid placing objects across page boundaries in the evolved database. This applies to objects that have evolved and objects that have moved because of other evolved objects. The default is that schema evolution does not avoid page boundaries when moving objects. When schema evolution avoids a page boundary, it inserts a free region and leaves some bytes on the page unused. Release 6.3 341 os_schema_evolution The max_bytes_wasted argument specifies the maximum bytes that can be wasted when page boundaries are avoided. If trying to avoid a page boundary would cause more than max_bytes_wasted bytes to be wasted, schema evolution does not avoid placing that object across the page boundary. The value of max_bytes_wasted can be any value from 0 through 4095. A value of 0 disables the feature. Note: In the context of this function, all pages are server pages, which are always 4K in size. It does not matter what platform the server is running on. os_schema_evolution::set_disable_transformer_class_checks() static void os_set_disable_transformer_class_checks(os_boolean); Allows a schema evolution program to define transformer functions for classes for which there are no instances in the database being evolved. This is useful when performing incremental schema installation. Classes can be in the application schema but not in the database schema. This occurs when persistent instances of these classes have not yet been created. To specify one or more particular classes for which there are no instances in the database but for which you want to define transformer functions, see os_schema_ evolution::augment_optional classes(). os_schema_evolution::set_evolved_schema_db_name() static void set_evolved_schema_db_name(const char*); Specifies the name of an application schema database used to determine the new schema in subsequent evolutions during the current process. os_schema_evolution::set_explanation_level() static void set_explanation_level(os_unsigned_int32 level); Specifies the level of debugging information that is output during schema evolution. The level argument can be one of the following enumerators: Enumerator Meaning silent Do not output any debugging information. This is the default. phase_level Output information about the phases of schema evolution for each cluster, segment, and database. type_level Output information about all types in the database. object_level Output information about all objects in the database. verbose Output information about all pointers in the database. Note that the levels are accumulative; that is, each level includes information that is output at the previous levels. See also os_schema_evolution::get_explanation_ level(). 342 C++ A P I Reference Chapter 2: Class Library os_schema_evolution::set_malloc_size() static void set_malloc_size(os_unsigned_int32); Sets the relocation map malloc size in bytes. The default is 0x100000 bytes (1024 KB). os_schema_evolution::set_maplet_size() static void set_maplet_size(os_unsigned_int32); Sets the relocation map maplet size in bytes.; the value must be a power of 2. The default is 64 bytes. You should change this value only if you fully understand the performance characteristics of your CPU and all its levels of cache. os_schema_evolution::set_maximum_cluster_size() static void set_maximum_cluster_size( os_unsigned_int32 max_cluster_size_in_bytes) During schema evolution clusters larger than max_cluster_size_in_bytes are split into multiple clusters. This function specifies the size of max_cluster_size_ in_bytes. The value of max_cluster_size_in_bytes is rounded up to the next multiple of 64 KB. The default is to split any cluster that exceeds 1600 MB. See os_ schema_evolution::augment_cluster_split_avoidance() on page 335 for information about how to prevent schema evolution from splitting some clusters. Note that some ObjectStore collections manage an internal cluster which will not be split because the internal clusters maintain data structures that cannot be split across multiple clusters. Examples of collections that maintain internal clusters are os_set, os_Set, os_bag, os_Bag, os_Dictionary, and indexes. os_schema_evolution::set_maximum_memory_size() static void set_maximum_memory_size(os_ptr_val); Sets the maximum memory to use for pointer relocation maps in bytes. The default is one-half the main memory size or one-half the size of virtual memory, whichever is less. os_schema_evolution::set_obsolete_index_handler() static void set_obsolete_index_handler( void (*func)(const os_collection&, const char* path_string) ); Specifies func as the handler function for obsolete indexes. Applies to evolutions initiated in the current process after the call to this function. The function func must be defined by the user. The os_collection& is a reference to the collection whose index is obsolete, and the char* points to a string expressing the index’s path (key). os_schema_evolution::set_obsolete_query_handler() static void set_obsolete_query_handler( void (*func)(os_coll_query_r, os_char_const_p query_string) ); Release 6.3 343 os_schema_evolution Specifies func as the handler function for obsolete queries. Applies to evolutions initiated in the current process after the call to this function. The function func must be defined by the user. The os_coll_query_r is a reference to the obsolete query, and the os_char_const_p points to a string expressing the query’s selection criterion. 344 C++ A P I Reference Chapter 2: Class Library os_schema_evolution::set_optimize_checkpoints() static void set_optimize_checkpoints(os_boolean); Specifies that schema evolution will use an optimization that does not checkpoint each phase. By default, this optimization is off. Use this option with caution, since misuse could result in excessive page replacement and/or potential VM thrashing. os_schema_evolution::set_pre_evolution_setup_hook() static void set_pre_evolution_setup_hook( os_se_hook_function_void); Specifies the hook function that will get called for setting up things in a context where schema validation is disabled. os_schema_evolution::set_resolve_ambiguous_void_pointers() static void set_resolve_ambiguous_void_pointers(os_boolean); If the argument is set to true (nonzero), specifies that, if an ambiguous void pointer is encountered during schema evolution, it should be resolved to the outermost enclosing collocated object. A void* pointer is ambiguous if schema evolution cannot determine whether it points to an object or to the first data member within the object. By default (false or 0), schema evolution signals an exception if it encounters an ambiguous void pointer. In this case, the user can provide an untranslatablepointer handler that would be invoked by the exception. os_schema_evolution::set_task_list_file_name() static void set_task_list_file_name(const char* file_name); Specifies the file named file_name as the file to which a task list should be sent. Applies to task lists generated in the current process after the call to this function. os_schema_evolution::set_untranslatable_pointer_handler() static void set_untranslatable_pointer_handler( os_untranslatable_pointer_handler*); Specifies the handler for pointers that cannot be translated. set_untranslatable_ pointer_handler() will adopt its argument and delete it when its use has ended. See os_untranslatable_pointer_handler on page 448 for information about the os_untranslatable_pointer_handler class. os_schema_evolution::shutdown() static void shutdown(); Cleans up ObjectStore resources after schema evolution is completed. Release 6.3 345 os_schema_evolution os_schema_evolution::task_list() static void task_list( const char* work_db_name, const char* db_to_evolve ); Generates a task list for the evolution that would have taken place had evolve( ) been called with the same arguments. The task list is sent to the file specified by the most recent call to os_schema_evolution::set_task_list_file_name( ) or, if there is no such call, to standard output. After the task list is generated, this function exits, terminating the current process. The task list contains a function definition for each class whose instances will be migrated. Each function has a name of the form class-name@[1]::initializer( ) where class-name names the function’s associated class. Each classname@[1]::initializer( ) function definition contains a statement or comment for each data member of its associated class. For a member with value type T, this statement or comment is one of the following: • Assignment statement • Call to T@[1]::copy_initializer( ) • Call to T@[2]::construct_initializer( ) • Call to T@[1]::_initializer( ) • Comment indicating that the field will be zero initialized An assignment statement is used when the old and new value types of the member are assignment compatible. T@[1]::copy_initializer( ) is used when the member has not been modified by the schema change and the new value can be copied bit by bit from the old value. T@[2]::construct_initializer( ) is used when the value type has been modified and the new value type is a class. T@[1]::_ initializer( ) is used when the member has not been modified by the schema change but instances of the value type of the member will be migrated. Definitions for all these functions appear in the task list. Overloading The following overloading is supported: static void task_list ( const char* work_db_name, const os_Collection<const char*>& dbs_to_evolve ); Generates a task list for the evolution that would have taken place had evolve( ) been called with the same arguments. The task list is sent to the file specified by the most recent call to os_schema_evolution::set_task_list_file_name( ). The contents of the task list are as described for the preceding overloading of task_ list( ). 346 C++ A P I Reference Chapter 2: Class Library os_schema_handle This transient class represents a reference or handle to a component (DLL) schema or an application schema. A schema handle is different from a schema in that the handle can exist before the schema has been loaded from its schema database. Also, the handle remains valid across transactions, while a pointer to the schema is valid for only one transaction. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/nreloc/schftyps.hh>. os_schema_handle::DLL_unloaded() void DLL_unloaded(); If the component schema is loaded, marks it for unloading; otherwise, does nothing and signals no error. The actual unloading, reconstruction of process type tables, and deletion of the os_schema_handle occurs later (at the end of the transaction). Unloading a DLL calls DLL_unloaded() from the DLL’s termination function and then unloads the DLL. If the rest of the transaction tries to do anything that requires the DLL, or if the transaction is aborted and retried and the retry does not load the DLL, a fatal error is likely to occur. It is an error to call this function with the os_schema_handle for an application schema. This signals the exception err_invalid_for_application_schema. os_schema_handle::get() const os_app_schema& get() const; Gets a C++ reference to an application or DLL program schema when given its os_ schema_handle. The schema must be loaded. If the schema is not loaded or has been unloaded, an err_schema_not_loaded exception is signaled. This function can be called only while a transaction is in progress, and the result is valid only for the duration of that transaction. os_schema_handle::get_all() static os_schema_handle** get_all( osbool to_load = false ); With an argument of 0 (false, the default), this function returns a null-terminated array of pointers to os_schema_handle instances that are loaded and are not queued to unload. This set corresponds to the current complete program schema. With a nonzero (true) argument, this function returns a null-terminated array of pointers to the os_schema_handle instances that are queued to load. The caller must deallocate the array. Release 6.3 347 os_schema_handle os_schema_handle::get_application_schema_handle() static os_schema_handle* get_application_schema_handle(); Returns a pointer to the os_schema_handle for the application schema. If the session has no application schema, this returns a pointer to a handle for a dummy schema that contains only ObjectStore’s built-in types (essentially the boot schema). This function should be called only after ObjectStore has been initialized. os_schema_handle::get_DLL_identifiers() const char* const* get_DLL_identifiers( os_unsigned_int32& count ) const; Returns an array of pointers to DLL identifiers and the number of elements in the array, given an os_schema_handle. The caller must not modify or deallocate the strings or the array. If the this argument designates an application schema, the result is NULL and count is set to 0. os_schema_handle::get_schema_database() os_database& get_schema_database() const; Gets the os_database for the application or component schema database. os_schema_handle::get_schema_database_pathname() const char* get_schema_database_pathname() const; Gets the application or component schema database path name. See objectstore::get_application_schema_pathname() on page 64. os_schema_handle::get_schema_info() os_schema_info& get_schema_info() const; Returns the os_schema_info that contains the DLL identifiers and schema path name for the schema for which this is the handle. os_schema_handle::get_status() os_schema_handle_status get_status() const; Returns the loaded or unloaded status of an os_schema_handle. The status is one of the following four symbolic constants: • os_schema_handle_unloaded • os_schema_handle_loaded • os_schema_handle_queued_to_load • os_schema_handle_queued_to_unload The unloaded status exists only for an os_schema_handle that has never been loaded. After an os_schema_handle leaves the os_schema_handle_queued_to_ unload status and becomes unloaded, it is deleted. 348 C++ A P I Reference Chapter 2: Class Library os_schema_handle::insert_required_DLL_identifiers() void insert_required_DLL_identifiers( os_database& db ); Records all DLL identifiers that belong to this os_schema_handle into the database’s required DLL set. This function can be called only in an update transaction with the database open for write. os_schema_handle::set_schema_database_pathname() void set_schema_database_pathname (const char* path); Sets the application or component schema database path name. To be effective, this function must be called before the schema is loaded. Like objectstore::set_application_schema_pathname(), this has a 255character limit and copies over the existing path name. os_schema_handle::os_schema_handle_status This enumeration type is the type of the status of an os_schema_handle. The status can be one of the following: • loaded • unloaded • queued_to_load • queued_to_unload Release 6.3 349 os_schema_info os_schema_info This is the common base class for os_application_schema_info and os_DLL_ schema_info. It is designed for use with component schemas and application schemas; for more information, see os_application_schema_info on page 103 and os_DLL_schema_info on page 206. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/nreloc/schftyps.hh>. os_schema_info::get() os_schema_handle& get(); Given an os_schema_info, this function finds the corresponding os_schema_ handle. Signals an err_misc exception if this is an os_DLL_schema_info and os_ DLL_schema_info::DLL_loaded() has not been called, or if this is an os_ application_schema_info and the initialization that loads the application schema has not yet run. os_schema_info::get_DLL_identifiers() const char* const* get_DLL_identifiers( os_unsigned_int32& count ) const; Returns an array of pointers to DLL identifiers and the number of elements in the array, given an os_schema_info. The caller must not modify or deallocate the strings or the array. If the this argument designates an application schema, the result is NULL and count is set to 0. os_schema_info::get_schema_database_pathname() const char* get_schema_database_pathname() const; Returns the schema database path name. os_schema_info::set_schema_database_pathname() void set_schema_database_pathname(const char* new_pathname); Sets the schema database path name. This has no useful effect if the schema has already been loaded. Like objectstore::set_application_schema_pathname(), this has a 255character limit and copies over the existing path name. 350 C++ A P I Reference Chapter 2: Class Library os_schema_install_options Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_schema_install_options::get_copy_member_functions() os_boolean get_copy_member_functions() const; This member function returns a Boolean value that indicates whether the member function information (if present) is to be copied and installed into the schema during schema installation. os_schema_install_options::os_schema_install_options() os_schema_install_options(); This function is the constructor for this class. The default behavior given to the class is not to copy the member function into the schema. os_schema_install_options::set_copy_member_functions() void set_copy_member_functions(os_boolean_copy); This member function is used to specify whether the member function information (if present) should be copied and installed into the schema during installation. Release 6.3 351 os_segment os_segment ObjectStore databases are divided into segments. Each segment can be used as a unit of transfer to and from persistent storage. Every database is created with an initial segment, the default segment, in which new objects are allocated by default. Databases whose schema is not stored remotely have an additional initial segment, the schema segment, which contains schema information used internally by ObjectStore and all the database’s roots. More segments can be added by the user at any time. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_segment::create_cluster() os_cluster* os_segment::create_cluster(); Creates a cluster in the specified segment and returns a pointer to an instance of the class os_cluster (see os_cluster on page 131). Call this function within a transaction. The return value points to a transient object representing the new cluster. Note that because it points to transient memory, the return value of this function cannot be stored persistently. This function signals err_segment_ transient if it is invoked on a transient database. os_segment::database_of() os_database* database_of( ); Returns a pointer to the database in which the specified segment resides. The transient database is returned if the transient segment is specified. os_segment::destroy() void destroy( ); Deletes the segment for which the function is called. When a segment is destroyed, all data it contains is permanently destroyed and pointers into the segment become invalid. Any subsequent use of the destroyed segment (such as an attempt to allocate memory within it) is an error. Invoking destroy() on a destroyed segment results in the err_segment_is_deleted exception. os_segment::get_access_control() os_segment_access* get_access_control( ) const; Returns a pointer to the segment’s associated os_segment_access, which indicates the segment’s primary group and permissions. 352 C++ A P I Reference Chapter 2: Class Library os_segment::get_all_clusters() void get_all_clusters( os_int32 max_clusters, os_cluster_p* cluster_array, os_int32& n_clusters ) const; Provides access to all clusters in the specified segment. os_cluster_p* is an array of pointers to segments. This array must be allocated by the user. The function os_ segment::get_n_clusters() can be used to determine the size array to allocate; see os_segment::get_n_clusters() on page 356. The max_clusters argument specifies the maximum number of elements the array is to have. The n_clusters argument refers to the actual number of cluster pointers returned. os_segment::get_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; os_allocation_strategy get_allocation_strategy(void) const; Returns the current strategy to use when ObjectStore allocates storage for an object in a cluster in the specified segment. For information about the return values, see objectstore::get_allocation_strategy() on page 62. For information about specifying the allocation strategy in a segment, see os_segment::set_allocation_ strategy() on page 359. os_segment::get_application_info() void* get_application_info( ) const; Returns a pointer to the object pointed to by the pointer last passed, during the current session, to os_segment::set_application_info( ) for the specified segment. If set_application_info( ) has not been called for the specified segment during the current session, 0 is returned. os_segment::get_cluster() os_cluster* get_cluster(os_unsigned_int32 clstr_num) const; Returns a pointer to the cluster in the specified segment with the specified cluster number. See os_cluster::get_number() on page 133. Release 6.3 353 os_segment os_segment::get_clusters() void get_clusters( os_unsigned_int32 first_cluster_num, os_unsigned_int32 max_clusters, os_cluster_p* clstrs, os_unsigned_int32& n_clusters, os_boolean& b_more ) const; Returns a maximum number of clusters, as specified in max_clusters. The first_ cluster_num argument specifies the number of the first cluster in the range. The clusters are returned in clstrs, which must be allocated by the user. The n_ clusters argument contains the number of clusters actually returned, and b_more is nonzero (true) if there are more clusters to retrieve. You can use get_clusters() to write your own cluster iterator, or you can use the ObjectStore iterator class; see os_cluster_cursor on page 138. os_segment::get_comment() char* get_comment( ) const; Returns a transient copy of the string associated by means of os_segment::set_ comment( ) with the specified segment. If set_comment( ) has not been called for the specified segment, a zero-length string is returned. The user is responsible for deleting the returned string. os_segment::get_default_cluster() os_cluster* get_default_cluster() const; Returns a pointer to the default cluster of the specified segment. The default cluster is the cluster in which persistent memory is allocated by default when new is called with only an os_segment* argument. A session can change the default at any time (see os_segment::set_default_cluster() on page 360), but the change remains in effect only for the duration of the session and is invisible to other sessions. Simple ObjectStore applications need not create any clusters; all the segment's persistent data can be stored in the initial cluster, subject to size limitations. If more sophisticated clustering is required, however, the application can create new clusters in the database, and it might be convenient to make one of these the default. 354 C++ A P I Reference Chapter 2: Class Library os_segment::get_export_ids() void get_export_ids( const os_export_id& last_export_id, os_unsigned_int32 max_export_ids, os_export_id* p_export_ids, os_unsigned_int32& n_export_ids, os_boolean& b_more ) const; Fills in the element of p_export_ids with export IDs for the this segment. The last_export_id argument indicates where in the list of export IDs defined for the segment to start returning values. If the null export ID is passed in, the export IDs at the start of the list are returned. If last_export_id is not the null export ID, the export IDs immediately following the specified export ID are returned. max_export_ids specifies the maximum number of export IDs to return using the argument. p_export_ids must point to an array at least max_export_ids in length, or unpredictable results can occur. n_export_ids is updated to indicated the number of export IDs filled in. The first n_ export_ids elements of p_export_ids are filled in with the returned export IDs. b_more is nonzero (true) if a subsequent call to get_export_ids(), with last_ export_id being the last export ID returned by this call, would return at least one export ID. The returned export IDs are not guaranteed to be in any particular order, except that the last one returned in the p_export_ids array has the largest numerical value (see os_export_id::get_value() on page 219) of any returned in this call. If you pass the last export ID to last_export_id in a subsequent call to this function, the method does not return any of the export ID values returned in the prior call. os_segment::get_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; void get_fetch_policy( os_fetch_policy& policy, os_int32& bytes ) const; Retrieves the segment’s current fetch policy. An enumerator of type os_fetch_ policy is returned in policy, and the fetch quantum is returned in bytes. For information about the arguments, see objectstore::get_fetch_policy() on page 66. For information about setting the fetch policy on a segment, see os_ segment::set_fetch_policy() on page 360. Release 6.3 355 os_segment os_segment::get_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; objectstore_lock_option get_lock_option() const; Returns the locking behavior currently in effect for the specified segment. For information about the return value, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 For information about setting the lock option, see os_segment::set_lock_ option() on page 361. os_segment::get_n_clusters() os_int32 get_n_clusters() const; Returns the number of clusters in the specified segment. os_segment::get_null_illegal_pointers() os_boolean get_null_illegal_pointers( ); If the specified segment is in null_illegal_pointers mode, the function returns nonzero (true); otherwise, it returns 0 (false). See os_segment::set_null_illegal_ pointers() on page 361. 356 C++ A P I Reference Chapter 2: Class Library os_segment::get_number() os_unsigned_int32 get_number( ) const; Returns the segment number of the specified segment. This number is suitable for passing to the os_pathname_and_segment_number constructor. os_segment::get_segment_reference_policy() objectstore::segment_reference_policy os_segment::get_segment_reference_policy() const; Gets the reference policy for the this segment. See os_database::create_ segment() on page 152. os_segment::get_transient_segment() static os_segment* const get_transient_segment( ); Returns a pointer to the transient segment, which can be used as an argument to ::operator new() to request transient allocation. For information about ::operator new(), see ::operator new() on page 459. os_segment::is_deleted() os_boolean is_deleted( ); Returns a nonzero os_boolean (true) if the specified os_segment has been deleted; returns 0 (false) otherwise. os_segment::is_empty() os_boolean is_empty( ); Returns a nonzero os_boolean (true) if the specified os_segment contains no nondeleted objects; returns 0 (false) otherwise. os_segment::is_transient_segment() os_boolean is_transient_segment() const; Returns nonzero (true) if the specified segment is transient; returns 0 (false) if persistent. os_segment::of() static os_segment* of(void* location); Returns a pointer to the segment in which the specified object resides. If the specified void* is 0 or points to transient memory, a pointer to the transient segment is returned. See os_segment::get_transient_segment() on page 357. Release 6.3 357 os_segment os_segment::release_pointer() void release_pointer(); Releases the pointer specified by the implicit this argument. When an application calls a function that returns an os_segment pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. When the application calls release_pointer(), ObjectStore decrements the use count for an ObjectStore object. When the last pointer is released, the count reaches 0 and the os_segment object is deleted. See the following for related information: • The C++ A P I User Guide discusses how to release pointers. • You can also release os_segment pointers when they go out of scope; see os_ release_segment_pointer on page 315. • See os_segment::retain_pointer() on page 358 for information about retaining os_segment pointers. os_segment::resolve_export_id() void* resolve_export_id(const os_export_id& export_id) const; Returns a pointer to the object in the this segment with the specified export ID. If the object is an array, the returned value points at the array’s first element (rather than the beginning of the vector header, if there is one). An exception is signaled if the object with the specified export ID is in a closed database that cannot be autoopened. An exception is signaled if there is no object in the this segment with the specified export ID. os_segment::retain_pointer() void retain_pointer(); Retains the pointer specified by the this argument. When an application calls a function that returns an os_segment pointer, ObjectStore increments a use count of the number of times it has returned a pointer to the same object. The use count thus represents the number of pointers to the same object that are currently in use. The application calls os_segment::release_pointer() when it no longer needs the pointer, thus releasing it and decrementing the use count. When the application calls retain_pointer(), ObjectStore increments the use count for an os_segment object. Calling retain_pointer() ensures that the pointer is retained, even when another part of the application releases it. For information about using retain_pointer(), see the C++ A P I User Guide. See also os_segment::release_pointer() on page 358. 358 C++ A P I Reference Chapter 2: Class Library os_segment::return_memory() void return_memory(os_boolean evict_now); Same as objectstore::return_memory() on page 81, except that it acts on a specified segment rather than on a specified range of addresses. os_segment::session_of() os_session* session_of() const; Returns the os_session object for the session in which the specified os_segment* was retrieved. This function can be used with os_session::set_current() to enable a thread to join the session associated with an os_segment object. For example, if seg_ptr references an os_segment object, then the statement os_session::set_current(seg_ptr->session_of()); enables the currently executing thread to access the object by setting the thread’s current session to the session associated with seg_ptr. os_segment::set_access_control() void set_access_control(const os_segment_access* new_access); Associates the specified os_segment_access with the specified segment. The os_ segment_access determines the primary group and permissions for the os_ segment. The caller must be the owner of the database containing the specified segment. os_segment::set_allocation_strategy() enum os_allocation_strategy { os_allocation_strategy_least_space, os_allocation_strategy_least_wait, }; void set_allocation_strategy(os_allocation_strategy); Sets the strategy to use when looking for space to allocate for an object in clusters in the specified segment. This strategy applies to all clusters in the segment unless it is overridden by subsequent calls to • objectstore::set_allocation_strategy() on page 82 • os_cluster::set_allocation_strategy() on page 135 • os_database::set_allocation_strategy() on page 168 • os_segment::set_allocation_strategy() on page 359 For information about the meaning of the os_allocation_strategy enumerators that can be used as arguments, see objectstore::get_allocation_strategy() on page 62. Release 6.3 359 os_segment os_segment::set_application_info() void set_application_info(void* info); Associates the specified object with the specified segment for the current session. The argument info must point to a transient object. See os_segment::get_ application_info() on page 353. os_segment::set_comment() void set_comment(const char* info); Associates a persistent copy of the specified string with the specified segment. There is no practical limit to the length of the string that info points to. The utility ossize prints the comment, if set, when displaying information about the segment; see Managing ObjectStore. For information about retrieving a comment, see os_ segment::get_comment() on page 354. os_segment::set_default_cluster() void set_default_cluster(os_cluster* clstr); Sets the default cluster for the specified segment. The default cluster is the cluster in which persistent memory is allocated by default when new is called with only an os_ segment* or os_database* argument. Changing the default cluster remains in effect only for the duration of the session and is invisible to other sessions. Simple ObjectStore applications need not create any clusters; all the segment's persistent data can be stored in the initial cluster, subject to size limitations. If you need more control over clustering, however, your application can create new clusters in the database and make one of them the default. os_segment::set_fetch_policy() enum os_fetch_policy { os_fetch_page, os_fetch_stream, os_fetch_cluster }; void set_fetch_policy(os_fetch_policy policy, os_int32 bytes); Specifies the fetch policy for the specified segment. The default for the policy argument is os_fetch_page. For information about the arguments, see objectstore::get_fetch_policy() on page 66. The fetch policy established with set_fetch_policy() remains in effect only until the end of the session making the function call. Moreover, set_fetch_policy() affects only those transfers made by this session. Other concurrent sessions can use a different fetch policy for the same segment. For information about retrieving the fetch policy for a segment, see os_ segment::get_fetch_policy() on page 355. 360 C++ A P I Reference Chapter 2: Class Library os_segment::set_lock_option() enum objectstore_lock_option { lock_as_used, lock_page_write, lock_segment_read, lock_segment_write, lock_cluster_read, lock_cluster_write, lock_database_read, lock_database_write, own_page_write }; void set_lock_option(objectstore_lock_option lock_behavior); Sets the locking behavior for the specified segment, including all clusters in the segment. For information about the argument, see • objectstore::lock_as_used on page 76 • objectstore::lock_cluster_read on page 77 • objectstore::lock_cluster_write on page 77 • objectstore::lock_database_read on page 77 • objectstore::lock_database_write on page 77 • objectstore::lock_page_write on page 78 • objectstore::lock_segment_read on page 78 • objectstore::lock_segment_write on page 78 • objectstore::own_page_write on page 79 os_segment::set_null_illegal_pointers() void set_null_illegal_pointers(os_boolean); By default, ObjectStore signals a run-time error when it detects an illegal pointer. If you pass 1 (true) to this function, ObjectStore changes the illegal pointer to 0 (null). You can specify the default behavior by passing 0 (false) to this function. The results of using this function do not remain in effect after the current session ends, and they are invisible to other sessions. os_segment::size() os_unsigned_int64 size( os_boolean b_lock_segment = 1); Returns the total size in bytes of all clusters in the specified segment. If b_lock_ segment is nonzero (true, the default), the function waits until the specified segment is read locked before returning its size. If b_lock_segment is 0 (false), the function returns the segment’s size without waiting. The reported size is more accurate if the segment is locked instead of unlocked. Release 6.3 361 os_segment_access os_segment_access Instances of the class os_segment_access serve to associate zero or more access types with a group of a specified name, as well as with the default group. By associating an os_segment_access with a segment (using os_segment::set_ access_control( )), you specify both the segment’s associated primary group and its permissions. The owner of a segment always has both read and write access to it. The possible combinations of access types are represented by the following enumerators: • os_segment_access::no_access • os_segment_access::read_access • os_segment_access::read_write_access Note that write access without read access cannot be specified. These enumerators are used as arguments to certain members of os_segment_ access. You must be the owner of a database to set the permissions on its segments. If you are not the owner of a database but nevertheless have write access to it, you have the ability to create a segment in the database but not to modify its permissions. Because newly created segments allow all types of access to all categories of users, segments created by nonowners necessarily have a period of vulnerability between creation time and the time at which the owner restricts access with os_segment::set_ access_control( ). For information about controlling segment-level access, see the C++ A P I User Guide. os_segment_access::get_default() os_int32 get_default( ) const; Returns the types of access associated with the default group for the os_segment_ access. os_segment_access::get_primary_group() os_int32 get_primary_group( os_char_const_p* group_name = 0 ) const; Returns the types of access associated with the primary group of the os_segment_ access. The function sets group_name, if supplied, to point to the name of that group. os_segment_access::no_access This is one of three enumerators used to specify combinations of access types. They are used as arguments to certain members of os_segment_access. 362 C++ A P I Reference Chapter 2: Class Library os_segment_access::operator =() os_segment_access& operator =( const os_segment_access& source ); Modifies the os_segment_access pointed to by this so that it is a copy of source. That is, it stores the same group name as source and associates the same combinations of access types with the same groups. It returns a reference to the modified os_segment_access. os_segment_access::os_segment_access() os_segment_access( ); Creates an os_segment_access that associates no_access with both the default group and the group named group_name. os_segment_access( const char* primary_group, os_int32 primary_group_access_type, os_int32 default_access_type ); Creates an instance of os_segment_access that associates primary_group_access_ type with the group named primary_group and associates default_access_type with the default group. primary_group_access_type and default_access_type are each one of the following: • os_segment_access::no_access • os_segment_access::read_access • os_segment_access::read_write_access. Overloadings The following overloading is supported: os_segment_access( const os_segment_access& source ); Creates a copy of source. That is, it creates an os_segment_access that stores the same group name and associates the same combinations of access types with the same groups. os_segment_access::read_access This is one of three enumerators used to specify combinations of access types. They are used as arguments to certain members of os_segment_access. os_segment_access::read_write_access This is one of three enumerators used to specify combinations of access types. They are used as arguments to certain members of os_segment_access. Release 6.3 363 os_segment_access os_segment_access::set_default() void set_default( os_int32 access_type ); Associates a specified combination of access types with the default group. The value of access_type can be one of the following: • os_segment_access::no_access • os_segment_access::read_access • os_segment_access::read_write_access os_segment_access::set_primary_group() void set_primary_group( const char* group_name, os_int32 access_type ); Associates a specified combination of access types with a group of a specified name. The group_name argument is the name of the group. The access_type argument can be one of the following: • os_segment_access::no_access • os_segment_access::read_access • os_segment_access::read_write_access Overloading The following overloading is supported: void set_primary_group( os_int32 access_type ); Associates a specified combination of access types with a group of an unspecified name. The value of access_type can be one of the following: • os_segment_access::no_access • os_segment_access::read_access • os_segment_access::read_write_access os_segment_access::~os_segment_access() The destructor frees memory associated with the deleted instance of os_segment_ access. 364 C++ A P I Reference Chapter 2: Class Library os_segment_cursor Instances of the class os_segment_cursor can be used to iterate over segments in a database. Type definitions The types os_int32 and os_boolean, used throughout this document, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_segment_cursor::os_segment_cursor() os_segment_cursor( const os_database* db, os_unsigned_int32 max_n_segments_at_a_time = 100 ); Constructs an instance of os_segment_cursor for iterating over the segments in db. The max_n_segments_at_a_time argument sets the number of segments that can be maintained on the client concurrently without returning to the ObjectStore server for another group. The constructor allocates a buffer large enough to hold the segments. After constructing os_segment_cursor, call os_segment_cursor::next() to position os_segment_cursor at the first cluster in the segment. os_segment_cursor::get_current() os_segment* get_current() const; If os_segment_cursor is positioned at a segment, returns a pointer to that segment. If os_segment_cursor is not positioned at a segment, it returns NULL. To position os_segment_cursor at a segment, call os_segment_cursor::next(). os_segment_cursor::next() os_segment* next(); Advances to the next segment and returns a pointer to that segment. If next() is called immediately after os_segment_cursor is created, next() positions os_ segment_cursor at the first segment in the database and returns a pointer to that segment. If next() advances beyond the last segment in the database, it returns NULL. Release 6.3 365 os_segment_cursor os_segment_cursor::reset() void reset(); Resets os_segment_cursor to its initial state; you must call os_segment_ cursor::next() to position os_segment_cursor at the first segment. Overloadings The following overloadings are supported: void reset(os_unsigned_int32 seg_num); Positions os_segment_cursor at the specified segment. If the segment at seg_num does not exist, os_segment_cursor::get_current() returns NULL. The value returned by os_segment_cursor::get_number() is suitable for seg_num. void reset(const os_database* db); If db is specified, os_segment_cursor can be used to iterate over the segments in db. You must call os_segment_cursor::next() to position os_segment_cursor at the first segment in db. 366 C++ A P I Reference Chapter 2: Class Library os_server Instances of the class os_server represent ObjectStore servers. This class is useful for handling err_broken_server_connection. You get pointers to all the servers currently known to the client by calling objectstore::get_all_servers( ). Following is an example of a handler for err_ broken_server_connection: Example TIX_HANDLE (err_broken_server_connection) { /* code that could encounter broken connection */ } TIX_EXCEPTION { tix_exception *cur = tix_handler::get_exception(); /* It might be necessary to abort a transaction in progress. This is a tricky situation because under some circumstances it is not needed, and in others it is. */ if (objectstore::abort_in_progress()) os_transaction::abort_top_level(); /* Here is how the application can find the lost servers. */ os_int32 nservers = objectstore::get_n_servers(); os_server **svrlist = new os_server * [nservers]; char *svr_name = NULL; os_int32 ignore; objectstore::get_all_servers(nservers, svrlist, ignore); for (os_int32 i = 0; i<nservers; ++i) { if (svrlist[i]->connection_is_broken()) { svr_name = svrlist[i]->get_host_name(); printf("lost server %s\n", svr_name); delete [] svr_name; } } delete [] svrlist; } TIX_END_HANDLE; When handling err_broken_server_connection, call os_transaction::abort_ top_level( ) if objectstore::abort_in_progress( ) returns nonzero. If you do not abort the transaction, attempts to proceed might cause err_broken_server_ connection to be reraised. When ObjectStore raises err_broken_server_connection, it immediately aborts all transactions. Any databases currently open on the lost server are considered by ObjectStore to remain open. Subsequent uses of these databases (or others managed by that server) cause ObjectStore to attempt to reconnect with the server. os_server::connection_is_broken() os_boolean connection_is_broken( ) const = 0; Returns nonzero if the connection with the specified ObjectStore server is currently lost; otherwise, returns 0. Release 6.3 367 os_server os_server::disconnect() void disconnect( ); Disconnects the specified ObjectStore server. Call this function outside any transaction; otherwise err_trans is signaled. It is harmless to call this member if the connection has already been lost for any reason. The result of this call is very much like the result of unintentionally losing a connection. The client retains all its information about the server and its databases but marks them as having lost the connection. An attempt to access a database on the server causes ObjectStore to attempt to reconnect to the server. You can also call os_server::reconnect( ) on the server. os_server::get_databases() void get_databases( os_int32 max_to_return, os_database_p* dbs, os_int32& n_returned ) const = 0; Provides access to all databases associated with the specified ObjectStore server, whether open or closed. The os_database_p* is an array of pointers to os_database objects. This array must be allocated by the user. The function os_server::get_n_ databases( ) can be used to determine the size of an array to allocate. max_to_ return is specified by the user and represents the maximum number of elements the array is to have. The n_returned argument is set by os_server::get_databases() and represents the actual number of elements in the array. os_server::get_host_name() char* get_host_name( ) const; Returns the name of the host of the specified ObjectStore server. It is the caller’s responsibility to deallocate the string when it is no longer needed. Overloading The following is the non-const overloading of this function: char* get_host_name(); For failover ObjectStore servers, this function returns the logical failover server host name. Note that the logical server name is not always identical to the server name for the machine providing access to the database. The caller should delete the returned value. See os_failover_server::get_online_server_hostname() on page 222. os_server::get_n_databases() os_int32 get_n_databases( ) const = 0; Returns the number of databases associated with the specified ObjectStore server, whether open or closed. 368 C++ A P I Reference Chapter 2: Class Library os_server::is_failover() os_boolean is_failover() const; Returns nonzero (true) if, and only if, the os_server* is also an os_failover_ server. This function can be used to identify the os_failover_server in the list of ObjectStore servers returned by objectstore::get_all_servers(). For more information, see objectstore::get_all_servers() on page 62 and os_failover_ server on page 222. os_server::reconnect() void reconnect( ); Causes ObjectStore to attempt to reconnect to the specified ObjectStore server immediately. Note that exceptions, such as err_server_refused_connection, might result. Calling this function has no effect if the connection is not currently broken. Release 6.3 369 os_session os_session Instances of this class enable you to work with multiple sessions. For information about using the os_session class and its function members, see Chapter 3, Multithread and Multisession Applications, of the Advanced C++ A P I User Guide. os_session::create() static os_session* create(const char *name); Creates a session with the specified name. See os_session::get_name() on page 371. When the session is initialized (see os_session::force_full_initialization()), err_address_space_full is signaled if the session’s address space partition is too small or if the partition size is too large to fit in any portion of free space in the process-wide persistent storage region. You are responsible for deleting the created session object when it is no longer needed. err_misc is signaled if the sessions facility has not been initialized for multisession use. os_session::force_full_initialization() void force_full_initialization(); By default, a session‘s cache and address space partition are initialized when a thread in that session first accesses a database. You can use os_session::force_ full_initialization() to override the default behavior and force initialization of a session’s cache and partition. If the specified session has already been fully initialized, calling this function has no effect. err_address_space_full is signaled if the session’s address space partition is too small or if the partition size is too large to fit in any portion of free space in the process-wide persistent storage region. os_session::get_all_sessions() static os_session** get_all_sessions( os_unsigned_int32& n_sessions ); Returns a pointer to an array of os_session*s. After the function returns, n_ sessions refers to the number of elements in the array. If the sessions facility has not been initialized for multisession use (see objectstore::initialize_for_sessions() on page 73), the function returns a pointer to an array whose only element points to a session named Global Session. os_session::get_current() static os_session* get_current(); 370 C++ A P I Reference Chapter 2: Class Library Returns a pointer to the current session. If the sessions facility has not been initialized for multisession use (see objectstore::initialize_for_sessions() on page 73), the function returns a pointer to an array whose only element points to a session named Global Session. err_no_session is signaled if there is no current session. os_session::get_n_sessions() static os_unsigned_int32 get_n_sessions(); If ObjectStore has been initialized for multiple session use, returns the number of sessions that have been created with os_session::create() and are currently active. Returns 0 if neither objectstore::initialize() nor objectstore::initialize_ for_sessions() has been called. Returns 1 if objectstore::initialize() has been called and objectstore::initialize_for_sessions() has not. See also objectstore::initialize_for_sessions() on page 73. os_session::get_name() const char* get_name() const; Returns the name of this as specified by os_session::create(). If the sessions facility has not been initialized for multisession use (see objectstore::initialize_for_sessions() on page 73), the name of the current session is Global Session. os_session::get_thread_absorption() os_boolean get_thread_absorption(); Returns nonzero if thread absorption is allowed; returns 0 if thread absorption is disallowed. See also os_session::set_thread_absorption() on page 372. os_session::of() static os_session* of(void const* addr); Returns a pointer to the session in which the specified pointer (addr) was retrieved. This is the session into whose address space partition the pointer is mapped. If the sessions facility has not been initialized for multisession use (see objectstore::initialize_for_sessions() on page 73), the function returns a pointer to a session named Global Session. If addr is not in any session (for example, it points to a transient object), the function returns 0. os_session::operator delete() void operator delete(void* p); Release 6.3 371 os_session Deletes the specified session and its associated transient objects (such as associated instances of os_database). If you use transient objects associated with a deleted session, dangling pointer errors can result. objectstore::shutdown() deletes all sessions and their associated transient objects. os_session::set_current() static os_session* set_current( os_session* new_current_session ); Establishes new_current_session as the current session for the calling thread. If new_current_session is 0, this function removes the thread from the current session so that there is no current session when the function returns. A pointer to the previously current session is returned. If there is no current session before the call, new_current_session is established as the current session for the calling thread, and 0 is returned. os_session::set_thread_absorption() void set_thread_absorption(os_boolean allowed); Specifies whether thread absorption is allowed or disallowed. Thread absorption is allowed by default. This allows threads to be absorbed into the current session. Specifying 0 prevents threads from being absorbed into the session. An error, err_ absorption_not_allowed, is signaled if the following are are all true: • The thread attempts to dereference an unmapped pointer to persistent memory • The thread has no current session • The pointer is retrieved in a session that disallows thread absorption See also Thread Absorption in the Advanced C++ A P I User Guide. os_session::unuse_DLL() void os_session::unuse_DLL(const char* DLL_identifier); Takes the component schema out of use in the current session. os_session::use_DLL() static os_DLL_handle os_session::use_DLL( const char* DLL_identifier, os_boolean error_if_not_found ); Puts the specified component schema in use for the current session. There is no need to call os_session::use_DLL() if the DLL is already loaded by means of objectstore::load_DLL() or by means of an operating-system DLL load API. If the DLL is not yet loaded, this function attempts to load the specified DLL. The component schema is put in use for the current session only. 372 C++ A P I Reference Chapter 2: Class Library os_soft_pointer32_base This class serves as base class to os_soft_pointer32<T>. It defines comparison operators, and decache(), hash(), dump(), and load() functions. See os_soft_ pointer32<T> on page 381 for more information. In some cases, comparing two hard pointers has a different result from comparing the corresponding soft pointers. Consider, for example, using the == operator to compare hard pointers, where the referent type of one operand is a non-leftmost base class of the referent type of the other operand, as in the following example: class A { /* ... */}; class B { /* ... */}; class C : public A, public B { /* ... */}; C* pc = new C; // pc points to the beginning of C object B* pb = pc; // pb points to the beginning of B part of C object if (pc == pb) cout << "true\n"; // will always execute Given this coding, the compiler will evaluate the comparison pc == pb as true, even though pb and pb point to different memory locations, because it treats the comparison as if it were (B*)pc == pb and adjusts the pointers accordingly. However, when the corresponding soft pointers are compared, no pointer adjustment occurs; and, accordingly, the comparison evalutes to false. For more information, see Ellis and Stroustrup, The Annotated C++ Reference Manual, section 10.3c. os_soft_pointer32_base::decache() void decache( ); Causes the specified soft pointer to store its underlying value in unresolved format. This affects only performance and address space release. Calling this function on a soft pointer might slow the next resolution of the pointer but might hasten release of the address space reserved for the pointer’s referent. os_soft_pointer32_base::dump() char* dump() const; Returns a heap-allocated text string representing the specified soft pointer. Overloading The following overloading is supported: char* dump(const char* db_str) const; Returns a heap-allocated text string representing the specified soft pointer. However, unlike the string returned by the char* os_soft_pointer32_ base::dump(void) function, this string does not contain an absolute database path. The returned string is intended to be used as the dump_str argument of a soft pointer load function of the form load(const char* dump_str, os_database* db). It is the responsibility of the caller of load() to ensure that the db argument passed to the Release 6.3 373 os_soft_pointer32_base load function is the same as the database of the dumped soft pointer. It is the user’s responsibility to delete the returned string when it is no longer needed. This operation is useful in those applications in which you do not want the overhead of storing the absolute database path in the dumped strings. os_soft_pointer32_base::get_database() os_database* get_database( ) const; Returns a pointer to the database containing the referent of this. os_soft_pointer32_base::get_database_key() char* get_database_key(const char* dump_str); Returns a heap-allocated string containing the database_key component of the string dump_str. The dump_str argument must have been generated using the dump operation. Otherwise, the exception err_reference_syntax is signaled. It is the user’s responsibility to delete the returned string when it is no longer needed. os_soft_pointer32_base::get_open_database() os_database* get_open_database( ) const; Returns a pointer to the database containing the referent of this. Opens the database. os_soft_pointer32_base::hash() os_unsigned_int32 hash( ) const; Returns an integer suitable for use as a hash table key. If two soft pointers refer to the same object, hash() performed on one soft pointer returns the same value as hash performed on the other soft pointer. In other words, hash() ensures that coreferential soft pointers hash to the same value. os_soft_pointer32_base::load() void load(const char* dump_str); The dump_str argument is assumed to be the result of a call to a compatible dump function. Overloading The following overloading is supported: void load(const char* dump_str, const os_database* db); The dump_str argument is assumed to be the result of a call to a compatible dump function. It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the originally dumped soft pointer. The loaded soft pointer refers to the same object as the soft pointer used to dump the string as long as the db argument is the same as the database of the dumped soft pointer. 374 C++ A P I Reference Chapter 2: Class Library The exception err_reference_syntax is signaled if dump_str is not in the expected format. os_soft_pointer32_base::operator ==() os_boolean operator ==(void const* right_arg) const; os_boolean operator ==( os_soft_pointer32_base const& right_arg) const; os_boolean operator ==( os_soft_pointer64_base const& right_arg) const; Returns 1 if the this argument and right_arg have the same referent; returns 0 otherwise. os_soft_pointer32_base::operator !() os_boolean operator !(void const* arg) const; os_boolean operator !( os_soft_pointer32_base const& arg) const; os_boolean operator !( os_soft_pointer64_base const& arg) const; Returns 1 if the argument is a null soft pointer; returns 0 otherwise. os_soft_pointer32_base::operator !=() os_boolean operator !=(void const* right_arg) const; os_boolean operator !=( os_soft_pointer32_base const& right_arg) const; os_boolean operator !=( os_soft_pointer64_base const& right_arg) const; Returns 1 if the this argument and right_arg have different referents; returns 0 otherwise. os_soft_pointer32_base::operator <() os_boolean operator <(void const* right_arg) const; os_boolean operator <( os_soft_pointer32_base const& right_arg) const; os_boolean operator <( os_soft_pointer64_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_soft_pointer32_base::operator >() os_boolean operator >(void const* right_arg) const; os_boolean operator >( os_soft_pointer32_base const& right_arg) const; Release 6.3 375 os_soft_pointer32_base os_boolean operator >( os_soft_pointer64_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_soft_pointer32_base::operator <=() os_boolean operator <=(void const* right_arg) const; os_boolean operator <=( os_soft_pointer32_base const& right_arg) const; os_boolean operator <=( os_soft_pointer64_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes or is the same as the referent of right_arg, and a return value of 0 indicates that it does not precede it or is not the same. Otherwise, the results are undefined. os_soft_pointer32_base::operator >=() os_boolean operator >=(void const* right_arg) const; os_boolean operator >=( os_soft_pointer32_base const& right_arg) const; os_boolean operator >=( os_soft_pointer64_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows or is the same as the referent of right_arg, and a return value of 0 indicates that it does not follow it or is not the same. Otherwise, the results are undefined. os_soft_pointer32_base::~os_soft_pointer32_base() ~os_soft_pointer32(); Cleans up internal data structures. os_soft_pointer32_base::resolve() void* resolve( ) const; Returns a hard pointer with the same referent as this soft pointer. Returns 0 if this is a null soft pointer. 376 C++ A P I Reference Chapter 2: Class Library os_soft_pointer64_base This class serves as base class to os_soft_pointer64<T>. It defines comparison operators, and decache(), hash(), dump(), and load() functions. See os_soft_ pointer64<T> on page 384 for more information. In some cases, comparing two hard pointers has a different result from comparing the corresponding soft pointers. Consider, for example, using the == operator to compare hard pointers, where the referent type of one operand is a non-leftmost base class of the referent type of the other operand, as in the following example: class A { /* ... */}; class B { /* ... */}; class C : public A, public B { /* ... */}; C* pc = new C; // pc points to the beginning of C object B* pb = pc; // pb points to the beginning of B part of C object if (pc == pb) cout << "true\n"; // will always execute Given this coding, the compiler will evaluate the comparison pc == pb as true, even though pb and pb point to different memory locations, because it treats the comparison as if it were (B*)pc == pb and adjusts the pointers accordingly. However, when the corresponding soft pointers are compared, no pointer adjustment occurs; and, accordingly, the comparison evalutes to false. For more information, see Ellis and Stroustrup, The Annotated C++ Reference Manual, section 10.3c. os_soft_pointer64_base::decache() void decache( ); Causes the specified soft pointer to store its underlying value in unresolved format. This affects only performance and address space release. Calling this function on a soft pointer might slow the next resolution of the pointer but might hasten release of the address space reserved for the pointer’s referent. os_soft_pointer64_base::dump() char* dump() const; Returns a heap-allocated text string representing the specified soft pointer. Overloading The following overloading is supported: char* dump(const char* db_str) const; Returns a heap-allocated text string representing the specified soft pointer. However, unlike the string returned by the char* os_soft_pointer64_ base::dump(void) function, this string does not contain an absolute database path. The returned string is intended to be used as the dump_str argument of a soft pointer load function of the form load(const char* dump_str, os_database* db). It is the responsibility of the caller of load() to ensure that the db argument passed to the Release 6.3 377 os_soft_pointer64_base load function is the same as the database of the dumped soft pointer. It is the user’s responsibility to delete the returned string when it is no longer needed. This operation is useful in those applications in which you do not want the overhead of storing the absolute database path in the dumped strings. os_soft_pointer64_base::get_database() os_database* get_database( ) const; Returns a pointer to the database containing the referent of this. os_soft_pointer64_base::get_database_key() char* get_database_key(const char* dump_str); Returns a heap-allocated string containing the database_key component of the string dump_str. The dump_str argument must have been generated using the dump operation. Otherwise, the exception err_reference_syntax is signaled. It is the user’s responsibility to delete the returned string when it is no longer needed. os_soft_pointer64_base::get_open_database() os_database* get_open_database( ) const; Returns a pointer to the database containing the referent of this. Opens the database. os_soft_pointer64_base::hash() os_unsigned_int32 hash( ) const; Returns an integer suitable for use as a hash table key. If two soft pointers refer to the same object, hash() performed on one soft pointer returns the same value as hash performed on the other soft pointer. In other words, hash() ensures that coreferential soft pointers hash to the same value. os_soft_pointer64_base::load() void load(const char* dump_str); The dump_str argument is assumed to be the result of a call to a compatible dump function. Overloading The following overloading is supported: void load(const char* dump_str, const os_database* db); The dump_str argument is assumed to be the result of a call to a compatible dump function. It is the responsibility of the caller of load() to ensure that the db argument passed to the load function is the same as the database of the originally dumped soft pointer. The loaded soft pointer refers to the same object as the soft pointer used to dump the string as long as the db argument is the same as the database of the dumped soft pointer. 378 C++ A P I Reference Chapter 2: Class Library The exception err_reference_syntax is signaled if dump_str is not in the expected format. os_soft_pointer64_base::operator ==() os_boolean operator ==(void const* right_arg) const; os_boolean operator ==( os_soft_pointer64_base const& right_arg) const; os_boolean operator ==( os_soft_pointer32_base const& right_arg) const; Returns 1 if the this argument and right_arg have the same referent; returns 0 otherwise. os_soft_pointer64_base::operator !() os_boolean operator !(void const* arg) const; os_boolean operator !( os_soft_pointer64_base const& arg) const; os_boolean operator !( os_soft_pointer32_base const& arg) const; Returns 1 if the argument is a null soft pointer; returns 0 otherwise. os_soft_pointer64_base::operator !=() os_boolean operator !=(void const* right_arg) const; os_boolean operator !=( os_soft_pointer64_base const& right_arg) const; os_boolean operator !=( os_soft_pointer32_base const& right_arg) const; Returns 1 if the this argument and right_arg have different referents; returns 0 otherwise. os_soft_pointer64_base::operator <() os_boolean operator <(void const* right_arg) const; os_boolean operator <( os_soft_pointer64_base const& right_arg) const; os_boolean operator <( os_soft_pointer32_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_soft_pointer64_base::operator >() os_boolean operator >(void const* right_arg) const; os_boolean operator >( os_soft_pointer64_base const& right_arg) const; Release 6.3 379 os_soft_pointer64_base os_boolean operator >( os_soft_pointer32_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows the referent of right_arg, and a return value of 0 indicates that it does not. Otherwise, the results are undefined. os_soft_pointer64_base::operator <=() os_boolean operator <=(void const* right_arg) const; os_boolean operator <=( os_soft_pointer64_base const& right_arg) const; os_boolean operator <=( os_soft_pointer32_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument precedes or is the same as the referent of right_arg, and a return value of 0 indicates that it does not precede it or is not the same. Otherwise, the results are undefined. os_soft_pointer64_base::operator >=() os_boolean operator >=(void const* right_arg) const; os_boolean operator >=( os_soft_pointer64_base const& right_arg) const; os_boolean operator >=( os_soft_pointer32_base const& right_arg) const; If the this argument and right_arg refer to elements of the same array or one beyond the end of the array, a return value of 1 indicates that the referent of the this argument follows or is the same as the referent of right_arg, and a return value of 0 indicates that it does not follow it or is not the same. Otherwise, the results are undefined. os_soft_pointer64_base::~os_soft_pointer64_base() ~os_soft_pointer64(); Cleans up internal data structures. os_soft_pointer64_base::resolve() void* resolve( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. 380 C++ A P I Reference Chapter 2: Class Library os_soft_pointer32<T> template <class T> class os_soft_pointer32 : public os_soft_pointer32_base ObjectStore provides several soft pointer classes, but usually your code should refer only to instantiations of the class template os_soft_pointer<T>, such as os_soft_ pointer<employee>. The template parameter is the referent type, the type of object referred to by the soft pointer. See the entry for the macro os_soft_pointer on page 489. Instances of this class are ObjectStore soft pointers for 32-bit platforms. Soft pointers provide an alternative to using regular pointers to persistent memory. Soft pointers reduce address space usage by deferring the reservation of address space for the soft pointer’s referent until the soft pointer is dereferenced. See the Advanced C++ A P I User Guide. You can also use soft pointers to allow 32-bit applications to access persistent pointers stored by 64-bit applications as well as to allow 64-bit applications to access pointers stored by 32-bit applications. Dereferencing a soft pointer is somewhat slower than dereferencing a regular, hard pointer, but the soft pointer facility uses a caching mechanism to increase softpointer efficiency. In a database, a soft pointer has the same format as a hard pointer. When one application stores a soft pointer in a database, another application can subsequently use the pointer as a regular, hard pointer. Inversely, when one application stores a hard pointer in a database, another application subsequently can use the pointer as a soft pointer. An application’s (or DLL’s) schema specifies those pointers that are treated as soft by the application (or DLL). For any pointer-valued data member in a database schema, the application’s schema can specify the member’s value type as a soft pointer class instead of a pointer type. These definitions are schema compatible. Because an application’s schema specifies those pointers that are to be treated as soft, only values of data members can be treated as soft pointers. Top-level pointers, or pointers in top-level arrays cannot be treated as soft. To defer address-space reservation for referents of top-level pointers, replace the top-level pointers with instances of os_Reference. This class has an API just like the soft pointer API. os_soft_pointer32<T> defines constructors, assignment operators, a conversion operator, operator ->(), and resolve(). Other soft pointer operations are inherited from os_soft_pointer32_base; see os_soft_pointer32_base on page 373. If you use a soft pointer type whose referent type is not a class, you must call the macro OS_SOFT_POINTER32_NOCLASS() on page 490, passing the referent type. Release 6.3 381 os_soft_pointer32<T> If a soft pointer refers to an object in a database that is not open, ObjectStore opens the database automatically when the object is accessed (unless the autoopen mode is auto_open_disable). The mode in which the database is opened is determined by the value of objectstore::get_auto_open_mode(). In some cases, comparing two references has a different result from comparing the corresponding pointers. See os_soft_pointer32_base on page 373 for more information. os_soft_pointer32<T>::operator =() os_soft_pointer32<T>& operator =( const os_soft_pointer32<T> const& ); os_soft_pointer32<T>& operator =( const os_soft_pointer64<T> const& ); Establishes the referent of the right operand as the referent of the left operand. Overloading The following overloading is supported: os_soft_pointer32<T>& operator =(T*); Establishes the object pointed to by the right operand as the referent of the left operand. If the right operand is 0, the left operand becomes a null soft pointer. os_soft_pointer32<T>::operator T*() operator T*( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. os_soft_pointer32<T>::operator –>() T* operator –>( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. os_soft_pointer32<T>::os_soft_pointer32() os_soft_pointer32(); Constructs a null soft pointer. Overloadings The following overloadings are supported: os_soft_pointer32(T* hard_ptr); Constructs a soft pointer with the same referent as the specifed hard pointer. If hard_ ptr is 0, constructs a null soft pointer. os_soft_pointer32(os_soft_pointer32<T> const& soft_ptr); os_soft_pointer32(os_soft_pointer64<T> const& soft_ptr); 382 C++ A P I Reference Chapter 2: Class Library Constructs a soft pointer with the same referent as the specifed soft pointer. If the specified soft pointer is NULL, constructs a null soft pointer. os_soft_pointer32<T>::resolve() T* resolve( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. Release 6.3 383 os_soft_pointer64<T> os_soft_pointer64<T> template <class T> class os_soft_pointer64 : public os_soft_pointer64_base ObjectStore provides several soft pointer classes, but usually your code should refer only to instantiations of the class template os_soft_pointer<T>, such as os_soft_ pointer<employee>. The template parameter is the referent type, the type of object referred to by the soft pointer. See the entry for the macro os_soft_pointer on page 489. Instances of this class are ObjectStore soft pointers for 64-bit platforms. Soft pointers provide an alternative to using regular pointers to persistent memory. Soft pointers reduce address space usage by deferring the reservation of address space for the soft pointer’s referent until the soft pointer is dereferenced. See the Advanced C++ A P I User Guide. You can also use soft pointers to allow 32-bit applications to access persistent pointers stored by 64-bit applications, as well as to allow 64-bit applications to access pointers stored by 32-bit applications. Dereferencing a soft pointer is somewhat slower than dereferencing a regular, hard pointer, but the soft pointer facility uses a caching mechanism to increase softpointer efficiency. In a database, a soft pointer has the same format as a hard pointer. When one application stores a soft pointer in a database, another application can subsequently use the pointer as a regular, hard pointer. Inversely, when one application stores a hard pointer in a database, another application can subsequently use the pointer as a soft pointer. An application’s (or DLL’s) schema specifies those pointers that are treated as soft by the application (or DLL). For any pointer-valued data member in a database schema, the application’s schema can specify the member’s value type as a soft pointer class instead of a pointer type. These definitions are schema compatible. Because an application’s schema specifies those pointers that are to be treated as soft, only values of data members can be treated as soft pointers. Top-level pointers, or pointers in top-level arrays, cannot be treated as soft. To defer address-space reservation for referents of top-level pointers, replace the top-level pointers with instances of os_Reference. This class has an API just like the soft pointer API. os_soft_pointer64<T> defines constructors, assignment operators, a conversion operator, operator ->(), and resolve(). Other soft pointer operations are inherited from os_soft_pointer64_base on page 377. If you use a soft pointer type whose referent type is not a class, you must call the macro OS_SOFT_POINTER64_NOCLASS(), passing the referent type. For more information about the macro, see OS_SOFT_POINTER64_NOCLASS() on page 491. 384 C++ A P I Reference Chapter 2: Class Library If a soft pointer refers to an object in a database that is not open, ObjectStore opens the database automatically when the object is accessed (unless the autoopen mode is auto_open_disable). The mode in which the database is opened is determined by the value of objectstore::get_auto_open_mode(). In some cases, comparing two references has a different result from comparing the corresponding pointers. See os_soft_pointer64_base on page 377 for more information. os_soft_pointer64<T>::operator =() os_soft_pointer64<T>& operator =( const os_soft_pointer64<T> const& ); os_soft_pointer64<T>& operator =( const os_soft_pointer32<T> const& ); Establishes the referent of the right operand as the referent of the left operand. Overloading The following overloading is supported: os_soft_pointer64<T>& operator =(T*); Establishes the object pointed to by the right operand as the referent of the left operand. If the right operand is 0, the left operand becomes a null soft pointer. os_soft_pointer64<T>::operator T*() operator T*( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. os_soft_pointer64<T>::operator –>() T* operator –>( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. os_soft_pointer64<T>::os_soft_pointer64() os_soft_pointer64(); Constructs a null soft pointer. Overloadings The following overloadings are supported: os_soft_pointer64(T* hard_ptr); Constructs a soft pointer with the same referent as the specifed hard pointer. If hard_ ptr is 0, constructs a null soft pointer. os_soft_pointer64(os_soft_pointer64<T> const& soft_ptr); os_soft_pointer64(os_soft_pointer32<T> const& soft_ptr); Release 6.3 385 os_soft_pointer64<T> Constructs a soft pointer with the same referent as the specifed soft pointer. If the specified soft pointer is NULL, constructs a null soft pointer. os_soft_pointer64<T>::resolve() T* resolve( ) const; Returns a hard pointer with the same referent as the this soft pointer. Returns 0 if this is a null soft pointer. 386 C++ A P I Reference Chapter 2: Class Library os_soft_pointer32<void> class os_soft_pointer32_void : public os_soft_pointer32_base The definition of this class is generated by the macro OS_SOFT_POINTER32_ NOCLASS(). See OS_SOFT_POINTER32_NOCLASS() on page 490 for more information. Release 6.3 387 os_soft_pointer64<void> os_soft_pointer64<void> class os_soft_pointer64_void : public os_soft_pointer64_base The definition of this class is generated by the macro OS_SOFT_POINTER64_ NOCLASS(). See OS_SOFT_POINTER64_NOCLASS() on page 491 for more information. 388 C++ A P I Reference Chapter 2: Class Library os_soft_pointer32<char> class os_soft_pointer32_void : public os_soft_pointer32_base The definition of this class is generated by the macro OS_SOFT_POINTER32_ NOCLASS(). See OS_SOFT_POINTER32_NOCLASS() on page 490 for more information. Release 6.3 389 os_soft_pointer64<char> os_soft_pointer64<char> class os_soft_pointer64_void : public os_soft_pointer64_base The definition of this class is generated by the macro OS_SOFT_POINTER64_ NOCLASS(). See OS_SOFT_POINTER64_NOCLASS() on page 491 for more information. 390 C++ A P I Reference Chapter 2: Class Library os_str_conv This class provides conversion facilities for various Japanese text encoding methods: EUC, JIS, SJIS, Unicode, and UTF8. It provides a facility, called autodetect, to detect the encoding of a given string. This is useful for applications in which a client might send strings in an unknown format — a common issue for Internet applications. os_str_conv::change_mapping() int change_mapping(mapping_table[],size_t table_sz); You can modify the mapping behavior of an existing instance of os_str_conv (whether heap- or stack-allocated) by calling os_str_conv::change_mapping(). Override information is stored for future conversion services associated with that instance. The override mapping information applies to any explicit mapping that has been established for the given os_str_conv instance. Mappings of os_str_conv instances cannot be overridden by instances using autodetect. Attempts to do so return –1 from change_mapping() to indicate this error condition. The change_mapping() function takes two arguments: mapping_table[] and table_sz. The mapping_table[] argument is an array of mapping code pairs that can be allocated locally, globally, or on the heap. If the array is heap allocated, the user must delete it after calling change_mapping(). Internally, change_mapping() makes a sorted copy of mapping_table[]. The sorting provides quick lookup at run time. The internal copy is freed when the os_ str_conv destructor is eventually called. Note that the mapping pairs are unsigned 32-bit quantities, and the least significant bit (LSB) is on the right. For example, the single-byte character 0x5C is represented as 0x0000005C, and the two-byte code 0x81,0x54 is represented as 0x0000815F. The table_sz argument is the number of elements (not bytes) in mapping_table[]. os_str_conv::convert() Because Unicode is a 16-bit quantity, byte order depends on platform architecture. (Other encodings are byte streams and therefore do not depend on processor architecture.) On little-endian systems such as Intel, the low-order byte comes first. On big-endian systems (Sparc, for example), the high-order byte is first. Overloadings There are three overloadings to the os_str_conv::convert() function to provide flexibility for dealing with Unicode strings with different byte-ordering schemes. If an argument is of char* type, all 16-bit quantities are considered big-endian regardless of platform. However, if the type is os_unsigned_int16*, the values assigned or read are handled according to the platform architecture. The overloadings are as follows: encode_type convert(char* dest, const char* src); Release 6.3 391 os_str_conv If either dest or src is a buffer containing Unicode characters, these 16-bit characters are considered big-endian regardless of platform architecture. encode_type convert(os_unsigned_int16* dest, const char* src); Interprets 16-bit Unicode buffer dest according to the byte order of the processor used. encode_type convert(char* dest, const os_unsigned_int16* src); Interprets 16-bit Unicode buffer src according to the byte order of the processor used. os_str_conv::get_converted_size() virtual size_t get_converted_size(const char* src) const; Returns the size of the buffer, in units of bytes, required to contain the converted result of the given src string. If src is a Unicode string, its 16-bit characters are considered big-endian regardless of platform architecture. Because the entire source string must be examined, the time it takes for this function to complete is proportional to the length of the source string. If the autodetect mode is used and autodetect fails to determine the encoding of src, get_converted_size() returns 0. Overloading The following overloading is supported: virtual size_t get_converted_size( const os_unsigned_int16* src ) const; Returns the size of the buffer, in units of bytes, required to contain the converted result of the given src string. If src is a Unicode string, its 16-bit characters are interpreted according to the byte order of the processor used. Because the entire source string must be examined, the time it takes for this function to complete is proportional to the length of the source string. If the autodetect mode is used and autodetect fails to determine the encoding of src, get_converted_size() returns 0. 392 C++ A P I Reference Chapter 2: Class Library os_str_conv::os_str_conv() os_str_conv( encode_type_enum dest, encode_type_enum src = AUTOMATIC ); Instantiates a conversion path. The value of encode_type_enum can be one of the following: Release 6.3 Value Meaning AUTOMATIC Determines the encoding of the source string automatically. This automatic detection distinguishes EUC and SJIS only. It might not correctly detect SJIS if the string contains half-width kana. AUTOMATIC_ALLOW_KANA Determines the encoding of the source string automatically. This automatic detection distinguishes EUC and SJIS only. This correctly interprets SJIS strings that contain half-width kana, but it might incorrectly interpret certain EUC strings as SJIS strings. ASCII Strings are interpreted as single-byte ASCII characters. SJIS Strings are interpreted as multibyte Japanese strings of SJIS encoding. EUC Strings are interpreted as multibyte Japanese strings of EUC encoding. UNICODE Strings are interpreted as Japanese strings of Unicode encoding. JIS Strings are interpreted as multibyte Japanese strings of JIS encoding. UTF8 Strings are interpreted as multibyte Japanese strings of UTF-8 encoding. 393 os_string os_string Instances of this class encapsulate null-terminated character arrays. os_string::compare() os_int16 compare(const os_string& str) const; Performs a string comparison similar to the strcmp() function, and returns one of three values to indicate the result of the comparison: • 0 if the this string and the str argument have matching character arrays • 1 if this is greater than str • –1 if this is less than str os_string::compare_nocase() os_int16 compare_nocase(const os_string& str) const; Performs a string comparison similar to the strcmp() function, but ignores case. The return value indicates the result of the comparison and can be one of the following: • 0 if the this string and the str argument have matching character arrays • 1 if this is greater than str • –1 if this is less than str os_string::is_null() os_boolean is_null() const; Returns nonzero if the specified string is the null string; returns 0 otherwise. os_string::operator const char*() operator const char*(); Returns a pointer to the specified string’s character array. os_string::operator =() os_string& operator=(const os_string& str); Sets the value of the specified string to a copy of the value of the specified string. 394 C++ A P I Reference Chapter 2: Class Library os_string::os_string() os_string(); Constructs a null string. Overloadings The following overloadings are supported: os_string(const char* ch); Constructs a string whose value is a copy of the specified character array. os_string(const os_string& str); Constructs a copy of the specified string. os_string::~os_string() ~os_string(); Deletes the private character array associated with the specified string. Release 6.3 395 os_subscription os_subscription Objects of class os_subscription are created by users to perform subscription and unsubscription operations. Note that you do not need to create os_subscription objects in order to subscribe or unsubscribe. You can accomplish a single subscription or unsubscription by passing an os_database, os_segment, os_ cluster, or address range directly to os_notification::subscribe() or os_ notification::unsubscribe(). The primary reason to manipulate os_subscription objects directly is to pass an array of them to os_notification::subscribe(). os_ notification::subscribe() has overloadings that take the same sets of arguments as os_subscription constructors. Use these if you want to subscribe to only a single notification address. You can call these directly and completely bypass the use of os_subscription objects. The reason you might want to pass an array of os_subscription to os_ notification::subscribe() is that it is much more efficient to call os_ notification::subscribe() once with an array than to call it separately for each subscription when there are multiple subscriptions to register. Each os_subscription object represents an address range in an ObjectStore database. Four constructors allow creation of subscriptions covering an entire database, an entire segment, an entire object cluster, or a specific location range. When passing database locations to os_subscription member functions, you need not explicitly convert to os_soft_pointer. os_subscription::assign() void assign(const os_database* db); Initializes or reassigns an os_subscription object to an entire database. You must have previously created the object with the os_database overloading of the os_ subscription() constructor. Once the object has been created, you can use the assign() function to reassign it as often as needed. The assignment operator overloading (os_subscription::operator =()) has the same purpose as the assign() function. Overloadings The following overloadings can be used to initialize or reassign an os_ subscription object to an entire segment, cluster, or address range: void assign(const os_segment* seg); void assign(const os_cluster* clstr); void assign(const os_soft_pointer<void>& addr_range, os_int32 number_of_bytes = 1); You must use an overloading that has the same argument type as the overloading of the constructor that you used to construct the os_subscription object. 396 C++ A P I Reference Chapter 2: Class Library The number_of_bytes argument to the os_soft_pointer overloading must be used if the range referenced by addr_range is greater than 1. os_subscription::get_database() os_database* get_database(); The only accessor for os_subscription returns the database associated with the subscription. An uninitialized os_subscription has a null (0) database. Subscribe and unsubscribe nonstatic member functions are provided as shortcuts for calling os_notification::subscribe() and os_notification::unsubscribe(). They are • void subscribe(); • void unsubscribe(); See os_namespace on page 258 for more information about notification. os_subscription::operator=() os_subscription& operator=(const os_database* db); Initializes or reassigns an os_subscription object to an entire database. You must have previously created the object with the os_database overloading of the os_ subscription() constructor. Once the object has been created, you can use the assignment operator to reassign it as often as needed. The os_subscription::assign() function has the same purpose as the assignment operator overloading. Overloadings The following overloadings can be used to initialize or reassign an os_ subscription object to an entire segment, cluster, or address: os_subscription& operator=(const os_segment* seg); os_subscription& operator=(const os_cluster* clstr); os_subscription& operator=(const os_soft_pointer<void>& addr); You must use an overloading that has the same argument type as the overloading of the constructor that you used to construct the os_subscription object. Note that you can use the os_soft_pointer overloading only if addr references a single byte. For anything larger, you must must use the os_soft_pointer overloading of os_subscription::assign(). When passing database locations to os_subscription member functions, you need not explicitly convert to os_soft_pointer. Release 6.3 397 os_subscription os_subscription::os_subscription() os_subscription(); Creates an uninitialized subscription. The default constructor. After constructing an os_subscription object, you can use os_ subscription::assign() or one of the overloadings of the assignment operator to initialize or reassign an os_subscription object. Overloadings The following overloadings create a subscription to an entire database, segment, cluster, or address range: os_subscription(const os_database* db); os_subscription(const os_segment* seg); os_subscription(const os_cluster* clstr); os_subscription( const os_soft_pointer<void>& addr_range, os_int32 number_of_bytes = 1 ); The number_of_bytes argument to the last overloading must be used if the size of the range referenced by addr_range is greater than 1 byte. 398 C++ A P I Reference Chapter 2: Class Library os_template This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent type or function templates. os_type_template is derived from os_template; see os_type_ template on page 436. os_template::Function This enumerator is a possible return value from os_template::get_kind( ), indicating a function template. os_template::get_args() os_List<const os_template_formal_arg*> get_args( ) const; Returns a list, in declaration order, of the formal arguments of the specified template. Each element of the list is a pointer to a const os_template_formal_arg. os_template::get_kind() enum os_template_kind {Type, Function}; os_template_kind get_kind( ) const; Returns an enumerator indicating whether the specified template is a type template or a function template. The possible return values are os_template::Type and os_ template::Function. os_template::is_unspecified() os_boolean is_unspecified( ) const; Returns nonzero (true) if and only if the specified os_template is the unspecified template. Some os_template-valued attributes in the MOP are required to have values in a consistent schema, but they might lack values in the transient schema before schema installation or evolution is performed. The get function for such an attribute returns a reference to an os_template. The fact that a reference rather than a pointer is returned indicates that the value is required in a consistent schema. In the transient schema, if such an attribute lacks a value (because you have not yet specified it), the get function returns the unspecified template. This is the only os_ template for which is_unspecified( ) returns nonzero. os_template::operator const os_type_template&() operator const os_type_template&( ) const; Provides for safe conversion to const os_type_template. If the specified os_ template is not an os_type_template, err_mop_illegal_cast is signaled. Release 6.3 399 os_template os_template::operator os_type_template&() operator os_type_template&( ); Provides for safe conversion to os_type_template. If the specified os_template is not an os_type_template, err_mop_illegal_cast is signaled. os_template::set_args() void set_args(os_List<os_template_formal_arg*>&); Specifies the list, in declaration order, of the formal arguments of the specified template. Each element of the list is a pointer to an os_template_formal_arg. os_template::Type This enumerator is a possible return value from os_template::get_kind( ), indicating a type template. 400 C++ A P I Reference Chapter 2: Class Library os_template_actual_arg This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent actual arguments used to instantiate type or function templates. The types os_type_template_ actual_arg and os_literal_template_actual_arg are derived from os_ template_actual_arg. os_template_actual_arg::get_kind() enum os_template_actual_arg_kind { type_actual, literal_actual }; os_template_actual_arg_kind get_kind( ) const; Returns an enumerator indicating whether the specified actual is a type or a value (that is, literal). os_template_actual_arg::operator const os_literal_template_ actual_arg&() operator const os_literal_template_actual_arg&( ) const; Provides for safe conversion to const os_literal_template_actual_arg&. If the specified os_template_actual_arg is not an os_literal_template_actual_arg, err_mop_illegal_cast is signaled. os_template_actual_arg::operator const os_type_template_ actual_arg&() operator const os_type_template_actual_arg&( ) const; Provides for safe conversion to const os_type_template_actual_arg&. If the specified os_template_actual_arg is not an os_type_template_actual_arg, err_mop_illegal_cast is signaled. os_template_actual_arg::operator os_literal_template_actual_ arg&() operator os_literal_template_actual_arg&( ); Provides for safe conversion to os_literal_template_actual_arg&. If the specified os_template_actual_arg is not an os_literal_template_actual_arg, err_mop_illegal_cast is signaled. Release 6.3 401 os_template_actual_arg os_template_actual_arg::operator os_type_template_actual_ arg&() operator os_type_template_actual_arg&(); Provides for safe conversion to const os_type_template_actual_arg&. If the specified os_template_actual_arg is not an os_type_template_actual_arg, err_mop_illegal_cast is signaled. 402 C++ A P I Reference Chapter 2: Class Library os_template_formal_arg This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent formal arguments for type or function templates. This class has no public members. os_template_formal_arg::get_kind() enum os_template_formal_arg_kind {Type, Value}; os_template_formal_arg_kind get_kind( ) const; Returns an enumerator indicating whether the specified formal is a type argument or a value argument (that is, whether its actuals are types or values). os_template_formal_arg::get_name() const char* get_name( ) const; Returns the name of the specified formal argument. os_template_formal_arg::operator const os_template_type_ formal&() operator const os_template_type_formal&( ) const; Provides for safe conversion to const os_template_type_formal&. If the specified os_template_formal_arg is not an os_template_type_formal, err_mop_ illegal_cast is signaled. os_template_formal_arg::operator const os_template_value_ formal&() operator const os_template_value_formal&( )const; Provides for safe conversion to const os_template_value_formal&. If the specified os_template_formal_arg is not an os_template_value_formal, err_ mop_illegal_cast is signaled. os_template_formal_arg::operator os_template_type_formal&() operator os_template_type_formal&( ); Provides for safe conversion to os_template_type_formal&. If the specified os_ template_formal_arg is not an os_template_type_formal, err_mop_illegal_ cast is signaled. os_template_formal_arg::operator os_template_value_ formal&() operator os_template_value_formal&(); Provides for safe conversion to os_template_value_formal&. If the specified os_ template_formal_arg is not an os_template_value_formal, err_mop_illegal_ cast is signaled. Release 6.3 403 os_template_formal_arg os_template_formal_arg::set_name() void set_name(const char* name); Sets the name of the specified formal argument. 404 C++ A P I Reference Chapter 2: Class Library os_template_instantiation This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent instantiations of a type or function template. The class os_type_template is derived from os_ template_instantiation; see os_type_template on page 436. os_template_instantiation::create() static os_template_instantiation& create( os_template*, os_List<os_template_actual_arg*>* ); Creates an os_template_instantiation from the specified template and list of actual arguments. os_template_instantiation::get_args() os_List<const os_template_actual_arg*> get_args( ) const; Returns a list, in declaration order, of the actual arguments used to instantiate the associated template. Each element of the list is a pointer to a const os_template_ actual_arg. Overloadings The following is the non-const overloading of this function: os_List<os_template_actual_arg*> get_args( ); Returns a list, in declaration order, of the actual arguments used to instantiate the associated template. Each element of the list is a pointer to an os_template_actual_ arg. os_template_instantiation::get_template() const os_template& get_template( ) const; Returns the const template instantiated by the specified os_template_ instantiation. Overloadings The following is the non-const overloading of this function: os_template& get_template( ); Returns the non-const template instantiated by the specified os_template_ instantiation. os_template_instantiation::set_args() void set_args(os_List<os_template_actual_arg*>&); Sets, in declaration order, the actual arguments with which to instantiate the associated template. Release 6.3 405 os_template_instantiation os_template_instantiation::set_template() void set_template(os_template&); Sets the template instantiated by the specified os_template_instantiation. 406 C++ A P I Reference Chapter 2: Class Library os_template_type_formal This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent formal template parameters whose actuals are types. The class os_template_type_formal is derived from os_template_formal_arg; see os_template_formal_arg on page 403. os_template_type_formal::create() static os_template_type_formal& create(const char* name); Creates an os_template_type_formal with the specified name. Release 6.3 407 os_template_value_formal os_template_value_formal This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent formal template parameters whose actuals are values. The class os_template_value_formal is derived from os_template_formal_arg; see os_template_formal_arg on page 403. os_template_value_formal::create() static os_template_value_formal& create( const char* name, os_type* type ); Creates an os_template_value_formal with the specified name. The actuals for the created formal are instances of the specified type. os_template_value_formal::get_type() const os_type& get_type( ) const; Returns a const reference to an os_type representing the type of actuals for the specified formal. Overloading The following is the non-const overloading of this function: os_type& get_type( ); Returns a non-const reference to an os_type representing the type of actuals for the specified formal. os_template_value_formal::set_type() void set_type(os_type&); Sets the type of actuals for the specified formal. 408 C++ A P I Reference Chapter 2: Class Library os_transaction Instances of the class os_transaction represent transactions of the current session. For more information about transactions, see Chapter 5, Transactions, in the C++ A P I User Guide. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_transaction::abort() static void abort(os_transaction* = get_current( )); Aborts the specified transaction. For dynamic transactions, control flows to the next statement after you call abort( ). For lexical transactions, control flows to the next statement after the end of the current transaction block. Persistent data is rolled back to its state at the beginning of the transaction. In addition, if the aborted transaction is not nested within another transaction, all locks are released and other sessions can access the pages that the aborted transaction accessed. os_transaction::abort_top_level() static void abort_top_level( ); Aborts the outermost transaction within which control currently resides. If the current transaction is not nested, this function aborts the current transaction. os_transaction::begin() static os_transaction *begin( transaction_type_enum t_type = os_transaction::update, transaction_scope_enum t_scope = os_transaction::local ); Begins a dynamic transaction. A pointer to an object representing the transaction is returned. The user is responsible for deleting this object after terminating the transaction. The t_type argument should be coded as either os_ transaction::update or os_transaction::read_only, depending on the type of transaction desired. Unlike lexical transactions, which are started with a transaction macro (OS_BEGIN_TXN() or OS_BEGIN_NAMED_TXN()), dynamic transactions are not retried automatically when aborted because of deadlock. For information about the lexical-transaction macros, see OS_BEGIN_TXN() on page 474. The t_scope argument specifies whether a transaction is local (the default) or global. To start a global transaction in a single session, call os_transaction::begin() with the t_scope argument set to os_transaction::global. For information about local and global transactions, see Local and Global Transactions in Chapter 5 of the C++ A P I User Guide. Release 6.3 409 os_transaction For multithreaded applications, calling os_transaction::begin() in one thread can affect other, concurrent threads. For applications that do not use the sessions facility, starting a transaction in one thread causes all other concurrent threads to enter the same transaction. For applications that use the sessions facility, starting a transaction in one thread causes all other concurrent threads in the calling thread's current session to enter the same transaction. ObjectStore performs automatic synchronization that prevents two threads from entering the ObjectStore run time concurrently. However, you are responsible for synchronizing threads’ access to your own persistent data. Applications that do not use the sessions facility must synchronize access to persistent data by all concurrent threads. In addition, such applications must synchronize threads before a transaction commit, abort, or checkpoint; that is, when one thread performs a commit, abort, or checkpoint, there must be no concurrent access to persistent data by any other threads. Applications that use the sessions facility must synchronize access to persistent data by threads in the same session; ObjectStore synchronizes access to persistent data by threads in different sessions. For more information, see Chapter 3, Multithread and Multisession Applications, of the Advanced C++ A P I User Guide. In addition, such applications must synchronize threads before a transaction commit, abort, or checkpoint; that is, when one thread performs a commit, abort, or checkpoint, no concurrent access to persistent data by other threads in the same session is allowed. All applications are responsible for synchronizing all threads’ access to transient data. Overloading The following overloading is supported: static os_transaction *os_transaction::begin( char* name, transaction_type_enum t_type = update, transaction_scope_enum t_scope = local ); Like the first overloading, except that the new transaction has the specified name. os_transaction::checkpoint() Note Like transaction commit and abort, checkpoint operations are not thread safe. Applications must ensure that other threads do not access persistent memory during a checkpoint operation. static void checkpoint(); Invokes checkpoint on the current transaction. Overloadings The following overloading is supported: static checkpoint(os_transaction*); 410 C++ A P I Reference Chapter 2: Class Library Invokes checkpoint on the given transaction. Note that checkpoint is valid only for a top-level dynamic transaction. Attempting to invoke a checkpoint on a nested or lexical transaction results in an exception. os_transaction::commit() static void commit(os_transaction* = get_current( )); Commits the specified dynamic transaction. Unlike transactions started with a transaction statement, dynamic transactions are not retried automatically when the transaction is aborted because of a deadlock. os_transaction::get_current() static os_transaction* get_current( ); Returns a pointer to the most deeply nested transaction in which control currently resides. The value is 0 if no transaction is in progress. os_transaction::get_name() char* get_name( ) const; Returns the name of the specified transaction, as set by os_transaction::set_ name( ). It is the caller’s responsibility to deallocate the string when it is no longer needed. os_transaction::get_parent() os_transaction* get_parent( ) const; Returns a pointer to the transaction within which the specified transaction is directly nested. os_transaction::get_scope() os_transaction_scope_enum get_scope( ) const; Returns os_transaction::local or os_transaction::global, depending on whether the current transaction is local or global. os_transaction::get_type() os_transaction_type get_type( ) const; Returns os_transaction::read_only or os_transaction::update, depending on the one that is true of the current transaction. os_transaction::is_aborted() os_boolean is_aborted( ) const; Returns nonzero if the specified dynamic transaction is aborted, and 0 otherwise. For a transaction newly created by os_transaction::begin( ), 0 is returned. Release 6.3 411 os_transaction os_transaction::is_committed() os_boolean is_committed( ) const; Returns nonzero if the specified dynamic transaction is committed, and 0 otherwise. For a transaction newly created by os_transaction::begin( ), 0 is returned. os_transaction::is_lock_contention() static os_boolean is_lock_contention(); Returns nonzero (true) if a ObjectStore server involved in the specified transaction has experienced contention for some persistent memory that the calling application is using; otherwise, returns 0 (false). It also returns false if it is not called from within a transaction. This function can be used in conjunction with multiversion concurrency control (MVCC) to help determine whether to start a new transaction to make available more up-to-date data. If your application has a database open for MVCC, and during the current transaction another application has write locked a page read by your application, is_lock_contention() returns nonzero (true). Calling this function outside a transaction signals err_trans. Note is_lock_contention() is advisory only; it does not have to be called, and you can ignore its return value without jeopardizing in any way the correctness of ObjectStore's behavior. os_transaction::is_prepared() os_boolean is_prepared( ) const; Returns nonzero (true) if os_transaction::prepare_to_commit() was invoked in the current transaction; otherwise, returns 0 (false). os_transaction::prepare_to_commit() prepare_to_commit(); Performs, in advance, the parts of transaction commit that can fail due to the inability to acquire a resource. If this function completes successfully, the actual transaction commit is virtually reduced to sending a commit message to the ObjectStore server. All the modified data was sent to the server during the invocation of the prepare_ to_commit() call. After the call to prepare_to_commit(), the only ObjectStore operations that should occur are transaction commit or abort. Some of the failures that can occur during the call to prepare_to_commit() are • The client is selected as a deadlock victim by the server. The exception err_ deadlock would be signaled. • The server runs out of disk space while it is growing a segment or writing to the log file. The exception err_server_full would be signaled. • The exception err_broken_server_connection can be signaled if the server fails during commit. 412 C++ A P I Reference Chapter 2: Class Library Restrictions Restrictions on use: The exception err_prepare_to_commit is signaled if • There is access to persistent data after a call to prepare_to_commit(). • Any objectstore operation other than commit or abort is attempted after a call to prepare_to_commit(). • The function is invoked within a nested transaction. After err_prepare_to_commit is handled, the transaction cannot do anything else with ObjectStore and it must call os_transaction::abort_top_level(). os_transaction::read_only This enumerator is an optional argument used in the transaction macros OS_BEGIN_ TXN() and OS_BEGIN_NAMED_TXN() or as an argument to os_ transaction::begin(). It specifies a transaction that performs no updates on persistent storage. For information about the macros, see OS_BEGIN_TXN() on page 474. For information about begin(), see os_transaction::begin() on page 409. os_transaction::session_of() os_session* session_of() const; Returns the os_session object for the session in which the specified os_ transaction* was retrieved. This function can be used with os_session::set_current() to enable a thread to join the session associated with an os_transaction object. For example, if txn_ptr references an os_transaction object, then the statement os_session::set_current(txn_ptr->session_of()); enables the currently executing thread to access the object by setting the thread’s current session to the session associated with txn_ptr. os_transaction::set_name() void set_name(const char* new_name); Sets the name of the specified transaction. The function copies the string new_name. os_transaction::top_level() os_boolean top_level( ) const; Returns nonzero if the specified transaction is nonnested; returns 0 otherwise. Release 6.3 413 os_transaction os_transaction::update This enumerator is an optional argument used in the transaction macros OS_BEGIN_ TXN() and OS_BEGIN_NAMED_TXN() or as an argument to os_ transaction::begin(). It specifies a transaction that performs updates on persistent storage. For information about the macros, see OS_BEGIN_TXN() on page 474. For information about begin(), see os_transaction::begin() on page 409. 414 C++ A P I Reference Chapter 2: Class Library os_transaction_hook This class provides functions for registering and deregistering transaction hook functions. It also provides enumerators for specifying the type of event to trigger invocation of a given hook function. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/tranhook.hh>. os_transaction_hook::after_begin This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked immediately after each transaction begins. The type is event_type. os_transaction_hook::after_checkpoint This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked after os_transaction::checkpoint() completes its work and before control is returned to the caller. For information about the checkpoint() function, see os_transaction::checkpoint() on page 410. The type is event_type. os_transaction_hook::after_commit This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked immediately after each transaction commit. The type is event_type. os_transaction_hook::before_abort This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked immediately before each transaction abort. The type is event_type. os_transaction_hook::before_checkpoint This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked before os_transaction::checkpoint() starts its work. For information about the checkpoint() function, see os_ transaction::checkpoint() on page 410. The type is event_type. Release 6.3 415 os_transaction_hook os_transaction_hook::before_commit This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked immediately before each transaction commit. The type is event_type. os_transaction_hook::before_retry This enumerator is used as an argument to register_hook( ) to specify that a hook function is to be invoked immediately before each retry of an aborted transaction. The type is event_type. os_transaction_hook::deregister_hook() static void deregister_hook(os_int32 event_type); Deregisters all hook functions with event type event_type. Note that if a previously registered hook function was returned by register_hook( ), it must be reregistered. os_transaction_hook::register_hook() typedef void (*hook_t)( const os_transaction_hook::event_type, const os_transaction* txn ); static hook_t register_hook( os_transaction_hook::event_type, hook_t hook_fn ); Registers hook_fn and specifies that it should be called each time an event of type os_transaction_hook::event_type occurs. The value of os_transaction_ hook::event_type is one of the following enumerators: • os_transaction_hook::after_begin on page 415 • os_transaction_hook::after_commit on page 415 • os_transaction_hook::before_abort on page 415 • os_transaction_hook::before_commit on page 416 • os_transaction_hook::before_retry on page 416 A pointer to the current hook function is returned, or 0 is returned if there is none. The application must ensure that any previously registered hook functions, as returned by register_hook( ), are called at some point during the execution of the current hook function. When hook_fn is invoked, the arguments passed to it are as follows: the first argument (os_transaction_hook::event_type) is an enumerator indicating the type of event that triggered invocation. The second argument is a pointer to the current transaction. If the first argument is os_transaction_hook::before_retry, the second argument is 0. Caution 416 Do not abort or commit the current transaction from within a hook function. C++ A P I Reference Chapter 2: Class Library os_transformer_binding Instances of this class represent an association between a class and a transformer function. Instances of os_transformer_binding are used as arguments to os_ schema_evolution::augment_pre_evol_transformers( ) and os_schema_ evolution::augment_post_evol_transformers( ). Instances should be allocated only in transient memory. os_transformer_binding::os_transformer_binding() os_transformer_binding( char* class_name, void (*func)(void*) ); Associates the class named class_name with the function func. Release 6.3 417 os_type os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent C++ types. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_type::Anonymous_indirect This enumerator indicates a const or volatile type. It is a possible return value from os_type::get_kind( ). os_type::Array This enumerator indicates an array type. It is a possible return value from os_ type::get_kind( ). os_type::Char This enumerator indicates a character type. It is a possible return value from os_ type::get_kind( ). os_type::Class This enumerator indicates a class. It is a possible return value from os_type::get_ kind( ). os_type::Double This enumerator indicates the type double. It is a possible return value from os_ type::get_kind( ). os_type::Enum This enumerator indicates an enumeration type. It is a possible return value from os_ type::get_kind( ). os_type::Float This enumerator indicates the type float. It is a possible return value from os_ type::get_kind( ). os_type::Function This enumerator indicates a function type. It is a possible return value from os_ type::get_kind( ). 418 C++ A P I Reference Chapter 2: Class Library os_type::get_alignment() os_unsigned_int32 get_alignment( ) const; Gets the alignment associated with the type. os_type::get_enclosing_class() const os_class_type *get_enclosing_class( ) const; If a class’s definition is nested within that of another class, this other class is the enclosing class of the nested class. The function returns a const pointer to the enclosing class, or 0 if there is no enclosing class. os_class_type *get_enclosing_class( ); If a class’s definition is nested within that of another class, this other class is the enclosing class of the nested class. The function returns a non-const pointer to the enclosing class, or 0 if there is no enclosing class. os_type::get_kind() os_unsigned_int32 get_kind( ) const; Returns one of the following enumerators describing the specified instance of os_ type: • Type • Void • Unsigned_char • Signed_char • Char • Wchar_t • Unsigned_short • Signed_short • Integer • Unsigned_integer • Signed_long • Unsigned_long • Float • Double • Long_double • Named_indirect • Anonymous_indirect • Pointer • Reference • Pointer_to_member • Array • Class • Instantiated_class • Enum • Function Release 6.3 419 os_type • Undefined These enumerators are defined within the scope of the class os_type. os_type::get_kind_string() static const char* get_kind_string(os_type_kind); Returns a string representation of a type kind, as specified with one of the enumerators returned by get_kind( ). os_type::get_size() os_unsigned_int32 get_size( ); Returns the size of the specified type in bytes. os_type::get_string() char* get_string( ) const; Returns a new string containing a printable representation of the specified instance of os_type. The string must be deleted after its value has been consumed. os_type::Instantiated_class This enumerator indicates a class that is an instantiation of a class template. It is a possible return value from os_type::get_kind( ). os_type::Integer This enumerator indicates the type int. It is a possible return value from os_ type::get_kind( ). os_type::is_class_type() os_boolean os_type::is_class_type() const; Returns 1 if the type is an os_class_type or os_instantiated_class_type. os_type::is_const() os_boolean is_const( ) const; Returns 1 if and only if the type expression associated with the specified instance of os_type includes a const type specifier. os_type::is_indirect_type() os_boolean os_type::is_indirect_type() const; Returns true if the type is an os_anonymous_indirect_type or an os_named_ indirect_type. os_type::is_integral_type() os_boolean is_integral_type( ) const; 420 C++ A P I Reference Chapter 2: Class Library Returns nonzero if the specified os_type is an instance of os_integral_type, such as one representing the type unsigned int. Returns 0 otherwise. os_type::is_pointer_type() os_boolean os_type::is_pointer_type() const; Returns 1 if the type is an os_pointer_type, os_reference_type, or an os_ pointer_to_member_type. os_type::is_real_type() os_boolean is_real_type( ) const; Returns nonzero if the specified os_type is an instance of os_real_type, such as one representing the type long double. Returns 0 otherwise. os_type::is_unspecified() os_boolean is_unspecified( ) const; Returns nonzero if and only if the specified os_type is the unspecified type. Some os_type-valued attributes in the MOP are required to have values in a consistent schema but might lack values in the transient schema before schema installation or evolution is performed. The get function for such an attribute returns a reference to an os_type or os_class_type. The fact that a reference rather than a pointer is returned indicates that the value is required in a consistent schema. In the transient schema, if such an attribute lacks a value (because you have not yet specified it), the get function returns the unspecified type. This is the only os_type for which is_ unspecified( ) returns nonzero. os_type::is_volatile() os_boolean is_volatile( ) const; Returns 1 if and only if the type expression associated with the specified instance of os_type includes a volatile type specifier. os_type::Long_double This enumerator indicates the type long double. It is a possible return value from os_type::get_kind( ). os_type::Named_indirect This enumerator indicates a typedef. It is a possible return value from os_ type::get_kind( ). os_type::operator const os_anonymous_indirect_type&() operator const os_anonymous_indirect_type&( ) const; Provides for safe casts from const os_type to const os_anonymous_indirect_ type&. If the cast is not permissible, err_mop_illegal_cast is signaled. Release 6.3 421 os_type os_type::operator const os_array_type&() operator const os_array_type&( ) const; Provides for safe casts from const os_type to const os_array_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_class_type&() operator const os_class_type&( ) const; Provides for safe casts from const os_type to const os_class_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_enum_type&() operator const os_enum_type&( ) const; Provides for safe casts from const os_type to const os_enum_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_function_type&() operator const os_function_type&( ) const; Provides for safe casts from const os_type to const os_function_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_instantiated_class_type&() operator const os_instantiated_class_type&( ) const; Provides for safe casts from const os_type to const os_instantiated_class_ type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_integral_type&() operator const os_integral_type&( ) const; Provides for safe casts from const os_type to const os_integral_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_named_indirect_type&() operator const os_named_indirect_type&( ) const; Provides for safe casts from const os_type to const os_named_indirect_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_pointer_to_member_type&() operator const os_pointer_to_member_type&( ) const; Provides for safe casts from const os_type to const os_pointer_to_member_ type&. If the cast is not permissible, err_mop_illegal_cast is signaled. 422 C++ A P I Reference Chapter 2: Class Library os_type::operator const os_pointer_type&() operator const os_pointer_type&( ) const; Provides for safe casts from const os_type to const os_pointer_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_real_type&() operator const os_real_type&( ) const; Provides for safe casts from const os_type to const os_real_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_reference_type&() operator const os_reference_type&( ) const; Provides for safe casts from const os_type to const os_reference_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_type_type&() operator const os_type_type&( ) const; Provides for safe casts from const os_type to const os_type_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator const os_void_type&() operator const os_void_type&( ) const; Provides for safe casts from const os_type to const os_void_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_anonymous_indirect_type&() operator os_anonymous_indirect_type&( ); Provides for safe casts from os_type to os_anonymous_indirect_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_array_type&() operator os_array_type&( ); Provides for safe casts from os_type to os_array_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_class_type&() operator os_class_type&( ); Provides for safe casts from os_type to os_class_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. Release 6.3 423 os_type os_type::operator os_enum_type&() operator os_enum_type&( ); Provides for safe casts from os_type to os_enum_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_function_type&() operator os_function_type&( ); Provides for safe casts from os_type to os_function_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_instantiated_class_type&() operator os_instantiated_class_type&( ); Provides for safe casts from os_type to os_instantiated_class_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_integral_type&() operator os_integral_type&( ); Provides for safe casts from os_type to os_integral_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_named_indirect_type&() operator os_named_indirect_type&( ); Provides for safe casts from os_type to os_named_indirect_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_pointer_to_member_type&() operator os_pointer_to_member_type&( ); Provides for safe casts from os_type to os_pointer_to_member_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_pointer_type&() operator os_pointer_type&( ); Provides for safe casts from os_type to os_pointer_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_real_type&() operator os_real_type&( ); Provides for safe casts from os_type to os_real_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. 424 C++ A P I Reference Chapter 2: Class Library os_type::operator os_reference_type&() operator os_reference_type&( ); Provides for safe casts from os_type to os_reference_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_type_type&() operator os_type_type&( ); Provides for safe casts from os_type to os_type_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::operator os_void_type&() operator os_void_type&( ); Provides for safe casts from os_type to os_void_type&. If the cast is not permissible, err_mop_illegal_cast is signaled. os_type::Pointer This enumerator indicates a pointer type. It is a possible return value from os_ type::get_kind( ). os_type::Pointer_to_member This enumerator indicates a pointer-to-member type. It is a possible return value from os_type::get_kind( ). os_type::Reference This enumerator indicates a reference type. It is a possible return value from os_ type::get_kind( ). os_type::set_alignment() void set_alignment(os_unsigned_int32); Sets the alignment associated with the type. os_type::set_size() void set_size (os_unsigned_int32 size) _OS_throw (err_mop); Sets the size of the specified type in bytes. os_type::Signed_char This enumerator indicates the type signed char. It is a possible return value from os_type::get_kind( ). Release 6.3 425 os_type os_type::Signed_long This enumerator indicates the type long. It is a possible return value from os_ type::get_kind( ). os_type::Signed_short This enumerator indicates the type short. It is a possible return value from os_ type::get_kind( ). os_type::strip_indirect_types() const os_type& strip_indirect_types( ) const; For types with const or volatile specifiers, this function returns a const reference to the type being specified as const or volatile. For example, if the specified os_ type represents the type const int, then strip_indirect_types() returns an os_ type representing the type int. If the specified os_type represents the type char const* const, then strip_indirect_types() returns an os_type representing the type char const*. For typedefs, this function returns the original type for which the typedef is an alias. This function calls itself recursively until the result is not an os_indirect_type. So, for example, consider an os_named_indirect_type representing typedef const part const_part; The result of applying strip_indirect_types( ) to this is an os_class_type representing the class part (not an os_anonymous_indirect_type representing const part, which would be the result of os_indirect_type::get_target_ type( )). Overloadings The following overloadings are supported: os_type& strip_indirect_types( ); For types with const or volatile specifiers, this function returns a non-const reference to the type being specified as const or volatile. For example, if the specified os_type represents the type const int, strip_indirect_types() returns an os_type representing the type int. If the specified os_type represents the type char const* const, strip_indirect_types() returns an os_type representing the type char const*. For typedefs, this function returns the original type for which the typedef is an alias. This function calls itself recursively until the result is not an os_indirect_type. So, for example, consider an os_named_indirect_type representing typedef const part const_part; The result of applying strip_indirect_types( ) to this is an os_class_type representing the class part (not an os_anonymous_indirect_type representing 426 C++ A P I Reference Chapter 2: Class Library const part, which would be the result of os_indirect_type::get_target_ type( )). os_type::Type This enumerator indicates a type serving as a parameter to a class or function template. It is a possible return value from os_type::get_kind( ). os_type::type_at() static const os_type* type_at(const void* p); Returns the type of the object that begins at location p. The p argument should point to the beginning of an instance of a class or built-in type such as int. The instance can be allocated at top level, or it can be the value of a data member or the subobject corresponding to a base class. If p does not point to the beginning of such an instance, 0 is returned. If two or more objects start at p, the type of the innermost object is returned. os_type::type_containing() static const os_type* type_containing( const void* p, const void*& p_container, os_unsigned_int32& element_count ); If the outermost object that contains the location p is not an array, this function returns the type of the outermost containing object. The argument p_container is modified to point to the containing object, and element_count is set to 0. If the outermost containing object is an array, the function sets element_count to the number of elements in the array, adjusts p_container to point to the first element of the array, and returns the element type of the array. If p points to released or transient memory, os_type::type_containing() returns 0 and sets p_container and element_count to 0. os_type::Undefined This enumerator indicates a type whose kind cannot be determined. It is a possible return value from os_type::get_kind( ). os_type::Unsigned_char This enumerator indicates the type unsigned char. It is a possible return value from os_type::get_kind( ). os_type::Unsigned_integer This enumerator indicates the type unsigned int. It is a possible return value from os_type::get_kind( ). Release 6.3 427 os_type os_type::Unsigned_long This enumerator indicates the type unsigned long. It is a possible return value from os_type::get_kind( ). os_type::Unsigned_short This enumerator indicates the type unsigned short. It is a possible return value from os_type::get_kind( ). os_type::Void This enumerator indicates the type void. It is a possible return value from os_ type::get_kind( ). 428 C++ A P I Reference Chapter 2: Class Library os_Type_fixup_info This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It specifies the protocol for a user-defined class derived from it. The derived class holds information about the loading of the fixup form currently being processed. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Type_fixup_info. The class type_fixup_info is a class that is derived from os_ Type_fixup_info for customization of the loading of the type type. os_Type_fixup_info::fixup_data type_fixup_data& fixup_data; The class type_fixup_data is derived from os_Type_data (this base class has no members). type_fixup_data has a data member for each portion of the fixup-form value emitted by type_dumper::operator ()(). See Specializing os_Type_fixup_info in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_fixup_info::os_Type_fixup_info() type_fixup_info ( os_Type_fixup_loader cur_fixup_loader, os_Loader_stream lstr, os_Object_info& info, type_fixup_data& data_arg ); Constructs an instance of type_fixup_info. The cur_fixup_loader argument is the fixup loader for the object currently being fixed up. The lstr argumentis the dump stream from which the current fixup form is being processed. The info argument is the fixup info for the object being fixed up. data_arg is used to set the member type_fixup_info::type_data. See Specializing os_Type_fixup_info in the Advanced C++ A P I User Guide for information on implementing this function. Release 6.3 429 os_Type_fixup_loader os_Type_fixup_loader This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It is an abstract base class that specifies the protocol for a user-defined class derived from it. The derived class handles the loading of fixup forms. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Type_fixup_loader. The class type_fixup_loader is a class that is derived from os_Type_fixup_loader for customization of the loading of the type type. os_Type_fixup_loader::fixup() void type_fixup_loader::fixup ( os_Type_fixup_info& info, os_boolean is_most_derived_class ); This function performs fixup based on the information passed in. For example, if the object being fixed up is a collection and each portion of the fixup form identifies a collection element, fixup() inserts an element in the collection. is_most_derived_class indicates whether the object being fixed up is a direct instance of type. 1 indicates that the object is a direct instance of type; 0 indicates that the object is a direct instance of a class derived from type. See Implementing fixup() in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_fixup_loader::get() static os_Type_fixup_loader& type_fixup_loader::get (); Returns an instance of type_fixup_loader. See Implementing get() in the Advanced C++ A P I User Guide for information on implementing this function. 430 C++ A P I Reference Chapter 2: Class Library os_Type_fixup_loader::load() Loader_action* type_fixup_loader::load ( Loader_stream& stream, Type_data& given_data, os_boolean is_most_derived_class ); Loads part or all of the info portion of a fixup form from the load stream and sets the data members of given_data accordingly. is_most_derived_class indicates whether the object being fixed up is a direct instance of type. A value of 1 indicates that the object is a direct instance of type; a value of 0 indicates that the object is a direct instance of a class derived from type. This function returns 0 when the entire info portion is consumed. See Implementing load() in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_fixup_loader::operator ()() os_Loader_action* type_fixup_loader::operator () ( os_Loader_stream& stream, os_Loader_info& previous_info ); Loads a fixup form and performs the corresponding fixups, including creation of nonroot objects. This function returns 0 for success. See Implementing operator ()() in the Advanced C++ A P I User Guide for information on implementing this function. Release 6.3 431 os_Type_info os_Type_info This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It specifies the protocol for a user-defined class derived from it. The derived class holds information about the loading of the object form currently being processed. os_Type_info defines members for getting the type and predump location of the object being loaded or fixed up, as well as members for getting and setting the postload location of the object. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Type_info that can be implemented in the derived class. It also describes some members that are implemented only by the base class. The class type_info is a class that is derived from os_Type_info for customization of the loading of the type type. os_Type_info::data type_data& data; The class type_data is derived from os_Type_data (this base class has no members). type_data has a data member for each portion of the object-form value emitted by type_dumper::operator ()(). type_data has a data member for each data member and base class of type. See Implementing data in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_info::get_original_location() os_Dumper_reference get_original_location () const; Returns a reference that resolves to the predump location of the object being loaded. os_Type_info::get_replacing_database() os_database& get_replacing_database () const; Returns a reference to the postload database of the object being loaded. os_Type_info::get_replacing_location() os_Dumper_reference get_replacing_location () const; Returns a reference that resolves to the postload location of the object being loaded. os_Type_info::get_replacing_segment() os_segment& get_replacing_segment () const; Returns a reference to the postload segment of the object being loaded. 432 C++ A P I Reference Chapter 2: Class Library os_Type_info::get_type() const os_type& get_type () const; Returns a reference to an os_type that represents the type of the object being loaded. os_Type_info::os_Type_info() type_info::type_info ( type_loader& cur_loader, os_Loader_stream& lstr, os_Object_info& info, type_data& data_arg ); Constructs an instance of type_info. cur_loader is the loader for the object currently being loaded. The lstr argument is the dump stream from which the current object form is being processed. The info argument is the loader info for the object loaded just previously. data_arg is used to set the member type_info::type_data. Instances of this class hold information about the loading of the object form or fixup form currently being processed. See Specializing os_Type_info in the Advanced C++ A P I User Guide for information on implementing this function. Overloading The following overloading is supported: os_Type_info::os_Type_info ( os_Type_loader&, os_Loader_stream&, os_Object_info& ); Constructs an object to hold information about the object currently being loaded by a specified loader. The last argument is the info for the previous object load. os_Type_info::set_replacing_location() void set_replacing_location (os_Dumper_reference location); Records the location at which the postload object has been created. This is a protected member of os_Type_info. Release 6.3 433 os_Type_loader os_Type_loader This class is part of the dump/load facility and is used by implementers of customized dump and load utilities. It is an abstract base class that specifies the protocol for a user-defined class derived from it. The derived class handles the loading of object forms. See Chapter 6, Dump/Load Facility, in the Advanced C++ A P I User Guide for information on customizing the dumping and loading of ObjectStore databases. This section describes the behavior, if implemented correctly, of the members of os_ Type_loader that can be implemented in the derived class. The class type_loader is a class that is derived from os_Type_loader for customization of the loading of the type type. os_Type_loader::create() void type_loader::create (os_Loader_info& given_info); Creates and performs fixup on the persistent object corresponding to the object form being loaded. Arguments to persistent new() are retrieved from given_info. Arguments to the object constructor are retrieved from the type_data associated with given_info. See Implementing create() in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_loader::fixup() void type_loader::fixup ( os_Type_data& given_data, void* obj, os_boolean is_most_derived_class ); Adjusts pointers and C++ references in newly loaded objects. Also sets members of the newly loaded object if the constructor called by create() does not restore the entire state of the object being loaded. is_most_derived_class indicates whether the object being loaded is a direct instance of type. A value of 1 indicates that the object is a direct instance of type; a value of 0 indicates that the object is a direct instance of a class derived from type. See Implementing fixup() in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_loader::get() static Type_loader& type_loader::get (); Returns an instance of type_loader. See Implementing get() in the Advanced C++ A P I User Guide for information on implementing this function. 434 C++ A P I Reference Chapter 2: Class Library os_Type_loader::load() Loader_action* type_loader::load ( os_Loader_stream& stream, os_Type_data& given_data, os_boolean is_most_derived_class ); Loads the value portion of an object form from the load stream and sets the data members of given_data accordingly. is_most_derived_class indicates whether the object being loaded is a direct instance of type. A value of 1 indicates that the object is a direct instance of type; a value of 0 indicates that the object is a direct instance of a class derived from type. Returns 0 for success. See Implementing load() in the Advanced C++ A P I User Guide for information on implementing this function. os_Type_loader::operator ()() os_Loader_action* type_loader::operator () ( os_Loader_stream& stream, os_Loader_info& previous_info ); Loads an object form and creates and performs root-object fixup on the corresponding object. Returns 0 for success. See Implementing operator ()() in the Advanced C++ A P I User Guide for information on implementing this function. Release 6.3 435 os_type_template os_type_template class os_type_template : public os_template This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent parameterized types. os_type_template is derived from os_template. os_type_template::create() static os_type_template& create( os_type*, os_List<os_template_formal_arg*>& ); Creates a template that is a parameterization of the specified type with the specified parameters. os_type_template::get_type() const os_type& get_type( ) const; Returns the type being parameterized. os_type_template::set_type() void set_type(os_type&); Specifies the type being parameterized. 436 C++ A P I Reference Chapter 2: Class Library os_type_template_actual_arg class os_type_template_actual_arg : public os_template_actual_arg This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. Instances of this class represent types that are actual parameters of class templates. os_type_template_actual_arg::create() static os_type_template_actual_arg& create(os_type*); Creates an actual parameter consisting of the specified type. os_type_template_actual_arg::get_type() const os_type& get_type( ) const; Returns a reference to a const type, the type of which the actual parameter consists. Overloadings The following is the non-const overloading of this function: os_type& get_type( ); Returns a reference to a non-const type, the type of which the actual argument consists. os_type_template_actual_arg::set_type() void set_type(os_type&); Sets the type of which the actual argument consists. Release 6.3 437 os_type_type os_type_type class os_type_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents a type serving as a parameter to a class or function template. This class is derived from os_type. The member functions os_type::get_size( ) and os_type::get_alignment( ) signal err_mop when invoked on an os_type_type. 438 C++ A P I Reference Chapter 2: Class Library os_typed_pointer_void Instances of this class encapsulate a void* pointer and an object representing the type of object pointed to. Instances of os_typed_pointer_void are returned by os_ schema_evolution::get_evolved_address( ), os_schema_evolution::get_ unevolved_address( ), os_schema_evolution::get_evolved_object( ), and os_ schema_evolution::get_unevolved_object( ). os_typed_pointer_void::get_type() const os_type& get_type( ) const; Returns a reference to an os_type representing the class of the object pointed to by the specified os_typed_pointer_void. os_typed_pointer_void::operator void*() operator void*( ) const; Returns the void* pointer encapsulated by the specified os_typed_pointer_void. Release 6.3 439 os_typespec os_typespec Instances of this class are passed to persistent new by applications using the ObjectStore C++ library interface. Typespecs must be transiently allocated; you should not allocate a typespec in persistent memory. If a user-defined class includes a member function declared exactly as follows, static os_typespec* et_os_typespec( ); the ObjectStore schema generator automatically supplies a body for the function, which returns a pointer to a typespec for the class. The os_typspec object referenced by the pointer is statically allocated; that is, subsequent calls to the function in the same process return a pointer to the same object and the object need not be deleted. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_typespec::get_char() static os_typespec* get_char( ); Returns a pointer to a typespec for the type char. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_double() static os_typespec* get_double( ); Returns a pointer to a typespec for the type double. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_float() static os_typespec* get_float( ); Returns a pointer to a typespec for the type float. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_int() static os_typespec* get_int( ); Returns a pointer to a typespec for the type int. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. 440 C++ A P I Reference Chapter 2: Class Library os_typespec::get_long() static os_typespec* get_long( ); Returns a pointer to a typespec for the type long. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_long_double() static os_typespec* get_long_double( ); Returns a pointer to a typespec for the type long_double. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_name() char* get_name( ); Returns the name of the type designated by the specified typespec. os_typespec::get_os_int16() static os_typespec* get_os_int16( ); Returns a pointer to a typespec for the ObjectStore portable type os_int16. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_os_int32() static os_typespec* get_os_int32( ); Returns a pointer to a typespec for the ObjectStore portable type os_int32. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_os_int64() static os_typespec* get_os_int64( ); Returns a pointer to a typespec for the ObjectStore portable type os_int64. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. Release 6.3 441 os_typespec os_typespec::get_os_signed_int8() static os_typespec* get_os_signed_int8( ); Returns a pointer to a typespec for the ObjectStore portable type os_signed_int8. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_ typespec object is returned. os_typespec::get_os_unsigned_int8() static os_typespec* get_os_unsigned_int8( ); Returns a pointer to a typespec for the ObjectStore portable type os_unsigned_int8. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_ typespec object is returned. os_typespec::get_os_unsigned_int16() static os_typespec* get_os_unsigned_int16( ); Returns a pointer to a typespec for the ObjectStore portable type os_unsigned_ int16. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_ typespec object is returned. os_typespec::get_os_unsigned_int32() static os_typespec* get_os_unsigned_int32( ); Returns a pointer to a typespec for the ObjectStore portable type os_unsigned_ int32. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_ typespec object is returned. os_typespec::get_os_unsigned_int64() static os_typespec* get_os_unsigned_int64( ); Returns a pointer to a typespec for the ObjectStore portable type os_unsigned_ int64. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_ typespec object is returned. 442 C++ A P I Reference Chapter 2: Class Library os_typespec::get_pointer() static os_typespec* get_pointer( ); Returns a pointer to a typespec for the type void*. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_short() static os_typespec* get_short( ); Returns a pointer to a typespec for the type short. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_signed_char() static os_typespec* get_signed_char( ); Returns a pointer to a typespec for the type signed_char. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_signed_int() static os_typespec* get_signed_int( ); Returns a pointer to a typespec for the type signed_int. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_signed_long() static os_typespec* get_signed_long( ); Returns a pointer to a typespec for the type signed_long. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_signed_short() static os_typespec* get_signed_short( ); Returns a pointer to a typespec for the type signed_short. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. Release 6.3 443 os_typespec os_typespec::get_unsigned_char() static os_typespec* get_unsigned_char( ); Returns a pointer to a typespec for the type unsigned_char. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_unsigned_int() static os_typespec* get_unsigned_int( ); Returns a pointer to a typespec for the type unsigned_int. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_unsigned_long() static os_typespec* get_unsigned_long( ); Returns a pointer to a typespec for the type unsigned_long. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::get_unsigned_short() static os_typespec* get_unsigned_short( ); Returns a pointer to a typespec for the type unsigned_short. The first time such a function is called by a particular process, it allocates the typespec and returns a pointer to it. Subsequent calls to the function in the same process do not result in further allocation; instead, a pointer to the same os_typespec object is returned. os_typespec::operator ==() os_boolean operator ==(const os_typespec&) const; Returns nonzero (true) if the two typespecs designate the same type; returns 0 (false) otherwise. os_typespec::os_typespec() os_typespec(char* type_name); Constructs an os_typespec object that represents the type with the specified name. 444 C++ A P I Reference Chapter 2: Class Library Restrictions type_name must be a name for one of the following: • A fundamental type, such as int or char. • A class. • A pointer-to-class or pointer-to-fundamental type. For example, foo** is not allowed; use void* instead. Names that have been defined with typedef are not allowed. type_name must not contain embedded spaces; for example, specify "void*", not "void *". Typespecs must be allocated transiently, not in persistent memory. If you use const or volatile in specifying the type, always put the const or volatile specifier after the type it modifies. For example, use char const* rather than const char* Instead of using the os_typespec constructor to generate a typespec, it generally is preferable to use one of the static members of os_typespec (for example, os_ typespec::get_char()) to generate a typespec for a fundamental type and get_ os_typespec() to generate typespecs for classes. These typespecs are statically allocated and do not require explicit deletion. The object created by the os_ typespec constructor, on the other hand, is allocated off the heap and must be explicitly deleted. For information about using typespecs, see Using Typespecs in Chapter 3 of the C++ A P I User Guide. Release 6.3 445 os_unsigned_int64 os_unsigned_int64 Instances of the class os_unsigned_int64 represent unsigned 64-bit integers on any platform; the underlying implementation will vary from platform to platform. Members of this class provide all of the standard C++ operators for manipulating integers. For information about signed 64-bit integers, see os_int64 on page 231. Type definitions The types os_int32 and os_boolean, used throughout this manual, are each defined as a signed 32-bit integer type. The type os_unsigned_int32 is defined as an unsigned 32-bit integer type. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. os_unsigned_int64::os_unsigned_int64() os_unsigned_int64(os_unsigned_uint64 num); Constructs a copy of num. Overloadings The following overloadings are supported: os_unsigned_int64(os_platform_uint64 num); Constructs an instance of os_unsigned_int64 based on the value of num. The os_ platform_int64 argument is an ObjectStore type definition for native 64-bit integer data types, if there is one. os_unsigned_int64(os_unsigned_int32 num); Constructs an instance of os_unsigned_int64 based on the value of num, a 32-bit integer. os_unsigned_int64( os_unsigned_int32 high, os_unsigned_int32 low ); Constructs an instance of os_unsigned_int64 based on the values of high and low, where high represents the upper 32 bits and low represents the lower 32 bits. os_unsigned_int64::get_high() os_unsigned_int32 get_low( ); Returns an unsigned 32-bit integer based on the upper 32 bits of the value of the object. os_unsigned_int64::get_low() os_unsigned_int32 get_low( ); Returns an unsigned 32-bit integer based on the lower 32 bits of the value of the object. 446 C++ A P I Reference Chapter 2: Class Library os_unsigned_int64::sprint() void sprint(char* result, os_int32 = 10) const; Converts the value of the object into a formatted string at the specified base and writes the string to result. The base argument can be either 10 or 16; the default is 10. Release 6.3 447 os_untranslatable_pointer_handler os_untranslatable_pointer_handler This is a base class for handling a pointer to an evolved object, or to a data member within an evolved object, when the pointer cannot be translated to the corresponding location after evolution. You can define your own classes derived from this one and define methods for the handle_xxx() virtual functions. This class supplies default methods that signal an error via the _default_handler() method. os_untranslatable_pointer_handler::clone() virtual os_untranslatable_pointer_handler* clone(); You must override this function to make a copy of this that is an instance of your derived class. Your method should call the copy constructor. os_untranslatable_pointer_handler::get_exception() objectstore_exception& get_exception(); Returns an exception object describing what is wrong with the offending pointer. os_untranslatable_pointer_handler::get_explanation() const char* get_explanation(); Returns an internationalized error message describing what is wrong with the offending pointer. os_untranslatable_pointer_handler::get_source_cluster() os_cluster* get_source_cluster(); Returns the cluster containing the offending pointer. os_untranslatable_pointer_handler::get_source_offset() os_unsigned_int32 get_source_offset(); Returns the offset of the offending pointer in that cluster. os_untranslatable_pointer_handler::get_source_path() const os_path_to_data& get_source_path(); Returns the os_path_to_data of the offending pointer. This is the path to the data member that is the untranslatable pointer. See os_path_to_data on page 271 for more information about the os_path_to_data class. os_untranslatable_pointer_handler::get_target_cluster() os_cluster* get_target_cluster(); Returns the os_cluster containing the target of the pointer. Not valid if get_ target_exported() is true. 448 C++ A P I Reference Chapter 2: Class Library os_untranslatable_pointer_handler::get_target_exported() os_boolean get_target_exported(); Returns true if the target is identified by segment and export ID; returns false if the target is identified by segment and cluster. os_untranslatable_pointer_handler::get_target_export_id() os_export_id get_target_export_id(); Returns the export ID of the target of the pointer. Valid only if get_target_ exported() is true. os_untranslatable_pointer_handler::get_final_offset() os_unsigned_int32 get_final_offset(); Returns the offset of pointer target within the primitive type object that is the end of the target_path. Normally this is zero. If relocating an ObjectStore Java Interface pointer this is 1 or 3. This offset could be large when the end of the target_path is an array of primitive types such as a char string. os_untranslatable_pointer_handler::get_target_offset() os_unsigned_int32 get_target_offset(); Returns the offset in the target cluster if the target of the pointer is not an exported object or the offset in the top-level exported object pointed to by the pointer. os_untranslatable_pointer_handler::get_target_path() const os_path_to_data& get_target_path(); Returns the type of top-level object and path to the pointer target before schema evolution. If the pointer is not a void* pointer, its target type is get_target_ path(.type(). os_untranslatable_pointer_handler::get_target_segment() os_segment* get_target_segment(); Returns the os_segment containing the target of the pointer. Release 6.3 449 os_untranslatable_pointer_handler os_untranslatable_pointer_handler::handle_xxx() The default way of handling untranslatable pointers is to signal an exception. You can override the following handle_xxx() virtual functions, where xxx is a specific kind of untranslatable pointer. You can set the pointer to NULL or set it to a new path. virtual virtual virtual virtual virtual virtual virtual os_path_to_data* os_path_to_data* os_path_to_data* os_path_to_data* os_path_to_data* os_path_to_data* os_path_to_data* handle_ambiguous_void_pointer(); handle_deleted_sub_object(); handle_evolved_to_bit_field(); handle_evolved_to_incompatible_type(); handle_evolved_to_smaller(); handle_evolved_to_static(); handle_wrong_type_pointer(); The return value from the handle_xxx() virtual functions is NULL to set the offending pointer to NULL, or a new value for target_path to set the offending pointer according to that path and final_offset. The method is permitted to modify final_offset. The new target must lie within the same top-level object and must have the correct type. The returned os_path_to_data will be deleted by ObjectStore. If a non-NULL value is returned and the new target is not valid, an error will be signalled without calling the pointer handler again. The handle_xxx() virtual functions are not allowed to touch persistent storage. Note that there can be simultaneous calls to these virtual functions in multiple threads. Each thread will have its own instance of os_untranslatable_pointer_ handler or the user's derived class. os_untranslatable_pointer_handler::is_PTOM() os_boolean os_untranslatable_pointer_handler::is_PTOM(); Returns true if the untranslatable pointer is a pointer-to-member type. Returns false if the untranslatable pointer is not a pointer-to-member type. This function can be useful during schema evolution. See Evolving Schemas That Contain Pointer-toMember Types. os_untranslatable_pointer_handler::set_final_offset() void set_final_offset(os_unsigned_int32 x); Sets the offset of pointer target within the primitive type object that is the end of the target_path. Normally this is zero. If relocating an ObjectStore Java Interface pointer this is 1 or 3. This offset could be large when the end of the target_path is an array of primitive types such as a char string. 450 C++ A P I Reference Chapter 2: Class Library os_void_type class os_void_type : public os_type This class is part of the ObjectStore metaobject protocol (MOP), which provides access to ObjectStore schemas. An instance of this class represents the type void. The os_void_type class is derived from os_type. Note, however, that the member functions os_type::get_size( ) and os_type::get_alignment( ) signal err_mop if they are invoked on an os_void_type object. Required header files Programs using this class must include <ostore/ostore.hh>, followed by <ostore/coll.hh> (if used), followed by <ostore/mop.hh>. os_void_type::create() static os_void_type& create( ); Creates an object representing the type void. Release 6.3 451 os_with_mapped os_with_mapped Instances of os_with_mapped can be used to force data to stay in the client cache during system calls that cannot handle page faults. For more information, see Chapter 3 in the C++ A P I User Guide. os_with_mapped::os_with_mapped() os_with_mapped ( void* location, os_unsigned_int32 size, os_boolean for_write = 0 ); Creates an os_with_mapped object that ensures that the persistent range indicated in the location and size arguments is accessible to system calls and library functions, by forcing the range to stay in the cache and accessible in memory. location specifies the starting address of the range. size specifies the size of the range in bytes. for_write is a Boolean value that indicates whether you intend to update the object. Note that an os_with_mapped object cannot be used across transaction boundaries, including nested transactions. os_with_mapped::~os_with_mapped() ~os_with_mapped(); Restores normal cache behavior with respect to the range of data specified at the time the os_with_mapped object was created. 452 C++ A P I Reference Chapter 2: Class Library tix_context The class tix_context makes error messages more informative by providing contextual information. In the following example, if you get the error Connection attempt timed out, you are also told that the error occurred while you were trying to create that database. { tix_context tc1("While creating database %s\n", the_pathname); . . . server->create_database(the_pathname); . . . } If any TIX exception is signaled during the execution of server->create_database, and the exception is not handled inside the server->create_database, the error message associated with the error is extended to append the string "While creating database /a/b/c" to the end. tix_context works as follows: When an exception is signaled, as the signaler moves up the stack searching for a handler, if it encounters a tix_context, it runs sprintf on the arguments and adds this string to the end of the error message. If it does finally find a handler, the string returned by the report function member (and report0) includes the context messages of all tix_context objects that were on the stack between the point at which the exception was signaled and the point at which it was handled. If no handler is found, the message that is issued includes the context messages of all tix_context objects that were on the stack. The tix_context constructor has one required argument (a printf()-style control string) and up to four additional arguments, which must all be strings. The control string should have as many occurrences of %s as there are arguments. You can use only strings and %s, and no more than four. C++ requires that you include a variable name for the tix_context object, such as tc1 in the preceding example. Note that the sprintf is done only if the exception is actually signaled; establishing a tix_context that is never used incurs little overhead. The tix_context constructor does not copy any of the strings it is given, so if there is any chance that those strings might get altered during execution of the scope of the tix_context, you should probably make copies. It is a good idea to delete them manually when you are finished with them. The current limit on the length of the report string is 4096 characters. Release 6.3 453 tix_exception tix_exception Every predefined TIX exception is an instance of tix_exception and represents a particular type of error condition or exceptional circumstance. Every exception has a parent, except the exception err_objectstore (see Chapter 5, Predefined TIX Exceptions, on page 499). The parent of a given exception is an ancestor of that exception. The parent of any ancestor of a given exception is also an ancestor of that exception. If one exception is an ancestor of another, the other exception is said to be a descendant of the first. tix_exception::ancestor_of() os_int32 ancestor_of(tix_exception const* e); Returns nonzero if this is an ancestor of e, and 0 otherwise. Any parent of e is an ancestor of e, and any parent of an ancestor of e is also an ancestor of e. In addition, every exception is considered to be its own ancestor; therefore, if this is the same as e, the function returns nonzero. tix_exception::get_os_deadlock_exception() os_deadlock_exception* get_os_deadlock_exception() const; If this is an os_deadlock_exception, returns this cast to a pointer of that type; otherwise returns NULL. tix_exception::get_os_lock_timeout_exception() os_lock_timeout_exception* get_os_lock_timeout_exception() const; If this is an os_lock_timeout_exception, returns this cast to a pointer of that type; otherwise returns NULL. tix_exception::release_pointer() void release_pointer(); If this is a dynamically allocated exception, delete it; otherwise do nothing. An exception handler that might handle err_deadlock or err_lock_timeout should free the exception object in order to avoid memory leaks as follows: tix_handler::get_exception()->release_pointer(); This is safe for all exception handlers but is unnecessary if the exception is known not to be err_deadlock or err_lock_timeout. 454 C++ A P I Reference Chapter 2: Class Library tix_exception::set_unhandled_exception_hook() static tix_unhandled_exception_hook_t set_unhandled_exception_hook( tix_unhandled_exception_hook_t new_hook ); Registers a function that is called if a TIX exception is unhandled. Caution Release 6.3 It is not safe to access persistent memory or use the ObjectStore API while your function is in use during an unhandled TIX exception, especially during an err_ deadlock exception. 455 tix_handler tix_handler A tix_handler carries information about the particular exceptional circumstances leading to the signaling of the current exception. tix_handler::get_current() static tix_handler* get_current(); Returns the tix_handler for the current exception. tix_handler::get_exception() static tix_exception* get_exception(); Returns the current TIX exception. tix_handler::get_report() static char* get_report(); Returns the format string used to signal the current exception. The string includes the text of the error message and is suitable for further processing, writing to a file, or displaying on the screen. Compare tix_handler_get_report0(). tix_handler::get_report0() static char* get_report0(); Returns the format string used to signal the current exception without the error message associated with the exception. Compare tix_handler_get_report(). tix_handler::get_value() static os_int32 get_value(); Returns the error code associated with the current user-defined exception by means of the objectstore_exception::signal() or objectstore_ exception::vsignal() function. For more information, see objectstore_ exception::signal() on page 96. 456 C++ A P I Reference Chapter 3 System-Supplied Global Functions Some system-supplied interface functions are not members of any class but are global C++ functions. Global C++ Functions These functions are the following, and appear alphabetically in the discussions that follow. ::operator delete() 458 ::operator new() 459 ::os_fetch() 461 ::os_fetch_address() 464 ::os_store() 465 The system-supplied global functions are listed alphabetically in this chapter. Release 6.3 457 ::operator delete() ::operator delete() Persistent storage can be reclaimed using ::operator delete operator, just as it would be used for transient objects. ObjectStore determines whether the storage is persistent or transient. When a persistent object is deleted using ::operator delete(), the database in which it is to be stored must be opened by the process performing the deletion, and this process must have a transaction in progress. Note Applications can register their own transient delete; see objectstore::set_ transient_delete_function() on page 93. If you want to override ObjectStore’s global ::operator delete(), you must define it to delete both transient and persistent memory. To delete persistent memory, the definition of ::operator delete() must include a call to objectstore::free_memory(); see objectstore::free_memory() on page 61. Required header file All ObjectStore programs must include the header file <ostore/ostore.hh>. void ::operator delete() Deletes the specified object from storage. The argument must point to the beginning of an object’s storage. If it points to the middle of an object, the exception err_ invalid_deletion is signaled. This might happen, for example, if the argument points to the fifth element of a persistent array, or if the argument has been cast from a D* to a B*, where class D is derived directly from class B and another class. 458 C++ A P I Reference Chapter 3: System-Supplied Global Functions ::operator new() ObjectStore provides overloadings of ::operator new() for allocating persistent or transient storage, using the following syntax: void* ::operator new(obj_size, clustering_info, typespec, elements) obj_size is the size of the new object. This argument is optional and, if not specified, is supplied by the system. clustering_info specifies clustering information, that is, the database, segment, or cluster in which to allocate storage for the new object. Specifying a transient database, segment, or cluster results in transient allocation. typespec specifies the type of the new object. This argument is an instance of the class os_typed_pointer_void; see os_typed_pointer_void on page 439. If new is used to create an array, elements specifies the number of elements. Overloadings Each overloading returns a pointer to newly allocated memory. Persistent memory is initialized to null by ObjectStore. void *::operator new(size_t, os_database*, os_typespec*[, os_int32]) If this form is used, a newly created object of the type specified by the os_typespec is stored in the specified database. If the transient database is specified, the new object is transiently allocated. If you specify the transient database, you can supply 0 for the os_typespec* argument. If you are allocating for an array objects, use the argument os_int32 (a signed 32-bit integer type) to specify the number of elements. For more information about retrieving transient databases, see os_database::get_ transient_database() on page 161. void *::operator new( size_t, os_segment*, os_typespec*[, os_int32]) If this form is used, a newly created object of the type specified by the os_typespec is stored in the specified segment unless that segment is the schema segment, in which case err_misc is signaled. If the transient segment is specified, the new object is transiently allocated. If you specify the transient segment, you can supply 0 for the os_typespec* argument. If you are allocating for an array of objects, use the argument os_int32 (a signed 32-bit integer type) to specify the number of elements. For more information about retrieving transient segments, see os_segment::get_ transient_segment() on page 357. void *::operator new(size_t, os_cluster*, os_typespec*[, os_int32]) If this form is used, a newly created object of the type specified by the os_typespec is stored in the specified cluster unless the new object does not fit in the cluster, in which case err_cluster_full is signaled. If this argument is the address of transient memory, the new object is transiently allocated. If you are allocating transient storage, you can supply 0 for the os_typespec* argument. If you are Release 6.3 459 ::operator new() allocating an array, use the argument os_int32 (a signed 32-bit integer type) to specify the number of elements. void *::operator new(size_t, os_cluster::with(), os_typespec* [, os_int32]) If this form is used, a newly created object of the type specified by the os_typespec is stored as close as possible to the object specified as the argument to os_ cluster::with(); see os_cluster::with() on page 137. If the transient cluster is specified, the new object is transiently allocated. If you specify the transient cluster, you can supply 0 for the os_typespec* argument. If you are allocating for an array of objects, use the argument os_int32 (a signed 32-bit integer type) to specify the number of elements. For more information about retrieving transient clusters, see os_cluster::get_ transient_cluster() on page 133. os_cluster::with() returns an automatic variable of the class os_cluster_with. This object contains a pointer to the object near which you want to allocate. Following is an example of the way to use this method in operator new(), which allocates storage for obj2 as close as possible to obj1: a_class* obj2 = new(os_cluster::with(obj1), a_typespec) a_class; Note that for optimum clustering, use the os_cluster::with() overloading of ::operator new(). This overloading has the added advantage that os_ cluster::with() returns an automatic variable that does not require the user to delete it explicitly. For more information, see the C++ A P I User Guide. 460 C++ A P I Reference Chapter 3: System-Supplied Global Functions ::os_fetch() The following functions retrieve the value of a specified data member for a specified object. void* os_fetch( const void* obj, const os_member_variable& mem, void*& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. unsigned long os_fetch( const void* obj, const os_member_variable& mem, unsigned long& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. long os_fetch( const void* obj, const os_member_variable& mem, long& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. unsigned int os_fetch( const void* obj, const os_member_variable& mem, unsigned int& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. int os_fetch( const void* obj, const os_member_variable& mem, int& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. unsigned short os_fetch( const void* obj, const os_member_variable& mem, unsigned short& val Release 6.3 461 ::os_fetch() ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. short os_fetch( const void* obj, const os_member_variable& mem, short& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. unsigned char os_fetch( const void* obj, const os_member_variable& mem, unsigned char& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. char os_fetch( const void* obj, const os_member_variable& mem, char& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. float os_fetch( const void* obj, const os_member_variable& mem, float& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. double os_fetch( const void* obj, const os_member_variable& mem, double& val ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. long double os_fetch( const void* obj, const os_member_variable& mem, long double& val 462 C++ A P I Reference Chapter 3: System-Supplied Global Functions ); Retrieves the value of the member represented by mem for the object obj by setting val to a reference to the value. err_mop is signaled if the value type of the specified member is not compatible with val. Release 6.3 463 ::os_fetch_address() ::os_fetch_address() The following functions retrieve the address of a specified data member for a given object or the address of the subobject corresponding to a specified base class for a given object. void* os_fetch_address( void* obj, const os_member_variable& mem ); Retrieves the address of the data member mem for the object pointed to by obj. err_ mop is signaled if mem is an os_field_member_variable. void* os_fetch_address( void* obj, const os_base_class& b ); Retrieves the address of the subobject corresponding to base class b for the object pointed to by obj. 464 C++ A P I Reference Chapter 3: System-Supplied Global Functions ::os_store() The following functions store the value of a specified data member for a specified object. void os_store( void* obj, const os_member_variable& mem, const void* val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const unsigned long val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const long val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const unsigned int val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const int val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const unsigned short val Release 6.3 465 ::os_store() ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const short val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const unsigned char val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const char val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const float val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const double val ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. void os_store( void* obj, const os_member_variable& mem, const long double val 466 C++ A P I Reference Chapter 3: System-Supplied Global Functions ); Establishes val as the value of the member represented by mem for the object obj. err_mop is signaled if the value type of the specified member is not compatible with val. Release 6.3 467 ::os_store() 468 C++ A P I Reference Chapter 4 System-Supplied Macros This chapter provides reference information for all ObjectStore macros except those included with the collections facility. For information about those macros, see the C++ Collections Guide and Reference. ObjectStore Macros The descriptions are listed alphabetically by macro name. However, the macros can be grouped logically, as follows: • Transaction processing: - OS_BEGIN_TXN() on page 474 - OS_BEGIN_TXN_NAMED() on page 478 - OS_END_TXN() on page 480 • Fault handling: - OS_ESTABLISH_FAULT_HANDLER on page 481 - OS_END_FAULT_HANDLER on page 479 • TIX exception handling: - TIX_HANDLE() on page 494 - TIX_EXCEPTION on page 493 - TIX_END_HANDLE on page 492 - TIX_HANDLE_IF() on page 497 - DEFINE_EXCEPTION() on page 472 - DECLARE_EXCEPTION() on page 471 • Schema source file macros: - OS_MARK_SCHEMA_TYPE() on page 482 - OS_MARK_SCHEMA_TYPESPEC() on page 483 - OS_REPORT_DLL_LOAD_AND_UNLOAD() on page 486 - OS_SCHEMA_DLL_ID() on page 487 - OS_SCHEMA_INFO_NAME() on page 488 Release 6.3 469 ObjectStore Macros • Soft pointer use: - os_soft_pointer on page 489 - OS_SOFT_POINTER32_NOCLASS() on page 490 - OS_SOFT_POINTER64_NOCLASS() on page 491 • Reference use: - OS_REFERENCE_NOCLASS() on page 484 - OS_REFERENCE_PROTECTED_NOCLASS() on page 485 470 C++ A P I Reference Chapter 4: System-Supplied Macros DECLARE_EXCEPTION() Declares a TIX exception defined elsewhere with DEFINE_EXCEPTION(). Syntax DECLARE_EXCEPTION(name ); Arguments name The name of a user-defined TIX exception you want to declare. It must be defined in the same application, using the DEFINE_EXCEPTION() macro. A user-defined TIX exception is a variable of the class objectstore_exception and is part of the TIX exception-handling facility. Description Use this macro to declare a user-defined TIX exception that you have defined elsewhere in your application with the DEFINE_EXCEPTION() macro. The DECLARE_EXCEPTION() macro must end with a semicolon (;). The DECLARE_EXCEPTION() macro makes a TIX variable available to files other than the one in which it is defined. For example, by specifying the DECLARE_EXCEPTION() macro in a header file, you make the declared variable accessible to any file that includes the header file. The following example uses the DECLARE_EXCEPTION() macro to declare the variable bad_char_input that is defined elsewhere in the program with the DEFINE_ EXCEPTION() macro: DECLARE_EXCEPTION(bad_char_input) For information about • The DEFINE_EXCEPTION() macro, see DEFINE_EXCEPTION() on page 472 • TIX exception handlers, see TIX_HANDLE() on page 494 • Using the DECLARE_EXCEPTION() macro, see User-Defined Exceptions in Chapter 6 of the C++ A P I User Guide Release 6.3 471 DEFINE_EXCEPTION() DEFINE_EXCEPTION() Specifies a user-defined TIX exception. Syntax DEFINE_EXCEPTION(name, "message", pointer-to-parent ); Arguments name The identifier for the exception you want to create. message The error message to display when the exception is signaled. As shown in the syntax statement, this argument must be enclosed in quotation marks. pointer-to-parent The address of a parent exception, which thus becomes the new exception’s parent. For information about parent exceptions, see Parent Exceptions on page 500. Supply 0 for this argument if you do not want your exception to have a parent. Description Use this macro to define your own TIX exception. A user-defined TIX exception is a variable of the class objectstore_exception and is part of the TIX exceptionhandling facility. The DEFINE_EXCEPTION() macro must end in a semicolon (;). The following example program shows how to use the DEFINE_EXCEPTION() macro. The program defines three exceptions: err_too_few_args, err_too_many_args, and err_bad_arg. These are used to perform error-checking on command-line arguments. The first one, err_too_few_args, is handled by a TIX exception handler; the other two are not handled. All three exceptions are signaled by calls to the method signal(); see objectstore_exception::signal() on page 96. // def_exc.cc: Illustrates how to use the DEFINE_EXCEPTION // macro to define your own TIX exceptions. This program defines // TIX exceptions to handle command-line argument errors. The // program signals err_too_few_args if there are no arguments // present, err_too_many_args if there are more than one, // and err_bad_arg if the word "bad" is used as an argument. // Only err_too_few_args is handled. #include <ostore/ostore.hh> #include <string.h> #include <fstream.h> DEFINE_EXCEPTION(err_too_few_args, "Too few arguments", 0); DEFINE_EXCEPTION(err_too_many_args, "Too many arguments", 0); DEFINE_EXCEPTION(err_bad_arg, "Illegal argument: ", 0); void validate_args(int argc, char **argv); main(int argc, char **argv) { OS_ESTABLISH_FAULT_HANDLER { objectstore::initialize(); TIX_HANDLE (err_too_few_args) { validate_args(argc, argv); } TIX_EXCEPTION { 472 C++ A P I Reference Chapter 4: System-Supplied Macros tix_exception *exception = tix_handler::get_exception(); if (exception == &err_too_few_args) cout << "Missing command-line arguments.\n"; else cout << "Unknown exception occurred.\n"; } TIX_END_HANDLE } OS_END_FAULT_HANDLER } void validate_args(int argc, char **argv) { if (argc == 1) // no arguments // No message is specified because the default message // specified in the DEFINE_EXCEPTION macro is sufficient. err_too_few_args.signal(""); else if (argc > 2) // more than one argument // No message is specified, so only the default message // specified with the DEFINE_EXCEPTION macro will // be displayed. err_too_many_args.signal(""); else if (argc == 2 && !strcmp(argv[1], "bad")) // This call to signal includes a message, // which will therefore be displayed along with the // default message specified with the DEFINE_EXCEPTION // macro. err_bad_arg.signal(argv[1]); } Following is the output from a sample run: $ def_exc Missing command-line arguments. $ def_exc arg $ def_exc arg arg Too many arguments (err_too_many_args) $ def_exc bad Illegal argument: bad (err_bad_arg) This example program is available online in • $OS_ROOTDIR/examples/doc_demos/ref4/def_exc.cc (UNIX) • %OS_ROOTDIR%\examples\doc_demos\ref4\def_exc.cpp (Windows) For information about • signal(), see objectstore_exception::signal() on page 96 • TIX exception handlers, see TIX_HANDLE() on page 494 • Using the DEFINE_EXCEPTION() macro, see User-Defined Exceptions in Chapter 6 of the C++ A P I User Guide Release 6.3 473 OS_BEGIN_TXN() OS_BEGIN_TXN() OS_BEGIN_TXN (or OS_BEGIN_TXN_NAMED) begins a lexical transaction and establishes a new scope. Syntax The syntaxes are as follows. There must be no spaces anywhere in the argument lists to OS_BEGIN_TXN() and OS_BEGIN_TXN_NAMED(). Also, the enclosing braces are not required, but some source code editors complain if you do not use them. OS_BEGIN_TXN(txn-tag,expression,txn-type ) { . . . } OS_END_TXN(txn-tag ) OS_BEGIN_TXN_NAMED(txn-tag,expression,txn-type,txn-name ) { . . . } OS_END_TXN(txn-tag ) Arguments txn-tag An identifier — a tag for the transaction that is not used for any other transaction in the same function. (The tags are used to construct statement labels and must therefore have the same scope as labels in C++.) The tag specified in a transaction’s OS_BEGIN_TXN() and OS_END_TXN() macros must be the same. expression This argument is of type tix_exception** and specifies a location in which ObjectStore stores the transaction’s completion status. If the tix_exception** points to 0 when the transaction completes, the transaction committed; that is, its changes were made permanent and visible. If the tix_exception** points to a nonzero value, the transaction aborted; that is, any changes to persistent state within the transaction were undone. The identity of the exception gives the reason for the abort. In the event of an abort that causes the transaction to abort, you can examine expression only if one of the following is true: - You enclosed the entire transaction in a TIX exception handler; see TIX_ HANDLE() on page 494. - The exception was caused by an explicit abort — that is, by a call to os_ transaction::abort() or os_transaction::abort_top_level(). For information causing an explicit abort, see os_transaction::abort() on page 409 or os_transaction::abort_top_level() on page 409. The referenced exception in expression can be one of the predefined exceptions listed in Chapter 5, Predefined TIX Exceptions, on page 499, or a user-defined exception. See DEFINE_EXCEPTION() on page 472 for information about userdefined exceptions. txn-type This is one of the following enumerators: 474 C++ A P I Reference Chapter 4: System-Supplied Macros - os_transaction::read_only, which indicates that the transaction performs no updates to persistent storage. If write access to persistent data is attempted, a run-time error is signaled. - os_transaction::update, which indicates that the transaction performs updates to persistent storage. For more information about these enumerators, see os_transaction::read_ only on page 413 and os_transaction::update on page 414. txn-name The name you want to give to the transaction. See os_transaction::get_ name() on page 411. Description OS_BEGIN_TXT begins a lexical transaction and establishes a new scope. OS_END_ TXN() ends and commits the transaction started by the previous matching OS_ BEGIN_TXN() call. OS_END_TXN() also marks the end of the scope established by OS_ BEGIN_TXN(). OS_BEGIN_TXN_NAMED() is identical in behavior to OS_BEGIN_TXN(), except that it allows you to specify a transaction name. The name must be unique among transactions in the same function. It is used in constructing statement labels. ObjectStore also supports dynamic transactions, which use member functions of the class os_transaction; see os_transaction on page 409. Transactions can be nested. For example, you can nest an update transaction inside a read-only transaction if you want to write temporarily to persistent memory, as in the following: OS_BEGIN_TXN(txn1, 0, os_transaction::read_only) { OS_BEGIN_TXN(txn2, 0, os_transaction::update) { // process database os_transaction::abort(); // Roll back the transaction } OS_END_TXN(txn2) } OS_END_TXN(txn1) The following example program illustrates how to use the OS_BEGIN_TXN() and OS_ END_TXN() macros to form a lexical transaction. By way of contrast, the program also illustrates a dynamic transaction. The program creates a database (stanza.db) and uses a lexical transaction to write an array of strings to the database. After the lexical transaction commits, the program starts a dynamic transaction and reads the strings from the database, displaying them on standard output. // txn_example.cc: illustrates lexical and dynamic transactions // The program writes an array of strings to a database in a // lexical transaction (using the macros), and reads the array // in a dynamic transaction (using the os_transaction methods). #include <ostore/ostore.hh> #include <string.h> #include <fstream.h> #define SIZE 5 main( ) { Release 6.3 475 OS_BEGIN_TXN() os_database* db; os_database_root* root; os_transaction* txn; char *verse[] = { "Matter, as wise logicians say,", " Cannot without a form subsist;", "And form, say I as well as they,", " Must fail if matter brings no grist.", "" }; OS_ESTABLISH_FAULT_HANDLER { objectstore::initialize(); // create the database "stanza.db"; if it already exists, // overwrite it db = os_database::create("stanza.db", 0644, 1); // start a lexical transaction in update mode OS_BEGIN_TXN(t1, 0, os_transaction::update) { // allocate persistent storage for an array of pointers // to chars char **s = (char**)new(db, os_typespec::get_pointer(), SIZE) void**[SIZE]; // create a root ... root = db->create_root("root"); // ... and associate it with the first element of the // array, making it the entry point root->set_value(s, os_typespec::get_pointer()); for (int i = 0; i < SIZE; i++) { int len = strlen(verse[i])+1; // allocate persistent storage for the string, // clustering it with the previously allocated array s[i] = new(os_cluster::with(s), os_typespec::get_char(), len) char[len]; // copy the string in verse[i] to the allocated storage strcpy(s[i], verse[i]); } } OS_END_TXN(t1) db->close(); // close database db->open(0); // re-open database for read-only // start a dynamic transaction in read-only mode txn = os_transaction::begin(os_transaction::read_only); root = db->find_root("root"); // find the database root // get the entry-point (the first element of an array of // pointers to chars) associated with the root char** s = (char**)(root->get_value(os_typespec::get_pointer())); // print the strings for (; **s; s++) cout << *s << endl; txn->commit(); // commit transaction db->close(); // close database // clean up delete db; delete root; delete txn; } OS_END_FAULT_HANDLER return 0; } 476 C++ A P I Reference Chapter 4: System-Supplied Macros Following is the output from a sample run: $ txn_example Matter, as wise logicians say, Cannot without a form subsist; And form, say I as well as they, Must fail if matter brings no grist. This example program is available online in • $OS_ROOTDIR/examples/doc_demos/ref4/txn_example.cc (UNIX) • %OS_ROOTDIR%\examples\doc_demos\ref4\txn_example.cpp (Windows) For information about using the OS_BEGIN_TXN() and OS_END_TXN() macros to write lexical transactions, see Using Lexical Transactions in Chapter 5 of the C++ A P I User Guide. Release 6.3 477 OS_BEGIN_TXN_NAMED() OS_BEGIN_TXN_NAMED() Like the OS_BEGIN_TXN() macro, this macro begins a lexical transaction and establishes a new scope. Unlike the other macro, this one allows you to specify a transaction name. See OS_BEGIN_TXN() on page 474 for a full description of the transaction macros. 478 C++ A P I Reference Chapter 4: System-Supplied Macros OS_END_FAULT_HANDLER Use this macro with the OS_ESTABLISH_FAULT_HANDLER macro to delimit a faulthandler block. See OS_ESTABLISH_FAULT_HANDLER on page 481 for information on the fault-handler macros. Release 6.3 479 OS_END_TXN() OS_END_TXN() Use this macro to mark the end of a lexical transaction established by the OS_BEGIN_ TXN() or OS_BEGIN_TXN_NAMED() macro. See OS_BEGIN_TXN() on page 474 for a full description of the lexical transaction macros. 480 C++ A P I Reference Chapter 4: System-Supplied Macros OS_ESTABLISH_FAULT_HANDLER OS_ESTABLISH_FAULT_HANDLER and OS_END_FAULT_HANDLER are used to handle page faults. Syntax int main (int argc, char** argv) { OS_ESTABLISH_FAULT_HANDLER { // your code } OS_END_FAULT_HANDLER return value; } The enclosing braces are not required, but some source code editors complain if you do not use them. Description ObjectStore uses page faulting to detect references to persistent memory. All applications performing ObjectStore operations must use the OS_ESTABLISH_ FAULT_HANDLER and OS_END_FAULT_HANDLER macros to establish a page-fault handler at the top of every stack in the program. Essentially, this requirement means that you must enclose the code in the top-level function (main() or WinMain()) within these macros. If the program uses multiple threads, the first function of each new thread that uses ObjectStore must also include these macros. See Establishing a Page Fault Handler in Chapter 3 of the C++ A P I User Guide for information about using the fault-handler macros. Release 6.3 481 OS_MARK_SCHEMA_TYPE() OS_MARK_SCHEMA_TYPE() Used in schema source files to include a class in an application’s schema. Syntax OS_MARK_SCHEMA_TYPE(class) Arguments class The class to be included in the application’s schema. Names defined with the typedef directive are not allowed. To include a template class that has more than one argument, use the OS_MARK_SCHEMA_TYPESPEC() macro. Description Use the OS_MARK_SCHEMA_TYPE()macro in schema source files when you want to include a class in your application’s schema. Calls to the macro should appear outside any function at global or file scope level. Schema source files must include the file <ostore/manschem.hh> after including <ostore/ostore.hh> and should contain all the include directives from the application’s source necessary to compile. You must mark every class on which the application might perform persistent new, as well as every class whose instances can be used by the application as database entry points. You must also mark every class that appears in a library interface query string or index path in the application. However, if you specify the -make_reachable_source_classes_persistent option to the ossg schema generator, you need not mark every class that might be read from a database. This option causes every class that is defined in the schema source file and reachable from a persistently marked class to be persistently allocatable and accessible. The -make_reachable_source_classes_persistent option is useful to ensure that items that could be overlooked, for example, subtypes, are marked. However, it can also make classes persistent that do not need to be so for compilation to succeed. For information about • The OS_MARK_SCHEMA_TYPESPEC() macro, see OS_MARK_SCHEMA_TYPESPEC() on page 483 • Using the OS_MARK_SCHEMA_TYPE() macro in schema source files, see Building ObjectStore C++ Applications • The ossg schema generator, see Managing ObjectStore 482 C++ A P I Reference Chapter 4: System-Supplied Macros OS_MARK_SCHEMA_TYPESPEC() Used in schema source files to include a class template when the template has more than one argument. Syntax OS_MARK_SCHEMA_TYPESPEC((type-name<param-list >)) type-name The name of a class template. param-list A comma-separated list of parameters. Description The OS_MARK_SCHEMA_TYPESPEC() macro is used in schema source files to include a class template in an application’s schema when the template has more than one argument. You can use this macro to parameterize types with multiple parameters. Note that you must enclose type-name and param-list within its own set of parentheses, which results in the double set of parentheses. If the template has one or no parameters, you can use the OS_MARK_SCHEMA_TYPE() macro. Calls to the macro should appear outside any function at global or file scope level. Schema source files must include the file <ostore/manschem.hh> after including <ostore/ostore.hh> and should contain all the include directives from the application’s source that are necessary to compile. You must mark every class on which the application might perform persistent new, as well as every class whose instances can be used by the application as database entry points. You also must mark every class that appears in a library interface query string or index path in the application. However, if you specify the -make_reachable_source_classes_persistent option to the ossg schema generator, you need not mark every class that might be read from a database. This option causes every class that is defined in the schema source file and reachable from a persistently marked class to be persistently allocatable and accessible. The -make_reachable_source_classes_persistent option is useful to ensure that items that could be overlooked, for example, subtypes, are marked. However, it can also make classes persistent that need be for compilation to succeed. For information about • The OS_MARK_SCHEMA_TYPE() macro, see OS_MARK_SCHEMA_TYPE() on page 482 • Using the OS_MARK_SCHEMA_TYPESPEC() macro in schema source files, see Building ObjectStore C++ Applications • The ossg schema generator, see Managing ObjectStore Release 6.3 483 OS_REFERENCE_NOCLASS() OS_REFERENCE_NOCLASS() Used to define template instantiation. Syntax OS_REFERENCE_NOCLASS(type) Arguments type The referent type. Description If you use a reference type whose referent type is not a class, you must call this macro, passing the referent type. Calling this macro provides a definition for the template instantiation. For example, the following defines the class os_ Reference<float>: OS_REFERENCE_NOCLASS(float); Implicit instantiation of the template defines operator ->(), which is invalid for nonclass parameters. Calling the macro defines an instantiation that does not provide operator ->(). For references whose referent type is not a class, you resolve the pointer by calling resolve() or by relying on the conversion operator. For information about reference types, see os_Reference<T> on page 293. 484 C++ A P I Reference Chapter 4: System-Supplied Macros OS_REFERENCE_PROTECTED_NOCLASS() Used to define template instantiation. Syntax OS_REFERENCE_PROTECTED_NOCLASS(type) Arguments type The referent type. Description If you use a protected reference type whose referent type is not a class, you must call this macro, passing the referent type. Calling this macro provides a definition for the template instantiation. For example, the following defines the class os_Reference_ protected<float>: OS_REFERENCE_PROTECTED_NOCLASS(float); Implicit instantiation of the template defines operator ->(), which is invalid for nonclass parameters. Calling the macro defines an instantiation that does not provide operator ->(). For references whose referent type is not a class, you resolve the pointer by calling resolve() or by relying on the conversion operator. For information about protected reference types, see os_Reference_protected<T> on page 304. Release 6.3 485 OS_REPORT_DLL_LOAD_AND_UNLOAD() OS_REPORT_DLL_LOAD_AND_UNLOAD() Used in schema source files when generating component schemas. Syntax OS_REPORT_DLL_LOAD_AND_UNLOAD(boolean ) Arguments boolean A Boolean value. Description The OS_REPORT_DLL_LOAD_AND_UNLOAD() macro is used in schema source files when you are generating component schemas. It enables or disables automatic reporting of DLL loading and unloading. When boolean is true, automatic reporting of DLL loading and unloading is enabled. This is accomplished by having ossg generate code that calls os_DLL_ schema_info::DLL_loaded() and os_DLL_schema_info::DLL_unloaded() from the DLL’s initialization and termination functions. By default, automatic reporting is enabled. If boolean is false, automatic reporting is not enabled and you must write your own code to call os_DLL_schema_info::DLL_loaded() and os_DLL_schema_ info::DLL_unloaded() from the DLL’s initialization and termination functions. For information about • Component schemas, see Component Schemas in Chapter 9 of the C++ A P I User Guide • The ossg utility, see Managing ObjectStore 486 C++ A P I Reference Chapter 4: System-Supplied Macros OS_SCHEMA_DLL_ID() Used in schema source files when generating component schemas. Syntax OS_SCHEMA_DLL_ID(string ) Arguments string The string that specifies the DLL identifier. Description The OS_SCHEMA_DLL_ID() macro is used in schema source files when you are generating component schemas to specify the DLL identifier of the DLL. This macro can be used multiple times, for example, to specify different platformspecific DLL identifiers. Do not conditionalize these calls on the platform; you want all the DLL identifiers to be recorded in any database that depends on this DLL. You must call OS_SCHEMA_DLL_ID at least once in a DLL schema source file to distinguish it from an application schema. For information about • Component schemas, see Component Schemas in Chapter 9 of the C++ A P I User Guide • The ossg utility, see Managing ObjectStore Release 6.3 487 OS_SCHEMA_INFO_NAME() OS_SCHEMA_INFO_NAME() Used in schema source files when generating component schemas. Syntax OS_SCHEMA_INFO_NAME(name ) Arguments name The name used for the extern os_DLL_schema_inf variable. Description The OS_SCHEMA_INFO_NAME() macro must be used in schema source files when you are generating component schemas. This macro generates the variable extern os_DLL_schema_info name; that is, the os_DLL_schema_info of this DLL. The default is to generate the schema information with a static name. Call this if you are going to call os_DLL_schema_info::DLL_ loaded() yourself so you can get access to the os_DLL_schema_info. This macro also works in an application schema, in which case the type of the variable is os_application_schema_info instead of os_DLL_schema_info. For information about • Component schemas, see Component Schemas in Chapter 9 of the C++ A P I User Guide • The ossg utility, see Managing ObjectStore 488 C++ A P I Reference Chapter 4: System-Supplied Macros os_soft_pointer The os_soft_pointer macro expands to os_soft_pointer32 on 32-bit platforms and os_soft_pointer64 on 64-bit platforms. See os_soft_pointer32<T> on page 381 and os_soft_pointer64<T> on page 384 for more information. Release 6.3 489 OS_SOFT_POINTER32_NOCLASS() OS_SOFT_POINTER32_NOCLASS() Used if a 32-bit soft pointer type is used. Syntax OS_SOFT_POINTER32_NOCLASS(type ) Arguments type The referent type. This provides a definition for the template instantiation. For example, the following defines the class os_soft_ptr32<float>: OS_SOFT_POINTER32_NOCLASS(float); Description If you use a 32-bit soft pointer type (see os_soft_pointer32<T> on page 381) whose referent type is not a class, you must call this macro, passing the referent type. Implicit instantiation of the template defines operator ->(), which is invalid for nonclass parameters. Calling the macro defines an instantiation that does not provide operator ->(). For soft pointers whose referent type is not a class, you resolve the pointer by calling resolve() or by relying on the conversion operator. The ObjectStore API explicitly provides (using OS_SOFT_POINTER32_NOCLASS()) the following instantiations of os_soft_pointer32<T>: • os_soft_pointer32<void> • os_soft_pointer32<char> 490 C++ A P I Reference Chapter 4: System-Supplied Macros OS_SOFT_POINTER64_NOCLASS() Used if a 64-bit soft pointer type is used.( Syntax OS_SOFT_POINTER64_NOCLASS(type ) Arguments type The referent type. This provides a definition for the template instantiation. For example, the following defines the class os_soft_ptr64<float>: OS_SOFT_POINTER64_NOCLASS(float); Description If you use a 64-bit soft pointer type (see os_soft_pointer64<T> on page 384) whose referent type is not a class, you must call this macro, passing the referent type. Implicit instantiation of the template defines operator ->(), which is invalid for nonclass parameters. Calling the macro defines an instantiation that does not provide operator ->(). For soft pointers whose referent type is not a class, you resolve the pointer by calling resolve() or by relying on the conversion operator. The ObjectStore API explicitly provides (using OS_SOFT_POINTER64_NOCLASS()) the following instantiations of os_soft_pointer64<T>: • os_soft_pointer64<void> • os_soft_pointer64<char> Release 6.3 491 TIX_END_HANDLE TIX_END_HANDLE This macro delimits the end of a block of code for which you have defined a TIX exception handler. See TIX_HANDLE() on page 494 for information about the TIX exception handler macros. 492 C++ A P I Reference Chapter 4: System-Supplied Macros TIX_EXCEPTION This macro is used in a block of code delimited by the macros TIX_HANDLE() and TIX_END_HANDLE to mark the beginning of the statement block to which control is transferred in the event of a specified exception. See TIX_HANDLE() on page 494 for information about the TIX exception handler macros. Release 6.3 493 TIX_HANDLE() TIX_HANDLE() Used to specify a handler for an exception signaled by a given code block. Syntax TIX_HANDLE(exception ) { exception-block } TIX_EXCEPTION { handle-exception-block } TIX_END_HANDLE Arguments exception-block handle-exception-block These can consist of any number of statements and are considered to be within their own block. The enclosing braces are not required, but many source code editors can complain if you do not use them. exception This can be one of the following: - The name of a predefined TIX exception to be handled. This should not be err_ internal — you cannot handle ObjectStore internal errors. - A user-defined exception. See DEFINE_EXCEPTION() on page 472 for information about using this macro to define your own TIX exceptions. - A parent exception. Specifying a parent exception causes all children of the parent to be handled. For information about parent exceptions, see Parent Exceptions on page 500. Description This macro is used in conjunction with the macros TIX_EXCEPTION and TIX_END_ HANDLE to specify a handler for an exception signaled by a given code block. If exception is signaled while control is dynamically within the exception-block, control is transferred to handle-exception-block, unless a more recently established handler for the exception is found first. (If the exception occurs within nested handlers, the innermost nest is considered the most recent.) After handleexception-block executes, program control passes to the statement immediately following TIX_END_HANDLE. If exception is signaled but there is no handle-exception-block, program control passes to the statement immediately following TIX_END_HANDLE. In this situation, you might want to handle the exception outside the TIX exception handler. If exception is not signaled in exception-block, control flows from the end of exception-block to the statement immediately following TIX_END_HANDLE. In place of the TIX_HANDLE() macro, you can substitute the TIX_HANDLE_IF() macro, which allows for conditional processing. See TIX_HANDLE_IF() on page 497. These constructs can be nested, allowing handling of multiple exceptions. For example: TIX_HANDLE(exception2 ) { TIX_HANDLE(exception1 ) { 494 C++ A P I Reference Chapter 4: System-Supplied Macros exception-block } TIX_EXCEPTION { handle-exception1-block } TIX_END_HANDLE } TIX_EXCEPTION { handle-exception2-block } TIX_END_HANDLE Nested handlers are especially useful when the outer handler specifies a parent exception in exception2 and the inner handlers each specify a child of the parent in exception1. However, some care should be taken in constructing a nested handler to ensure that the parent is in the outer handler and the children are in the inner handlers. If they are reversed, the child might never get control. The following program illustrates a simple TIX exception handler. The program tries to open the database file named on the command line. If the attempt fails because the database does not exist, ObjectStore signals err_database_not_found and program control passes to handle-exception-block, which handles the exception. The handler creates a database with the same name. Note that the intent of this example (as of all the examples in this chapter) is to illustrate TIX exception handling and not to show how to open a database. // tix_example.cpp: illustrates a very simple TIX exception handler. // The program tries to open a database named on the command-line. // If the open fails because the database doesn't exist // (err_database_not_found), the exception handler creates a // database of that name. #include <ostore/ostore.hh> #include <iostream> main(int argc, char** argv) { OS_ESTABLISH_FAULT_HANDLER { if (argc != 2) { // check for name of database cout << "Usage: " << argv[0] << " <database>" << endl; return 1; } objectstore::initialize(); os_database *db; TIX_HANDLE(err_database_not_found) { db = os_database::open(argv[1]); // try to open database } TIX_EXCEPTION { // an exception was signaled cout << "Can't open " << argv[1]; cout << ", will create it." << endl; db = os_database::create(argv[1]); } TIX_END_HANDLE cout << "Opened " << db->get_pathname() << endl; db->close(); // close database } OS_END_FAULT_HANDLER return 0; } Following is the output from running the program with different command-line arguments: $ tix_example # no command-line arguments Usage: tix_example <database> $ tix_example nonsense.db # one argument, but doesn't exist Release 6.3 495 TIX_HANDLE() Can't open nonsense.db, will create it. Opened /h/handcuff/2/tmp/examples/nonsense.db $ tix_example nonsense.db # argument to an existing database Opened /h/handcuff/2/tmp/examples/nonsense.db This example program is available online in • $OS_ROOTDIR/examples/doc_demos/ref4/tix_example.cc (UNIX) • %OS_ROOTDIR%\examples\doc_demos\ref4\tix_example.cpp (Windows) See Establishing a TIX Exception Handler in Chapter 6 of the C++ A P I User Guide for more information about using TIX exception handlers. 496 C++ A P I Reference Chapter 4: System-Supplied Macros TIX_HANDLE_IF() Used to specify a handler for an exception signaled by a given code block. Syntax TIX_HANDLE_IF(flag, exception ) { exception-block } TIX_EXCEPTION { handle-exception-block } TIX_END_HANDLE Arguments flag A conditional expression, as used in an if statement. If it evaluates to nonzero (true), the handler is established around exception-block; otherwise, no handler is established. exception-block handle-exception-block As in the TIX_HANDLE() macro, these can consist of any number of statements and are considered to be within their own block. The enclosing braces are not required, but many source code editors can complain if you do not use them. exception Identifies the exception, just as it does in the TIX_HANDLE() macro. Description The TIX_HANDLE_IF() macro is just like the TIX_HANDLE() macro except that it allows for conditional processing of the exception. See TIX_HANDLE() on page 494 for information about TIX exception handlers. Release 6.3 497 TIX_HANDLE_IF() 498 C++ A P I Reference Chapter 5 Predefined TIX Exceptions This chapter contains information on significant predefined exceptions. These exceptions are defined in client.hh, ostore.hh, and /backrest/osbr_err.hh, making them available to your application. Release 6.3 499 Parent Exceptions Parent Exceptions The following are parents in the exceptions object tree hierarchy. They are never signaled directly, but they are useful when establishing a TIX exception handler for them to catch a group of exceptions. See TIX_HANDLE() on page 494. ObjectStore exceptions object tree hierarchy The hierarchy is arranged as follows: all_exceptions err_objectstore err_allocator_framework General exceptions err_coll err_mop err_osbr err_rpc err_schema_evolution • Every TIX exception is a descendant of all_exceptions. • Every TIX exception that is signaled by ObjectStore itself is a child of err_ objectstore, which is a child of all_exceptions. • Every TIX exception signaled from the remote procedure call (RPC) mechanism, which ObjectStore uses for all its network communications, is a child of err_rpc, which is a child of err_objectstore. 500 C++ A P I Reference Chapter 5: Predefined TIX Exceptions General ObjectStore Exceptions The following exceptions are all descended from err_objectstore. err_abort_committed err_address_space_full — Address space is full. err_alignment — A memory fault was signaled by the operating system, but rather than the usual access fault, this fault indicates that there was an alignment error. Often this means that there was an attempt to dereference through a pointer whose value is odd. err_architecture_mismatch — The architecture of the database is not compatible with that of the application. err_authentication_failure err_awaiting_recovery — ObjectStore cannot perform a recovery operation because a server is down and needs to be brought back up. Specifically, this error occurs when ObjectStore tries to recover a block that is tied up during a two-phase commit that is still in progress because of a server crash. Check the console messages to see explanatory messages from the two-phase commit recovery procedure. err_beyond_segment_length — This error message has several meanings. The most common is that the client sent a block number that was higher than the highest block in the segment. err_broken_server_connection — This usually means the same thing as err_ network_failure and might mean network trouble or that the server has crashed; see the class os_server on page 367. This exception can also occur if a client is attempting to communicate with an incompatible server (for example, the server and client are from different, incompatible releases of ObjectStore). err_cache_manager_not_responding — The server was unable to form a network connection to the cache manager process of your client host. You should see whether the cache manager process appears to be alive; if it is not, look in the operating system error log for an error message that might help explain what happened to the cache manager. err_cannot_commit — ObjectStore tried to perform a commit involving updates to multiple servers (that is, a two-phase commit), and it cannot determine a common network for communications. err_cannot_open_application_schema — This is signaled if you try to create or look up a database, but the application schema database for your application cannot be found. err_cannot_shrink_cluster — This is signaled if you specify a cluster size by calling os_cluster::set_size() with an argument that is smaller than the current size, and the call would “shrink” a cluster in a way that would delete persistent objects. You cannot shrink a cluster other than by removing free space at the end of the cluster. Release 6.3 501 General ObjectStore Exceptions err_checkpoint_aborted err_checkpoint_committed err_checkpoint_not_inner err_cluster_full — Signaled by an attempt to allocate storage in a cluster that does not have enough room for the specified object. err_cluster_is_deleted — This error message has several meanings. The most common is that an operation was attempted on a cluster that has been deleted or is believed not to exist. err_cluster_mismatch err_cluster_transient — Signaled when the user attempts to perform an operation that is not legal for transient clusters. err_commit_aborted err_commit_abort_only — Signaled when the user attempts to commit an abort- only transaction. err_commit_with_children err_conflicting_failover_configuration err_connection_closed err_cross_db_pointer — A pointer from one database to another was found. This happens only if external pointers are not allowed. See, for example, os_ database::allow_external_pointers(). err_cursor_at_end err_cursor_not_at_object err_database_exists — The database already exists. This error can occur if you use os_dbutil::mkdir() and specify the path of an existing database. err_database_is_deleted — The database has been deleted. err_database_lock_conflict err_database_not_found — The specified database was not found. For example, the application tried to look up /a/b/c, but the directory /a/b did not contain a database named c. err_database_not_open — The database is not open. Signaled by the notification APIs. err_database_not_open_update — Signaled when the database open mode is not update; the mode could be read-only or MVCC. err_database_transient — This operation is not allowed on the transient database. Signaled by the notification APIs. err_database_wrong_version — Currently, there is only one version of database format, so this exception cannot be signaled. In the future, however, the format of databases might change. This exception is signaled if an executable file linked with 502 C++ A P I Reference Chapter 5: Predefined TIX Exceptions an older version of ObjectStore that cannot understand the new format attempts to operate on a database in the new format. err_datagram_error err_db_already_open_multi_db_mvcc — Signalled when an application tries to open a database for single-database MVCC and the database is already open for multidatabase MVCC. err_db_already_open_single_db_mvcc — Signalled when an application tries to open a database for multidatabase MVCC and the database is already open for single-database MVCC. err_db_cannot_change_open — Signaled when the user attempts to open a database that is already open in a different open mode. err_db_is_offline — Signalled when an application tries to open a database that has been taken offline. See osdbcontrol in Managing ObjectStore. err_db_going_offline — Signalled when an application tries to open a database that is scheduled to be taken offline. See osdbcontrol in Managing ObjectStore. err_db_kill_clients_failed — Signalled when an attempt to take a database offline using the -kill_clients option. See osdbcontrol in Managing ObjectStore. err_deadlock — A deadlock was detected. Note that ObjectStore transactions establish handlers for this exception. An exception handler for this exception will normally receive an instance os_deadlock_exception as the exception object. err_default_cluster — Cluster cannot be assigned as the default cluster. It can be a huge cluster, or it might not be in the specified segment. err_default_segment — Segment cannot be assigned as the default segment. It can be the system segment or it might not be in the specified database. err_deref_transient_pointer — An attempt was made to dereference a pointer to transient memory. The operating system signaled a virtual memory access fault, but the address of the fault was within the transient area of the address space, rather than within the persistent area. err_directory_exists — This is signaled by objectstore::make_directories or objectstore::mkdir when you try to make a new directory on the Directory Manager but a directory with that name already exists. err_directory_not_empty — The directory was not empty, but the application tried to delete the directory. This can happen only from mkdir. err_directory_not_found — The specified path name contained a directory component that was not found. err_explicit_commit_stack_txn err_file_error err_file_not_db Release 6.3 503 General ObjectStore Exceptions err_file_not_local — You have asked a server to operate on a file database that is stored not on that server host but on another host that the server host has mounted using NFS. This should be possible only if you specify a server explicitly for file databases, which is not the usual way file databases are used. err_file_pathname — An entry point has checked a path name and signaled that it is a file path name rather than a rawfs path name. err_hardware — A memory fault was signaled by the operating system, but rather than the usual access fault, this fault indicates that there was a hardware error, such as a memory bus timeout. err_illegal_acquire_lock err_inconsistent_db — This error is signaled if the release of the database is not compatible with the release of the client, or if the database or transaction log was modified, renamed, deleted, or moved other than by ObjectStore. err_indigestible_pna err_insufficient_virtual_memory — Heap space is used up. err_internal — This error message has several meanings, including • The client did a RELEASE_BLOCKS on a block it does not own. • The client sent a block number that was higher than the highest block in the segment. • The database_handle sent by the client was not valid. • An attempt was made to perform an operation on a segment that has been deleted or is believed not to exist. You cannot handle err_internal. err_invalid_deletion — An argument that was not a pointer to a persistent object was passed to operator delete. err_invalid_pathname — A syntactically invalid path name was specified. err_invalid_root_value — You have tried to store a transient or a cross-database pointer in a root. err_license_limit — No connections are available, due to licensing limitations. This refers to the maximum number of connections, as specified by the server password file. err_link_not_found — Intrarawfs link was not found. err_locator_file_id err_locator_read_only err_locator_syntax err_lock_timeout — An attempt to acquire a lock has been unsuccessful within a specified amount of time. An exception handler for this exception will normally 504 C++ A P I Reference Chapter 5: Predefined TIX Exceptions receive a dynamically-allocated instance of os_lock_timeout_exception as the exception object. err_log_data_segment_full —Signalled when the log data segment of the osserver transaction log is full. This error condition can be caused by a number of extremely large update transactions running concurrently. It can also occur when the osrestore utility is used on a very large database. Before running osrestore, large databases should first be deleted. Deleting them results in the restored data being directly written to the material database, instead of keeping the restored data in the transaction log. err_misc —When you are using notifications, this error can occur for the following reasons: - The notification kind specified is reserved for use by ObjectStore. - The notification queue size must be set before subscribing to notifications. - The notification queue size must be greater than 0 but no larger than %d entries. - An error occurred during an attempt to connect to the cache manager notification service: %s. - The connection to cache manager was broken. err_mvcc_incoherent — Signalled when ObjectStore cannot guarantee a consistent snapshot of all databases open for multidatabase MVCC. See Handling err_mvcc_ incoherent in Chapter 2 of the Advanced C++ A P I User Guide. This exception can can be signalled in the following circumstances: - An application tries to open another database for multidatabase MVCC during a transaction - Server-to-server communication fails and is re-established between the time an application opens a database for multidatabase MVCC and the time it tries to fetches data from the database. err_mvcc_nested err_net_cant_connect err_net_connect_timeout err_net_connection_refused err_net_host_down err_net_no_server err_network err_network_failure — The network connection failed, possibly due to network trouble, or because the server or directory manager crashed. err_no_credentials — Access is not permitted; no credentials were presented. err_no_query_trans err_no_rawfs — There is no rawfs on the server. err_no_service_on_net Release 6.3 505 General ObjectStore Exceptions err_no_such_host — The specified host does not exist. err_no_trans — There is no transaction in progress. err_not_a_database — The path name is not the path name of a database. For example, the application tried to delete a database called /a/b, but /a/b was a directory. err_not_a_directory — A path name that was expected to be a directory is something else, possibly a database. err_not_assigned — No database is assigned to the specified location. The application dereferenced a pointer that pointed into an area of virtual memory used for persistent objects but which was not a valid location. It was not valid because no database was mapped to the specified address. Typically this means that the application saved a pointer from a previous transaction, then used it in a subsequent transaction, which is not allowed. err_not_auth_db_kill — Signalled when a user tries to put a database offline with the -kill_clients option but is not authorized to kill other clients. See osdbcontrol in Managing ObjectStore. err_null_pointer — An attempt was made to dereference a null (zero) pointer. err_operation_not_supported err_operator_new_args — Invalid arguments were specified for ObjectStore’s operator new. Currently, this can happen only if you try to pass 0 to operator new as the count argument. err_os_auth_reg_string_array_too_small — length of the string specifying the Windows registry location exceeds the length of the array allocated for the string. err_os_auth_reg_string_invalid — the string specifying the Windows registry location is null or empty. err_os_auth_reg_string_too_long — the string specifying the Windows registry location exceeds the maximum allowable length (MAX_REGISTRY_STRING_LENGTH). err_os_compaction — Invalid arguments to objectstore::compact(). err_permission_denied — Permission to access this database was denied. err_prepare_to_commit err_protocol_not_supported — The ObjectStore client and server (or cache manager) do not agree on the communication protocol to be used between them. One reason for the protocol incompatibility could be that the client and server are from different releases of ObjectStore. err_rawfs_not_upgraded — The rawfs is from an old release. err_read_only_file_system — The file database is stored in a read-only file system. 506 C++ A P I Reference Chapter 5: Predefined TIX Exceptions err_reference_not_found — An attempt was made to resolve an object that has been deleted. This can happen to any safe reference, or to an unsafe reference when the target segment has been deleted. err_reference_syntax — A string with improper syntax was passed to the load() member of a reference class. err_reference_to_transient — The application attempted to create a safe reference to a transient location, which is not allowed. err_restartable err_root_exists — A root with the specified name already exists. This occurs only if you create a root explicitly; it cannot happen as a result of implicit root creation by persistent variables. err_schema_database — Attempt to use a closed database as a schema database, or attempt to use as a schema database a database that itself stored its schema remotely. err_schema_validation_error — An error occurred during schema validation. err_schema_validation_failed — The schema could not be validated. err_segment_is_deleted — This error message has several meanings. The most common is that an operation was done on a segment that has been deleted or is believed not to exist. err_segment_transient — Signaled when the user attempts to perform an operation that is not legal for transient segments. For example, this error is signaled if you attempt to create a cluster in a transient segment; see os_segment::create_ cluster() on page 352. err_server_address_in_use err_server_cannot_open_cache — This error can occur if the server is running on the same host as the client and could not open the cache file to use shared memory transfers. err_server_full — The server has run out of disk space. err_server_not_superuser — The server is not running as the superuser. err_server_refused_connection — The server refused to make the requested connection. err_server_restarted err_string_too_long — Notification string is longer than 16,383 characters. err_too_many_cross_svr_links — Excessively long cross-server link chain. The maximum depth of a cross-server link chain is currently 15. err_too_many_links — Too many levels of intrarawfs links. err_too_many_retries — The transaction was retried more times than the value specified by os_transaction::max_retries. Release 6.3 507 Schema Evolution Exceptions err_trans — An operation was performed outside a transaction when it should have been within one, or an operation was performed within a transaction when it should have been outside any transaction. For example, an attempt was made to access persistent memory from outside any transaction. err_transient_pointer — A transient pointer was found in a database. err_trans_wrong_type — An attempt was made to start a nested transaction whose type (update or read_only) differs from the type of the transaction within which it is nested. err_typespec_mismatch — A persistent variable type mismatch was detected. This happens if two applications use a database; the first has a persistent variable with a particular name and type, and the second has a persistent variable with the same name but with a different type. err_uninitialized — This error should not occur. It means the database is uninitialized possibly because the application that created the database aborted before it finished running, leaving the database empty and not yet initialized. If this occurs, you should delete the database and recreate it. err_unknown_pointer — While pointers were being relocated, ObjectStore came upon a pointer that did not seem to be a valid pointer to any object. err_user_aborted_simple_authentication err_write_during_query — An attempt was made to write during a read-only transaction. Write refers not only to storing into persistent objects but also to other operations that modify the database, such as creating segments. err_write_permission_denied — Permission to write this database was denied. Schema Evolution Exceptions The following exceptions are all descended from err_schema_evolution, which is a descendant of err_objectstore. err_se_ambiguous_subtype_evolution — An attempt was made to evolve an object to a subtype in which it is not a unique supertype. err_se_ambiguous_void_pointer — A void pointer was specified that could not be interpreted unambiguously. This is the case when there are nested data that occupy the same location before schema evolution but different locations afterward. err_se_cannot_delete_class — The specified class cannot be deleted from the schema because other classes still depend upon it. err_se_cross_database_pointer — An attempt was made to resolve a crossdatabase pointer to a database that was not part of the set of databases being evolved. err_se_deleted_component — A pointer was specified to the deleted component of a valid object. 508 C++ A P I Reference Chapter 5: Predefined TIX Exceptions err_se_deleted_object — A pointer was specified to a deleted object. err_se_illegal_pointer — This is the base type for various illegal pointers. err_se_invalid_subtype_evolution — An attempt was made to evolve an object to a type that was not a subtype. err_se_pointer_type_mismatch err_se_transient_object — A pointer to a transient object was encountered. err_se_unnecessary — The requested schema evolution was unnecessary; all schemas under consideration are compatible. Metaobject Protocol Exceptions The following exceptions are descended from err_mop, which is a descendant of err_objectstore. err_mop err_mop_forward_definition — An attempt was made to access information about a class for which only a forward definition exists, and the information required a full definition. err_mop_illegal_cast — An attempt was made to cast a metaobject to an inappropriate type. Database Copy Exceptions The following exceptions are descended from err_osbr_all_exceptions, which is a descendant of err_objectstore. err_osbr_all_exceptions err_osbr_misc err_osbr_invalid_backup_data — Invalid data in backup image. err_osbr_incomplete_backup_data — Backup image is incomplete. err_osbr_cant_open_db — The database could not be opened. err_osbr_not_supported err_osbr_sync_timed_out — Server synchronization timed out. err_osbr_restore_deadlocked — Backup/restore deadlocked. err_osbr_cant_open_exclusive — Couldn't open database for exclusive access because another client already has the database open or another recovery process already has exclusive access to the db. err_osbr_directory_not_found — The specified directory was not found. Release 6.3 509 Database Copy Exceptions err_osbr_path_exists — The specified path already exists. 510 C++ A P I Reference Chapter 5: Predefined TIX Exceptions RPC Exceptions The following exceptions are children of err_rpc. They rarely are signaled; only the most common ones are described in detail in the following list: err_rpc_cantrecv — The operating system signaled an error when ObjectStore tried to receive data. The textual message from the operating system is included in the character-string report in the exception. err_rpc_cantsend — The operating system signaled an error when ObjectStore tried to send data. The textual message from the operating system is included in the character-string report in the exception. err_rpc_timedout — The server or the directory manager timed out; that is, the client was waiting for a reply, and after a certain fixed amount of time, did not receive one. This can mean, among other things, that the server or directory manager has crashed, that it is slow to respond, or that the network is not working properly. err_rpc_auth_badcred err_rpc_auth_badverf err_rpc_autherror err_rpc_auth_failed err_rpc_auth_invalidresp err_rpc_auth_ok err_rpc_auth_rejectedcred err_rpc_auth_rejectedverf err_rpc_auth_tooweak err_rpc_cantdecodeargs err_rpc_cantdecoderes err_rpc_cantencodeargs err_rpc_failed err_rpc_pmapfailure err_rpc_procunavail err_rpc_prognotregistered err_rpc_progunavail err_rpc_progversmismatch err_rpc_success err_rpc_systemerror err_rpc_unknownhost Release 6.3 511 Component Schema Exceptions err_rpc_unknownproto err_rpc_versmismatch Component Schema Exceptions The following exceptions exist: 512 err_schema_not_loaded “The program schema must be loaded before doing this operation” err_schema_not_found “The specified program schema was not found” err_bad_schema_info “The program schema info being loaded is invalid” err_invalid_for_ application_schema “This operation is invalid for the application schema” err_cannot_open_DLL_schema “Unable to open DLL schema database” err_transient_dope_damaged “Some objects’ transient dope could be invalid” err_DLL “Operating system DLL operation failed” err_DLL_not_loaded “Shared library could not be loaded” err_DLL_not_unloaded “Shared library could not be unloaded” err_DLL_symbol_not_found “Symbol could not be found in shared library” C++ A P I Reference Index Symbols () os_replicator, defined by 317 ~os_archiver() os_archiver, defined by 104 ~os_archiver_options() os_archiver_options, defined by 107 ~os_backup() os_backup, defined by 110 ~os_backup_options() os_backup_options, defined by 115 ~os_recover() os_recover, defined by 287 ~os_recover_options() os_recover_options, defined by 292 ~os_replicator_statistic_info() os_os_replicator_statistic_info, defined 321 ~os_restore() os_restore, defined by 323 ~os_restore_options() os_restore_options, defined by 328 ~os_untranslatable_pointer_handler() os_untranslatable_pointer_handler, defined by 451 A abort() os_transaction, defined by 409 abort_top_level() os_transaction, defined by 409 access control approaches to 45 os_segment_access, the class 362 Access_modifier os_member, defined by 240 acquire_address_space() Release 6.3 objectstore, defined by 54 acquire_lock() objectstore, defined by 54 add() os_path_to_data, defined by 271 add_db_to_archive() os_archiver, defined by 104 add_DLL_identifier() os_DLL_schema_info, defined by 206 add_missing_dispatch_table_handler() objectstore, defined by 57 address-space markers, disabling 83 affiliate() os_database, defined by 148 affiliation API os_database::affiliate() 148 os_database::change_affiliation() 149 os_database::get_affiliated_ databases() 154 os_database::get_affiliation_index_ of() 154 os_database::get_path_to() 160 os_database::has_affiliation_to() 162 after_begin os_transaction_hook, defined by 415 after_checkpoint os_transaction_hook, defined by 415 after_commit os_transaction_hook, defined by 415 allocating storage 459 ancestor_of() tix_exception, defined by 454 Anonymous_indirect os_type, defined by 418 Anonymous_union os_class_type, defined by 119 Application_schema os_schema, defined by 330 Array 513 B os_type, defined by 418 assign() os_notification, defined by 260 os_subscription, defined by 396 augment_classes_to_be_recycled() os_schema_evolution, defined by 335 augment_classes_to_be_removed() os_schema_evolution, defined by 335 augment_cluster_split_avoidance() os_compact, defined by 141 os_schema_evolution, defined by 335 augment_dll_schema_db_names() os_schema_evolution, defined by 335 augment_optional_classes() os_schema_evolution, defined by 336 augment_post_compact_transformers() os_compact, defined by 141 augment_post_evol_transformers() os_schema_evolution, defined by 336 authentication os_authentication 109 authorization 362 B basic_undo() basic_undo, defined by 52 basic_undo, the class ~basic_undo() 53 basic_undo() 52 get_exception() data member 52 has_exception() data member 52 before_abort os_transaction_hook, defined by before_checkpoint os_transaction_hook, defined by before_commit os_transaction_hook, defined by before_retry os_transaction_hook, defined by begin() os_transaction, defined by 409 binary relationships modeling 44 bind() os_mop, defined by 254 bit_offset() os_path_to_data, defined by 271 byte_offset() 514 415 415 416 416 os_path_to_data, defined by 271 C change_affiliation() os_database, defined by 149 change_mapping() os_str_conv, defined by 391 change_schema_key() os_database, defined by 149 change_time_interval() os_archiver, defined by 104 os_replicator, defined by 316 change_type() objectstore, defined by 58 Char os_type, defined by 418 checkpoint os_dbutil::svr_checkpoint() 192 os_transaction::checkpoint() 410 checkpoint() os_transaction, defined by 410 chgrp() os_dbutil, defined by 178 chmod() os_dbutil, defined by 178 chown() os_dbutil, defined by 178 Class os_class_type, defined by 119 os_type, defined by 418 class library 47 classes, system-supplied basic_undo 52 objectstore 54 objectstore_exception 96 os_access_modifier 97 os_address_space_marker 98 os_anonymous_indirect_type 101 os_app_schema 102 os_application_schema_info 103 os_archiver 104 os_archiver_options 106 os_array_type 108 os_authentication 109 os_backup 110 os_backup_options 112 os_base_class 116 os_class_type 119 C++ A P I Reference Index os_close_database 130 os_cluster 131 os_cluster_cursor 138 os_cluster_with 140 os_comp_schema 147 os_compact 141 os_database 148 os_database_root 172 os_database_schema 175 os_Database_table 176 os_dbutil 178 os_deadlock_exception 203 os_DLL_finder 205 os_DLL_schema_info 206 os_Dumper_reference 208 os_Dumper_specialization 211 os_dynamic_extent 213 os_enum_type 215 os_enumerator_literal 217 os_evolve_subtype_fun_binding 218 os_export_id 219 os_export_id_cursor 220 os_failover_server 222 os_field_member_variable 224 os_Fixup_dumper 225 os_function_type 227 os_indirect_type 229 os_instantiated_class_type 230 os_int64 231 os_integral_type 232 os_literal 234 os_literal_template_actual_arg 237 os_lock_timeout_exception 238 os_member 240 os_member_function 244 os_member_namespace 248 os_member_type 249 os_member_variable 250 os_mop 254 os_named_indirect_type 257 os_namespace 258 os_notification 260 os_object_cursor 268 os_path_to_data 271 os_pathname_and_segment_number 275 os_pathname_segment_cluster 276 os_persistent_to_transient_pointer_ manager 277 Release 6.3 os_Planning_action 278 os_pointer_literal 279 os_pointer_to_member_type 280 os_pointer_type 281 os_pragma 282 os_rawfs_entry 283 os_real_type 286 os_recover_options 289 os_Reference<T> 293 os_reference_cross_session 297 os_Reference_cross_session<T> 295 os_reference_internal 301 os_Reference_protected<T> 304 os_reference_protected_internal 306 os_reference_type 310 os_relationship_member_variable 311 os_release_cluster_pointer 312 os_release_database_pointer 313 os_release_root_pointer 314 os_release_segment_pointer 315 os_replicator 316 os_replicator_options 318 os_restore 287, 323 os_restore_options 325 os_retain_address 329 os_schema 330 os_schema_evolution 332 os_schema_handle 347 os_schema_info 350 os_schema_install_options 351 os_segment 352 os_segment_access 362 os_segment_cursor 365 os_server 367 os_session 370 os_soft_pointer32<char> 389 os_soft_pointer32<T> 381 os_soft_pointer32<void> 387 os_soft_pointer32_base 373 os_soft_pointer64<char> 390 os_soft_pointer64<T> 384 os_soft_pointer64<void> 388 os_soft_pointer64_base 377 os_str_conv 391 os_string 394 os_subscription 396 os_template 399 os_template_actual_arg 401 515 C os_template_formal_arg 403 os_template_instantiation 405 os_template_type_formal 407 os_template_value_formal 408 os_transaction 409 os_transaction_hook 415 os_transformer_binding 417 os_type 418 os_Type_fixup_info 429 os_Type_fixup_loader 430 os_Type_info 432 os_Type_loader 434 os_type_template 436 os_type_template_actual_arg 437 os_type_type 438 os_typed_pointer_void 439 os_typespec 440 os_unsigned_int64 446 os_untranslatable_pointer_handler 448 os_void_type 451 os_with_ mapped 452 tix_context 453 tix_exception 454 tix_handler 456 untranslatable_pointer_handler 448 clear_persistent_to_transient_pointers() objectstore, defined by 58 close() os_database, defined by 150 close_all_connections() os_dbutil, defined by 179 close_all_server_connections() os_dbutil, defined by 179 close_server_connection() os_dbutil, defined by 179 cluster_number os_pathname_segment_cluster, defined by 276 clustering 44 specifying using operator new() 459 clusters 44 default returning 354 setting 360 iterating over 138 transient 133 cmgr_remove_file() os_dbutil, defined by 179 cmgr_shutdown() 516 os_dbutil, defined by 179 cmgr_stat() os_dbutil, defined by 179 collections facility macros 469 commit() os_transaction, defined by 411 compact() os_compact, defined by 142 compaction 46 compare() os_string, defined by compare_nocase() os_string, defined by compare_schemas() os_dbutil, defined by Compilation_schema os_schema, defined by 394 394 181 330 component schemas objectstore::enable_damaged_dope_ repair() 59 objectstore::enable_DLL_schema() 60 objectstore::find_DLL_schema() 61 objectstore::get_autoload_DLLs_ function() 65 objectstore::is_damaged_dope_repair_ enabled() 75 objectstore::is_DLL_schema_enabled() 75 objectstore::load_DLL() 76 objectstore::set_autoload_DLLs_ function() 83 OS_REPORT_DLL_LOAD_AND_UNLOAD(), the macro 486 OS_SCHEMA_DLL_ID(), the macro 487 os_schema_info 350 OS_SCHEMA_INFO_NAME(), the macro 488 connection_is_broken() os_server, defined by 367 convert() os_str_conv, defined by 391 copy_classes() os_mop, defined by 255 copy_database() os_dbutil, defined by 182 create() os_access_modifier, defined by 97 os_anonymous_indirect_type, defined by 101 os_array_type, defined by 108 os_base_class, defined by 116 C++ A P I Reference Index os_class_type, defined by 119 os_database, defined by 150 os_enum_type, defined by 215 os_enumerator_literal, defined by 217 os_field_member_variable, defined by 224 os_function_type, defined by 227 os_instantiated_class_type, defined by 230 os_integral_type, defined by 232 os_literal_template_actual_arg, defined by 237 os_member_function, defined by 244 os_member_namespace, defined by 248 os_member_type, defined by 249 os_member_variable, defined by 250 os_named_indirect_type, defined by 257 os_namespace, defined by 258 os_pointer_literal, defined by 279 os_pointer_to_member_type, defined by 280 os_pointer_type, defined by 281 os_pragma, defined by 282 os_real_type, defined by 286 os_reference_type, defined by 310 os_session, defined by 370 os_template_instantiation, defined by 405 os_template_type_formal, defined by 407 os_template_value_formal, defined by 408 os_Type_loader, defined by 434 os_type_template, defined by 436 os_type_template_actual_arg, defined by 437 os_void_type, defined by 451 create_char() os_literal, defined by 234 create_cluster() os_segment, defined by 352 create_defaulted_char() os_integral_type, defined by 232 create_double() os_real_type, defined by 286 create_enum_literal() os_literal, defined by 234 create_float() os_real_type, defined by 286 create_int() os_integral_type, defined by 232 create_long() os_integral_type, defined by 232 create_long_double() os_real_type, defined by 286 Release 6.3 create_pointer_literal() os_literal, defined by 234 create_root() os_database, defined by 152 create_segment() os_database, defined by 152 create_short() os_integral_type, defined by 233 create_signed_char() os_integral_type, defined by 233 os_literal, defined by 234 create_signed_int() os_literal, defined by 234 create_signed_long() os_literal, defined by 234 create_signed_short() os_literal, defined by 234 create_unsigned_char() os_integral_type, defined by 233 os_literal, defined by 234 create_unsigned_int() os_literal, defined by 235 create_unsigned_long() os_literal, defined by 235 create_unsigned_short() os_literal, defined by 235 create_wchar_t() os_literal, defined by 235 creating objects 459 cross-database pointers affiliating databases 148 getting list of affiliated databases 154 retrieving path to affiliated database 160 cross-transaction pointers disabling 81 enabling 81 current() os_mop, defined by 255 os_object_cursor, defined by 268 D data os_Type_info, defined by 432 data member pairs 44 database access control 362 database fragmention os_database::get_fragmentation() 157 database permissions 362 517 E database utility API 178 database_of() os_cluster, defined by 131 os_segment, defined by 352 database_pathname os_pathname_and_segment_number, defined by 275 os_pathname_segment_cluster, defined by 276 Database_schema os_schema, defined by 330 databases and persistent data 148 decache() os_soft_pointer32_base, defined by 373 os_soft_pointer64_base, defined by 377 decaching soft pointers 86 DECLARE_EXCEPTION() macro objectstore_exception, the class 96 DECLARE_EXCEPTION(), the macro 471 declares_get_os_typespec_function() os_class_type, defined by 120 default cluster in a segment 131 returning 354 setting 360 default segment returning 156 setting 168 DEFINE_EXCEPTION() macro objectstore_exception, the class 96 DEFINE_EXCEPTION(), the macro 472 defines_virtual_functions() os_class_type, defined by 120 delete, the operator 458 deregister_hook() os_transaction_hook, defined by 416 destroy() os_cluster, defined by 131 os_database, defined by 153 os_database_root, defined by 172 os_segment, defined by 352 destructors and exceptions 52 disconnect() os_server, defined by 368 disk_free() os_dbutil, defined by 182 DLL_loaded() os_DLL_schema_info, defined by 206 518 DLL_unloaded() os_DLL_schema_info, defined by 207 os_schema_handle, defined by 347 Double os_type, defined by 418 dump() os_reference_cross_session, defined by 298 os_reference_internal, defined by 301 os_reference_protected_internal, defined by 306 os_soft_pointer32_base, defined by 373 os_soft_pointer64_base, defined by 377 dump_info() os_Fixup_dumper, defined by 225 duplicate() os_Fixup_dumper, defined by 225 E embedded_server_available() objectstore, defined by 59 enable_damaged_dope_repair() objectstore, defined by 59 enable_DLL_schema() objectstore, defined by 60 entry points 172 Enum os_type, defined by 418 enumerators Namespace 241 no_access 362 objectstore::lock_as_used 76 objectstore::lock_cluster_read 77 objectstore::lock_cluster_write 77 objectstore::lock_database_read 77 objectstore::lock_database_write 77 objectstore::lock_page_write 78 objectstore::lock_segment_read 78 objectstore::lock_segment_write 78 objectstore::os_no_lock 54 objectstore::os_read_lock 54 objectstore::os_write_lock 54 objectstore::own_page_write 79 os_allocation_strategy_least_space 63 os_allocation_strategy_least_wait 63 os_base_class::Private 117 os_base_class::Protected 117 os_base_class::Public 117 os_class_type::Anonymous_union 119 C++ A P I Reference Index os_class_type::Class 119 os_class_type::Struct 129 os_class_type::Union 129 os_dbutil::os_svr_ping_is_alive 194 os_dbutil::os_svr_ping_no_such_host 194 os_dbutil::os_svr_ping_not_reachable 194 os_fetch_cluster 67 os_fetch_page 67 os_fetch_stream 67 os_formal_actual_arg::Value 403 os_function_type::Known 227 os_function_type::Unknown 227 os_function_type::Variable 227 os_member::Access_modifier 240 os_member::Field_variable 240 os_member::Function 240 os_member::Namespace 241 os_member::Private 242 os_member::Protected 243 os_member::Public 243 os_member::Relationship 243 os_member::Type 243 os_member::Variable 243 os_rawfs_entry::OSU_DATABASE 285 os_rawfs_entry::OSU_DIRECTORY 285 os_rawfs_entry::OSU_LINK 285 os_segment_access::no_access 362 os_segment_access::read_access 363 os_segment_access::read_write_access 363 os_svr_stat::get_client_info_others 195 os_svr_stat::get_svr_meter_samples 195 os_svr_stat::get_svr_parameters 195 os_svr_stat::get_svr_usage 195 os_template::Function 399 os_template::Type 400 os_template_actual_arg::literal_ actual 401 os_template_actual_arg::type_actual 401 os_template_formal_arg::Typel 403 os_transaction::read_only 413 os_transaction::update 414 os_transaction_hook::after_begin 415 os_transaction_hook::after_commit 415 os_transaction_hook::before_abort 415 os_transaction_hook::before_commit 415, 416 os_transaction_hook::before_retry 416 os_type::Anonymous_indirect 418 Release 6.3 os_type::Array 418 os_type::Char 418 os_type::Class 418 os_type::Double 418 os_type::Enum 418 os_type::Float 418 os_type::Function 418 os_type::Instantiated_class 420 os_type::Integer 420 os_type::Long_double 421 os_type::Named_indirect 421 os_type::Pointer 425 os_type::Pointer_to_member 425 os_type::Reference 425 os_type::Signed_char 425 os_type::Signed_long 426 os_type::Signed_short 426 os_type::Type 427 os_type::Undefined 427 os_type::Unsigned_char 427 os_type::Unsigned_integer 427 os_type::Unsigned_long 428 os_type::Unsigned_short 428 os_type::Void 428 OSU_DATABASE 285 OSU_DIRECTORY 285 OSU_LINK 285 read_access 363 read_write_access 363 equal_DLL_identifiers() os_DLL_finder, defined by 205 equal_DLL_identifiers_same_prefix() os_DLL_finder, defined by 205 equal_signature() os_function_type, defined by 227 err_abort_committed exception 501 err_address_space_full exception 501 objectstore::acquire_address_space() 54 objectstore::set_default_address_space_ partition_size() 87 os_session::create() 370 os_session::force_full_ initialization() 370 err_alignment exception 501 err_architecture_mismatch exception 501 err_authentication_failure exception 501 err_awaiting_recovery exception 501 err_beyond_segment_length exception 501 519 E err_broken_connection exception os_dbutil::svr_ping() 194 err_broken_server_connection exception 501 handling with os_server 367 os_transaction::prepare_to_commit() 412 err_cache_manager_not_responding exception 501 err_cannot_commit exception 501 err_cannot_open_application_schema exception 501 err_cannot_shrink_cluster exception 501 os_cluster::set_size() 136 err_checkpoint_aborted exception 502 err_checkpoint_committed exception 502 err_checkpoint_not_inner exception 502 err_cluster_full exception described 502 os_cluster, the class 459 os_cluster_with, the class 140 err_cluster_is_deleted exception described 502 os_cluster::destroy() 131 err_cluster_mismatch exception 502 err_cluster_transient exception 502 err_commit_abort_only exception 502 err_commit_aborted exception 502 err_commit_with_children exception 502 err_conflicting_failover_configuration exception 502 err_connection_closed exception 502 err_cross_db_pointer exception 502 err_cross_server_rename exception os_dbutil::rename() 190 err_cursor_at_end exception 502 err_cursor_not_at_object exception 502 err_database_exists exception 502 os_database::create() 151 os_dbutil::make_link() 184 os_dbutil::mkdir() 185 os_dbutil::rename() 190 err_database_is_deleted exception 502 returned by os_database::destroy() 153 err_database_lock_conflict exception 502 err_database_not_found exception 502 returned by os_database::destroy() 153 returned by os_database::lookup() 163 returned by os_database::open() 164 err_database_not_open exception 502 520 objectstore::set_auto_open_mode() 84 os_database::create_root() 152 err_database_not_open_update exception 502 err_database_segment exception returned by os_database::create_ segment() 152 err_database_transient exception 502 err_database_wrong_version exception 502 err_datagram_error exception 503 err_db_already_open_multi_db_mvcc exception 503 err_db_already_open_single_db_mvcc exception 503 err_db_cannot_change_open exception 503 returned by os_database::open() 164 err_db_going_offline exception 503 err_db_is_offline exception 503 err_db_kill_clients_failed exception 503 err_deadlock exception 503 objectstore::acquire_lock() 55 os_transaction::prepare_to_commit() 412 tix_exception::release_pointer() 454 tix_exception::set_unhandled_exception_ hook() 455 err_default_cluster exception 503 err_default_segment exception 503 err_deref_transient_pointer exception 503 err_directory_exists exception 503 os_dbutil::make_link() 184 os_dbutil::mkdir() 185 os_dbutil::rename() 190 err_directory_not_empty exception 503 os_dbutil::rmdir() 190 err_directory_not_found exception 503 os_dbutil::mkdir() 185 err_DLL_not_loaded exception objectstore::find_DLL_schema() 61 objectstore::load_DLL() 76 err_DLL_not_unloaded exception objectstore::unload_DLL() 94 err_DLL_symbol_not_found exception objectstore::lookup_DLL_symbol() 78 err_explicit_commit_stack_txn exception 503 err_file_error exception 503 os_dbutil::remove() 190 err_file_not_db exception 503 err_file_not_local exception 504 os_dbutil::remove() 190 C++ A P I Reference Index err_file_pathname exception 504 err_hardware exception 504 err_illegal_acquire_lock exception 504 err_illegal_pointer exception returned by os_schema_ evolution::evolve() 339 err_inconsistent_db exception 504 err_indigestible_pna exception 504 err_insufficient_virtual_memory exception 504 err_internal exception 504 objectstore::set_cache_file() 85 err_invalid_deletion exception 504 delete operator 458 err_invalid_for_application_schema exception os_schema_handle::DLL_unloaded() 347 err_invalid_pathname exception 504 err_invalid_pathname_encoding exception 90 err_invalid_rename exception os_dbutil::rename() 190 err_invalid_root_value exception 504 os_database_root::set_value() 174 err_license_limit exception 504 err_link_not_found exception 504 err_locator_file_id exception 504 err_locator_misc exception objectstore::set_locator_file() 88 err_locator_read_only exception 504 err_locator_syntax exception 504 err_lock_timeout exception 504 tix_exception::release_pointer() 454 err_log_data_segment_full exception described 505 err_misc exception described 505 objectstore::acquire_address_space() 54 objectstore::initialize_for_ sessions() 73 objectstore::set_default_address_space_ partition_size() 87 os_database::size() 171 os_database::size_in_sectors() 171 os_dbutil::cmgr_stat() 180 os_dbutil::disk_free() 182 os_dbutil::svr_stat() 195 os_schema_info::get() 350 os_segment, the class 459 os_server class 367 Release 6.3 os_session::create() 370 err_mop exception 509 os_class_type::get_dispatch_table_ pointer_offset() 122 os_class_type::get_dispatch_table_ pointer_offset_other_compiler() 122 os_class_type::get_most_derived_ class() 123 os_member_variable::get_offset() 250 os_member_variable::get_size() 250 os_member_variable::set_offset() 252 os_void_type, the class 451 err_mop_cannot_neutralize exception os_mop::bind() 254 os_mop::get_failure_classes() 255 os_mop::get_neutralized_classes() 255 err_mop_forward_definition exception 509 os_class_type::find_base_class() 120 os_class_type::find_member_ variable() 120 os_class_type::get_base_classes() 121 os_class_type::get_indirect_virtual_ base_classes() 122 os_class_type::get_members() 123 err_mop_illegal_cast exception 509 os_class_type::operator os_instantiated_ class_type&() 127 os_member operators 241 os_member_variable operators 252 os_schema operators 330 os_template operators 399, 400 os_template_actual_arg operators 401 os_template_formal_arg operators 403 os_type operators 421 err_mop_not_neutral exception os_mop::bind() 254 err_mvcc_incoherent exception described 505 err_mvcc_nested exception 505 returned by os_database::open_mvcc() 166 err_net_cant_connect exception 505 err_net_connect_timeout exception 505 err_net_connection_refused exception 505 err_net_host_down exception 505 err_net_no_server exception 505 err_network exception 505 err_network_failure exception 505 err_no_credentials exception 505 521 E err_no_query_trans exception 505 err_no_rawfs exception 505 err_no_schema exception os_app_schema::get() 102 os_database_schema::get() 175 os_database_schema::get_for_update() 175 err_no_service_on_net exception 505 err_no_session exception objectstore::acquire_address_space() 54 objectstore::initialize_for_ sessions() 74 os_segment::get_current() 371 err_no_such_host exception 506 err_no_trans exception 506 err_not_a_database exception 506 os_dbutil::remove() 190 err_not_a_directory exception 506 os_dbutil::list_directory() 184 os_dbutil::rmdir() 190 err_not_a_link exception os_dbutil::rehost_link() 189 err_not_assigned exception 506 err_not_auth_db_kill exception 506 err_not_supported exception objectstore::propagate_log() 79 err_null_pointer exception 506 err_opened_read_only exception returned by os_database::change_schema_ key() 149 returned by os_database::freeze_schema_ key() 154 returned by os_database::open_mvcc() 166 err_operation_not_supported exception 506 err_operator_new_args exception 506 err_os_auth_reg_string_array_too_small exception 506 thrown by os_authentication::get_nt_ registry_location() 109 err_os_auth_reg_string_invalid exception 506 thrown by os_authentication::set_nt_ registry_location() 109 err_os_auth_reg_string_too_long exception 506 thrown by os_authentication::set_nt_ registry_location() 109 err_os_compaction exception 506 err_os_query_evaluation_error exception returned by os_schema_ 522 evolution::evolve() 339 err_osbr_all_exceptions exception 509 err_osbr_cant_open_db exception 509 err_osbr_cant_open_exclusive exception 509 err_osbr_directory_not_found exception 509 err_osbr_incomplete_backup_data exception 509 err_osbr_invalid_backup_data exception 509 err_osbr_misc exception 509 err_osbr_not_supported exception 509 err_osbr_path_exists exception 510 err_osbr_restore_deadlocked exception 509 err_osbr_sync_timed_out exception 509 err_permission_denied exception 506 err_prepare_to_commit exception 506 os_transaction::prepare_to_commit() 413 err_protocol_not_supported exception 506 err_rawfs_not_upgraded exception 506 err_read_only_file_system exception 506 err_reference_not_found exception 507 err_reference_syntax exception described 507 os_reference_cross_session::load() 298 os_reference_internal::get_database_ key() 301 os_reference_internal::load() 302 os_reference_protected::get_database_ key() 307 os_reference_protected_ internal::load() 307 os_soft_pointer32_base::get_database_ key() 374 os_soft_pointer32_base::load() 375 os_soft_pointer64_base::get_database_ key() 378 os_soft_pointer64_base::load() 379 err_reference_to_transient exception 507 err_restartable exception 507 err_root_exists exception 507 os_database::create_root() 152 err_rpc_auth_badcred exception 511 err_rpc_auth_badverf exception 511 err_rpc_auth_failed exception 511 err_rpc_auth_invalidresp exception 511 err_rpc_auth_ok exception 511 err_rpc_auth_rejectedcred exception 511 err_rpc_auth_rejectedverf exception 511 err_rpc_auth_tooweak exception 511 C++ A P I Reference Index err_rpc_autherror exception 511 err_rpc_cantdecodeargs exception 511 err_rpc_cantdecoderes exception 511 err_rpc_cantencodeargs exception 511 err_rpc_cantrecv exception 511 err_rpc_cantsend exception 511 err_rpc_failed exception 511 err_rpc_pmapfailure exception 511 err_rpc_procunavail exception 511 err_rpc_prognotregistered exception 511 err_rpc_progunavail exception 511 err_rpc_progversmismatch exception 511 err_rpc_success exception 511 err_rpc_systemerror exception 511 err_rpc_timedout exception 511 err_rpc_unknownhost exception 511 err_rpc_unknownproto exception 512 err_rpc_versmismatch exception 512 err_schema_database exception 507 os_database::create() 151 os_database::open() 165 os_database::set_schema_database() 170 err_schema_evolution exception returned by os_schema_ evolution::evolve() 339 err_schema_key exception objectstore::set_current_schema_key() 86 os_database::change_schema_key() 150 returned by os_database::freeze_schema_ key() 154 err_schema_not_found exception objectstore::find_DLL_schema() 61 err_schema_not_loaded exception os_schema_handle::get() 347 err_schema_validation_error exception 507 err_schema_validation_failed exception 507 err_se_ambiguous_subtype_evolution exception 508 err_se_ambiguous_void_pointer exception 508 err_se_cannot_delete_class exception 508 returned by os_schema_evolution::augment_ classes_to_be_removed() 335 err_se_cross_database_pointer exception 508 err_se_deleted_component exception 508 err_se_deleted_object exception 509 err_se_illegal_pointer exception 509 err_se_invalid_subtype_evolution exception 509 Release 6.3 err_se_pointer_type_mismatch exception 509 err_se_transient_object exception 509 err_se_unnecessary exception 509 err_segment_is_deleted exception 507 os_segment::destroy() 352 err_segment_transient exception 507 os_segment::create_cluster() 352 err_server_address_in_use exception 507 err_server_cannot_open_cache exception 507 err_server_full exception 507 os_transaction::prepare_to_commit() 412 err_server_not_superuser exception 507 err_server_refused_connection exception 507 os_server::reconnect() 369 err_server_restarted exception 507 err_string_too_long exception 507 err_too_many_cross_svr_links exception 507 err_too_many_links exception 507 err_too_many_retries exception 507 err_trans exception 508 os_server::disconnect() 368 os_transaction::is_lock_contention() 412 err_trans_wrong_type exception 508 err_transient_pointer exception 508 err_typespec_mismatch exception 508 err_uninitialized exception 508 err_unknown_pointer exception 508 err_user_aborted_simple_authentication exception 508 err_write_during_query exception 508 err_write_permission_denied exception 508 evolve() os_schema_evolution, defined by 337 example programs DEFINE_EXCEPTION(), the macro 472 OS_BEGIN_TXN(), the macro 475 TIX_HANDLE(), the macro 495 exception facility classes basic_undo 52 objectstore_exception 96 tix_context 453 tix_exception 454 tix_handler 456 exceptions See also TIX exceptions action when no handler for 96 ancestor 454 database copy 509 523 E descendant 454 destructors invoked 52 err_abort_committed 501 err_address_space_full 501 err_alignment 501 err_all_exceptions 509 err_architecture_mismatch 501 err_authentication_failure 501 err_awaiting_recovery 501 err_beyond_segment_length 501 err_broken_connection 194 err_broken_server_connection 501 err_cache_manager_not_responding 501 err_cannot_commit 501 err_cannot_open_application_schema 501 err_cannot_shrink_cluster 501 err_checkpoint_aborted 502 err_checkpoint_committed 502 err_checkpoint_not_inner 502 err_cluster_full 502 err_cluster_is_deleted 502 err_cluster_mismatch 502 err_cluster_transient 502 err_commit_abort_only 502 err_commit_aborted 502 err_commit_with_children 502 err_conflicting_failover_ configuration 502 err_connection_closed 502 err_cross_db_pointer 502 err_cross_server_rename 190 err_cursor_at_end 502 err_cursor_not_at_object 502 err_database_exists 502 err_database_is_deleted 502 err_database_lock_conflict 502 err_database_not_found 502 err_database_not_open 502 err_database_not_open_update 502 err_database_segment 152 err_database_transient 502 err_database_wrong_version 502 err_datagram_error 503 err_db_already_open_multi_db_mvcc 503 err_db_already_open_single_db_mvcc 503 err_db_cannot_change_open 503 err_db_going_offline 503 err_db_is_offline 503 524 err_db_kill_clients_failed 503 err_deadlock 503 err_default_cluster 503 err_default_segment 503 err_deref_transient_pointer 503 err_directory_exists 503 err_directory_not_empty 503 err_directory_not_found 503 err_DLL_not_loaded 61 err_DLL_not_unloaded 94 err_DLL_symbol_not_found 78 err_explicit_commit_stack_txn 503 err_file_error 503 err_file_not_db 503 err_file_not_local 504 err_file_pathname 504 err_hardware 504 err_illegal_acquire_lock 504 err_illegal_pointer 339 err_inconsistent_db 504 err_indigestible_pna 504 err_insufficient_virtual_memory 504 err_internal 504 err_invalid_deletion 504 err_invalid_for_application_schema 347 err_invalid_pathname 504 err_invalid_pathname_encoding 90 err_invalid_rename 190 err_invalid_root_value 504 err_license_limit 504 err_link_not_found 504 err_locator_file_id 504 err_locator_misc 88 err_locator_read_only 504 err_locator_syntax 504 err_lock_timeout 504 err_log_data_segment_full 505 err_misc 505 err_mop 509 err_mop_cannot_neutralize 254 err_mop_forward_definition 509 err_mop_illegal_cast 509 err_mop_not_neutral 254 err_mvcc_incoherent 505 err_mvcc_nested 505 err_net_cant_connect 505 err_net_connect_timeout 505 err_net_connection_refused 505 C++ A P I Reference Index err_net_host_down 505 err_net_no_server 505 err_network 505 err_network_failure 505 err_no_credentials 505 err_no_query_trans 505 err_no_rawfs 505 err_no_schema 102 err_no_service_on_net 505 err_no_session 54 err_no_such_host 506 err_no_trans 506 err_not_a_database 506 err_not_a_directory 506 err_not_a_link 189 err_not_assigned 506 err_not_auth_db_kill 506 err_not_supported 79 err_null_pointer 506 err_opened_read_only 149, 154 err_operation_not_supported 506 err_operator_new_args 506 err_os_auth_reg_string_array_too_ small 506 err_os_auth_reg_string_invalid 506 err_os_auth_reg_string_too_long 506 err_os_compaction 506 err_os_query_evaluation_error 339 err_osbr_ path_exists 510 err_osbr_cant_open_db 509 err_osbr_cant_open_exclusive 509 err_osbr_directory_not_found 509 err_osbr_invalid_backup_data 509 err_osbr_misc 509 err_osbr_not_supported 509 err_osbr_restore_deadlocked 509 err_osbr_sync_timed_out 509 err_permission_denied 506 err_prepare_to_commit 506 err_protocol_not_supported 506 err_rawfs_not_upgraded 506 err_read_only_file_system 506 err_reference_not_found 507 err_reference_syntax 507 err_reference_to_transient 507 err_restartable 507 err_root_exists 507 err_rpc_auth_badcred 511 Release 6.3 err_rpc_auth_badverf 511 err_rpc_auth_failed 511 err_rpc_auth_invalidresp 511 err_rpc_auth_ok 511 err_rpc_auth_rejectedcred 511 err_rpc_auth_rejectedverf 511 err_rpc_auth_tooweak 511 err_rpc_autherror 511 err_rpc_cantdecodeargs 511 err_rpc_cantdecoderes 511 err_rpc_cantencodeargs 511 err_rpc_cantrecv 511 err_rpc_cantsend 511 err_rpc_failed 511 err_rpc_pmapfailure 511 err_rpc_procunavail 511 err_rpc_prognotregistered 511 err_rpc_progunavail 511 err_rpc_progversmismatch 511 err_rpc_success 511 err_rpc_systemerror 511 err_rpc_timedout 511 err_rpc_unknownhost 511 err_rpc_unknownproto 512 err_rpc_versmismatch 512 err_schema_database 507 err_schema_evolution 339 err_schema_key 86, 150 err_schema_not_found 61 err_schema_not_loaded 347 err_schema_validation_error 507 err_schema_validation_failed 507 err_se_ambiguous_subtype_evolution 508 err_se_ambiguous_void_pointer 508 err_se_cannot_delete_class 508 err_se_cross_database_pointer 508 err_se_deleted_component 508 err_se_deleted_object 509 err_se_illegal_pointer 509 err_se_invalid_subtype_evolution 509 err_se_pointer_type_mismatch 509 err_se_transient_object 509 err_se_unnecessary 509 err_segment_is_deleted 507 err_segment_transient 507 err_server_address_in_use 507 err_server_cannot_open_cache 507 err_server_full 507 525 F err_server_not_superuser 507 err_server_refused_connection 507 err_server_restarted 507 err_string_too_long 507 err_too_many_cross_svr_links 507 err_too_many_links 507 err_too_many_retries 507 err_trans 508 err_trans_wrong_type 508 err_transient_pointer 508 err_typespec_mismatch 508 err_uninitialized 508 err_unknown_pointer 508 err_user_aborted_simple_ authentication 508 err_write_during_query 508 err_write_permission_denied 508 general ObjectStore 501 handling 469 metaobject protocol 509 ObjectStore internal errors 494 parent 454 predefined 499 remote procedure call (RPC) mechanism 511 schema evolution 508 signaling 96 expand_global() os_dbutil, defined by 182 export_object() objectstore, defined by 60 F fault handler macros OS_END_FAULT_HANDLER 479 OS_END_TXN() 480 OS_ESTABLISH_FAULT_HANDLER 481 Field_variable os_member, defined by 240 file_db_pathname() os_dbutil, defined by 183 find() os_database_root, defined by 172 find_base_class() os_class_type, defined by 120 find_DLL_schema() objectstore, defined by 61 find_member_variable() os_class_type, defined by 120 526 find_namespace() os_mop, defined by 255 find_reference() os_Database_table, defined by 176 find_root() os_database, defined by 153 find_type() os_mop, defined by 255 os_schema, defined by 330 first() os_object_cursor, defined by 268 fixup() os_Type_fixup_loader, defined by 430 os_Type_loader, defined by 434 fixup_data os_Type_fixup_info, defined by 429 Float os_type, defined by 418 force_full_initialization() os_session, defined by 370 format_and_print_statistics() os_replicator_statistic_info, defined by 322 format_statistics() os_replicator_statistic_info, defined by 322 fragmentation os_cluster::set_size() 136 os_database::get_fragmentation() 157 os_database::set_size() 170 os_database::set_size_in_sectors() 171 fragmentationos_database::set_size()database fragmentationos_database::set_ size() 170 fragmentationos_database::set_size_in_ sectors()database fragmentationos_ database::set_size_in_sectors() 171 fragmentationos_dbutil, the class::ossize()database fragmentationos_dbutil, the class::ossize() 136, 187 free_memory() objectstore, defined by 61 freeze_schema_key() os_database, defined by 153 Function os_member, defined by 240 os_template, defined by 399 C++ A P I Reference Index os_type, defined by 418 G get() os_app_schema, defined by 102 os_cluster_with, defined by 140 os_comp_schema, defined by 147 os_database_schema, defined by 175 os_Database_table, defined by 176 os_DLL_finder, defined by 205 os_schema_handle, defined by 347 os_schema_info, defined by 350 os_Type_fixup_loader, defined by 430 os_Type_loader, defined by 434 get_abs_path() os_rawfs_entry, defined by 283 get_access() os_base_class, defined by 116 os_member, defined by 240 get_access_control() os_segment, defined by 352 get_access_of_get_os_typespec_function() os_class_type, defined by 121 get_address_space_generation_number() objectstore, defined by 62 get_affiliated_databases() os_database, defined by 154 get_affiliation_index_of() os_database, defined by 154 get_alignment() os_type, defined by 419 get_all() os_schema_handle, defined by 347 get_all_clusters() os_segment, defined by 353 get_all_databases() os_database, defined by 154 get_all_roots() os_database, defined by 155 get_all_segments() os_database, defined by 155 get_all_segments_and_permissions() os_database, defined by 155 get_all_servers() objectstore, defined by 62 get_all_sessions() os_session, defined by 370 get_allocated_virtual_base_classes() Release 6.3 os_class_type, defined by 121 get_allocation_strategy() objectstore, defined by 62 os_cluster, defined by 131 os_database, defined by 156 os_segment, defined by 353 get_always_check_server_connection_at_ commit() objectstore, defined by 63 get_application_info() os_database, defined by 156 os_segment, defined by 353 get_application_names() os_deadlock_exception, defined by 203 os_lock_timeout_exception, defined by 238 get_application_schema_handle() os_schema_handle, defined by 348 get_application_schema_pathname() objectstore, defined by 64 get_arg_list() os_function_type, defined by 227 get_arg_list_kind() os_function_type, defined by 227 get_args() os_template, defined by 399 os_template_instantiation, defined by 405 get_as_intervals() objectstore, defined by 64 get_asmarkers_useless() objectstore, defined by 64 get_auto_open_mode() objectstore, defined by 64 get_autoload_DLLs_function() objectstore, defined by 64 get_base_classes() os_class_type, defined by 121 get_base_member() os_access_modifier, defined by 97 get_cache_file() objectstore, defined by 65 get_cache_size() objectstore, defined by 65 get_call_linkage() os_member_function, defined by 244 get_char() os_typespec, defined by 440 get_char_value() os_literal, defined by 235 527 G get_class() os_base_class, defined by 116 get_class_kind() os_class_type, defined by 122 get_classes() os_schema, defined by 330 get_client_name() objectstore, defined by 65 os_dbutil, defined by 183 get_cluster() os_segment, defined by 353 get_clusters() os_segment, defined by 354 get_comment() os_segment, defined by 354 get_converted_size() os_str_conv, defined by 392 get_copy_member_functions() os_schema_install_options, defined by 351 get_creation_time() os_rawfs_entry, defined by 283 get_current() os_address_space_marker, defined by 99 os_cluster_cursor, defined by 138 os_export_id_cursor, defined by 220 os_segment_cursor, defined by 365 os_session, defined by 370 os_transaction, defined by 411 tix_handler, defined by 456 get_current_archive_file_name() os_archiver, defined by 104 get_database() os_Dumper_reference, defined by 208 os_notification, defined by 260 os_reference_cross_session, defined by 298 os_reference_internal, defined by 301 os_reference_protected_internal, defined by 306 os_soft_pointer32_base, defined by 374 os_soft_pointer64_base, defined by 378 os_subscription, defined by 397 get_database_key() os_reference_internal, defined by 301 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 374 os_soft_pointer64_base, defined by 378 get_database_number() 528 os_Dumper_reference, defined by 208 get_databases() os_server, defined by 368 get_decache_soft_pointers_after_address_ space_release() objectstore, defined by 65 get_default() os_segment_access, defined by 362 get_default_cluster() os_segment, defined by 354 get_default_partition_size() objectstore, defined by 65 get_default_segment() os_database, defined by 156 get_defining_class() os_member, defined by 240 get_dispatch_table_pointer_offset() os_class_type, defined by 122 get_dispatch_table_pointer_offset_other_ compiler() os_class_type, defined by 122 get_DLL_identifiers() os_schema_handle, defined by 348 os_schema_info, defined by 350 get_double() os_typespec, defined by 440 get_element_type() os_array_type, defined by 108 get_enclosing_class() os_type, defined by 419 get_enclosing_namespace() os_namespace, defined by 258 get_enclosing_object() os_schema_evolution, defined by 340 get_enum_literal() os_literal, defined by 235 get_enumerator() os_enum_type, defined by 215 get_enumerators() os_enum_type, defined by 215 get_evolved_schema() os_schema_evolution, defined by 340 get_evolved_schema_db_name() os_schema_evolution, defined by 340 get_exception() basic_undo, defined by 52 os_untranslatable_pointer_handler, defined by 448 C++ A P I Reference Index tix_handler, defined by 456 get_explanation() os_untranslatable_pointer_handler, defined by 448 get_explanation_level() os_schema_evolution, defined by 340 get_export_id() objectstore, defined by 66 get_export_ids() os_segment, defined by 355 get_failure_classes() os_mop, defined by 255 get_fault_addr() os_deadlock_exception, defined by 204 os_lock_timeout_exception, defined by 238 _get_fd() os_notification, defined by 260 get_fetch_policy() objectstore, defined by 66 os_cluster, defined by 131 os_database, defined by 156 os_segment, defined by 355 get_file_host_name() os_database, defined by 157 get_final_offset() os_untranslatable_pointer_handler, defined by 449 get_float() os_typespec, defined by 440 get_for_update() os_database_schema, defined by 175 get_fragmentation() os_database, defined by 157 get_function_kind() os_member_function, defined by 244 get_group_name() os_rawfs_entry, defined by 283 get_high() os_int64, defined by 231 os_unsigned_int64, defined by 446 get_host_name() os_database, defined by 158 os_server, defined by 368 get_hostnames() os_deadlock_exception, defined by 204 os_lock_timeout_exception, defined by 239 get_incremental_schema_installation() objectstore, defined by 67 Release 6.3 os_database, defined by 158 get_indirect_virtual_base_classes() os_class_type, defined by 122 get_instantiation() os_instantiated_class_type, defined by 230 get_int() os_typespec, defined by 440 get_kind() os_literal, defined by 235 os_member, defined by 240 os_notification, defined by 260 os_schema, defined by 330 os_template, defined by 399 os_template_actual_arg, defined by 401 os_template_formal_arg, defined by 403 os_type, defined by 419 get_kind_string() os_type, defined by 420 get_level() os_address_space_marker, defined by 99 get_link_host() os_rawfs_entry, defined by 283 get_link_path() os_rawfs_entry, defined by 283 get_literal() os_literal_template_actual_arg, defined by 237 get_location() os_notification, defined by 261 get_locator_file() objectstore, defined by 67 get_lock_option() objectstore, defined by 68 os_cluster, defined by 132 os_database, defined by 158 os_segment, defined by 356 get_lock_status() objectstore, defined by 68 get_lock_timeout() objectstore, defined by 68 get_lock_type() os_deadlock_exception, defined by 204 os_lock_timeout_exception, defined by 239 get_log_file() objectstore, defined by 69 get_logical_server_hostname() os_failover_server, defined by 222 get_long() 529 G os_typespec, defined by 441 get_long_double() os_typespec, defined by 441 get_low() os_int64, defined by 231 os_unsigned_int64, defined by 446 get_members() os_class_type, defined by 123 os_namespace, defined by 258 get_most_derived_class() os_class_type, defined by 123 get_n_clusters() os_segment, defined by 356 get_n_databases() os_database, defined by 159 os_server, defined by 368 get_n_roots() os_database, defined by 159 get_n_sectors() os_rawfs_entry, defined by 283 get_n_segments() os_database, defined by 159 get_n_servers() objectstore, defined by 69 get_n_sessions() os_session, defined by 371 get_name() os_class_type, defined by 125 os_database_root, defined by 172 os_enum_type, defined by 215 os_enumerator_literal, defined by 217 os_member_function, defined by 245 os_member_variable, defined by 250 os_named_indirect_type, defined by 257 os_namespace, defined by 258 os_pointer_literal, defined by 279 os_rawfs_entry, defined by 283 os_session, defined by 371 os_template_formal_arg, defined by 403 os_transaction, defined by 411 os_typespec, defined by 441 get_namespace() os_member_namespace, defined by 248 get_neutralized_classes() os_mop, defined by 255 get_new_segment_reference_policy() os_database, defined by 159 get_next() 530 os_address_space_marker, defined by 99 get_nt_registry_location() os_authentication, defined by 109 get_null_illegal_pointers() objectstore, defined by 69 os_cluster, defined by 132 os_database, defined by 159 os_segment, defined by 356 get_number() os_cluster, defined by 133 os_segment, defined by 357 get_number_elements() os_Fixup_dumper, defined by 225 get_number_of_elements() os_array_type, defined by 108 get_object_range() objectstore, defined by 69 get_object_to_fix() os_Fixup_dumper, defined by 225 get_offset() os_base_class, defined by 116 os_Dumper_reference, defined by 208 os_field_member_variable, defined by 224 os_member_variable, defined by 250 get_online_server_hostname() os_failover_server, defined by 222 get_open_database() os_reference_internal, defined by 302 os_soft_pointer32_base, defined by 374 os_soft_pointer64_base, defined by 378 get_open_mode() os_database, defined by 160 get_original_location() os_Type_info, defined by 432 get_os_deadlock_exception() tix_exception, defined by 454 get_os_int16() os_typespec, defined by 441 get_os_int64() os_typespec, defined by 441 get_os_int32() os_typespec, defined by 441 get_os_lock_timeout_exception() tix_exception, defined by 454 get_os_signed_int8() os_typespec, defined by 442 get_os_typespec() defined by user-defined class 440 C++ A P I Reference Index os_Reference<T>, defined by 293 os_Reference_cross_session<T>, defined by 295 os_Reference_protected<T>, defined by 304 get_os_unsigned_int16() os_typespec, defined by 442 get_os_unsigned_int32() os_typespec, defined by 442 get_os_unsigned_int64() os_typespec, defined by 442 get_os_unsigned_int8() os_typespec, defined by 442 get_page_size() objectstore, defined by 70 get_parent() os_transaction, defined by 411 get_path_to() os_database, defined by 160 get_path_to_member() os_schema_evolution, defined by 340 get_pathname() os_database, defined by 160 get_permission() os_rawfs_entry, defined by 283 get_pids() os_deadlock_exception, defined by 204 os_lock_timeout_exception, defined by 239 get_pointer() os_typespec, defined by 443 get_pointer_literal() os_literal, defined by 236 get_pointer_numbers() objectstore, defined by 70 get_pragmas() os_class_type, defined by 125 os_enum_type, defined by 215 get_previous() os_address_space_marker, defined by 99 get_primary_group() os_segment_access, defined by 362 get_propagate_on_commit() objectstore, defined by 70 get_reconnect_retry_interval() os_failover_server, defined by 222 get_reconnect_timeout() os_failover_server, defined by 222 get_related_class() os_relationship_member_variable, defined Release 6.3 by 311 get_related_member() os_relationship_member_variable, defined by 311 get_replacing_database() os_Type_info, defined by 432 get_replacing_location() os_Type_info, defined by 432 get_replacing_segment() os_Type_info, defined by 432 get_replica_ID() os_replicator_statistic_info, defined by 322 get_report() tix_handler, defined by 456 get_report0() tix_handler, defined by 456 get_required_DLL_identifiers() os_database, defined by 160 get_retain_persistent_addresses() objectstore, defined by 71 get_return_type() os_function_type, defined by 228 get_root() os_path_to_data, defined by 271 get_schema_database() os_database, defined by 161 os_schema_handle, defined by 348 get_schema_database_pathname() os_schema_handle, defined by 348 os_schema_info, defined by 350 get_schema_info() os_schema_handle, defined by 348 get_scope() os_transaction, defined by 411 get_sector_size() os_database, defined by 161 os_dbutil, defined by 183 get_segment() os_database, defined by 161 os_Dumper_reference, defined by 208 get_segment_number() os_Dumper_reference, defined by 208 get_segments() os_database, defined by 161 get_server_host() os_rawfs_entry, defined by 284 get_short() 531 G os_typespec, defined by 443 get_signed_char() os_typespec, defined by 443 get_signed_int() os_typespec, defined by 443 get_signed_integral_value() os_literal, defined by 236 get_signed_long() os_typespec, defined by 443 get_signed_short() os_typespec, defined by 443 get_simple_auth_ui() objectstore, defined by 71 get_size() os_base_class, defined by 117 os_field_member_variable, defined by 224 os_member_variable, defined by 250 os_type, defined by 420 get_size_as_base() os_class_type, defined by 125 get_source_cluster() os_untranslatable_pointer_handler, defined by 448 get_source_offset() os_untranslatable_pointer_handler, defined by 448 get_source_path() os_untranslatable_pointer_handler, defined by 448 get_source_position() os_class_type, defined by 125 os_enum_type, defined by 216 os_member_function, defined by 245 os_member_variable, defined by 251 os_named_indirect_type, defined by 257 get_specialization_name() os_Dumper_specialization, defined by 211 get_statistics() os_replicator, defined by 316 get_status() os_archiver, defined by 104 os_backup, defined by 110 os_recover, defined by 287 os_restore, defined by 323 os_schema_handle, defined by 348 get_storage_class() os_member_variable, defined by 251 get_string() 532 os_Dumper_reference, defined by 208 os_notification, defined by 261 os_pragma, defined by 282 os_type, defined by 420 get_suppress_invalid_hard_pointer_errors() objectstore, defined by 71 get_target_class() os_pointer_to_member_type, defined by 280 get_target_cluster() os_untranslatable_pointer_handler, defined by 448 get_target_export_id() os_untranslatable_pointer_handler, defined by 449 get_target_exported() os_untranslatable_pointer_handler, defined by 449 get_target_offset() os_untranslatable_pointer_handler, defined by 449 get_target_path() os_untranslatable_pointer_handler, defined by 449 get_target_segment() os_untranslatable_pointer_handler, defined by 449 get_target_type() os_anonymous_indirect_type, defined by 101 os_indirect_type, defined by 229 os_pointer_type, defined by 281 get_template() os_template_instantiation, defined by 405 get_thread_absorption() os_session, defined by 371 get_total_number_of_elements() os_path_to_data, defined by 272 get_transaction_max_retries() objectstore, defined by 71 get_transaction_priority() objectstore, defined by 71 get_transient_cluster() os_cluster, defined by 133 get_transient_database() os_database, defined by 161 get_transient_delete_function() objectstore, defined by 72 get_transient_schema() os_mop, defined by 256 C++ A P I Reference Index get_transient_segment() os_segment, defined by 357 get_type() os_Fixup_dumper, defined by 226 os_literal, defined by 236 os_member_function, defined by 245 os_member_type, defined by 249 os_member_variable, defined by 251 os_pointer_literal, defined by 279 os_rawfs_entry, defined by 284 os_template_value_formal, defined by 408 os_transaction, defined by 411 os_Type_info, defined by 433 os_type_template, defined by 436 os_type_template_actual_arg, defined by 437 os_typed_pointer_void, defined by 439 get_typespec() os_database_root, defined by 172 get_unevolved_schema() os_schema_evolution, defined by 341 get_union_variant() objectstore, defined by 72 get_unsigned_char() os_typespec, defined by 444 get_unsigned_int() os_typespec, defined by 444 get_unsigned_integral_value() os_literal, defined by 236 get_unsigned_long() os_typespec, defined by 444 get_unsigned_short() os_typespec, defined by 444 get_user_name() os_rawfs_entry, defined by 284 get_value() os_database_root, defined by 172 os_enumerator_literal, defined by 217 os_export_id, defined by 219 tix_handler, defined by 456 get_virtual_base_class_pointer_offset() os_base_class, defined by 117 get_wchar_t_value() os_literal, defined by 236 get_work_database() os_schema_evolution, defined by 341 global functions operator delete() 458 operator new() 459 Release 6.3 os_fetch() 461 os_fetch_address() 464 os_store() 465 H handle_xxx() os_untranslatable_pointer_handler, defined by 450 handling TIX exceptions 469 has_affiliation_to() os_database, defined by 162 has_array_components() os_path_to_data, defined by 272 has_constructor() os_class_type, defined by 126 has_destructor() os_class_type, defined by 126 has_dispatch_table() os_class_type, defined by 126 has_dispatch_table_other_compiler() os_class_type, defined by 126 has_exception() basic_undo, defined by 52 hash() os_reference_internal, defined by 302 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 374 os_soft_pointer64_base, defined by 378 hostof() os_dbutil, defined by 183 I ignore_locator_file() objectstore, defined by 72 illegal pointers 44 initial segment returning 156 setting 168 initialize() objectstore, defined by 72 os_compact, defined by 143 os_dbutil, defined by 183 os_mop, defined by 256 os_schema_evolution, defined by 341 initialize_for_sessions() objectstore, defined by 73 533 I initialize_object_metadata() os_mop, defined by 256 insert() os_Database_table, defined by 176 os_dynamic_extent, defined by 213 insert_required_DLL_identifier() os_database, defined by 162 insert_required_DLL_identifiers() os_database, defined by 162 os_schema_handle, defined by 349 install() os_database_schema, defined by 175 install_backrest_control_c_handler() os_dbutil, defined by 183 Instantiated_class os_type, defined by 420 Integer os_type, defined by 420 integrity control 44 introduces_virtual_functions() os_class_type, defined by 126 is_aborted() os_transaction, defined by 411 is_abstract() os_class_type, defined by 126 is_base_path() os_path_to_data, defined by 272 is_class_type() os_type, defined by 420 is_committed() os_transaction, defined by 412 is_const() os_anonymous_indirect_type, defined by 101 os_member_function, defined by 245 os_type, defined by 420 is_damaged_dope_repair_enabled() objectstore, defined by 75 is_db() os_rawfs_entry, defined by 284 is_deleted() os_cluster, defined by 133 os_segment, defined by 357 is_dir() os_rawfs_entry, defined by 284 is_DLL_schema_enabled() objectstore, defined by 75 is_empty() os_cluster, defined by 133 534 os_segment, defined by 357 is_failover() os_server, defined by 369 is_field() os_member_variable, defined by 251 is_forward_definition() os_class_type, defined by 126 is_ignored() os_Database_table, defined by 177 is_indirect_type() os_type, defined by 420 is_inline() os_member_function, defined by 245 is_integral_type() os_type, defined by 420 is_link() os_rawfs_entry, defined by 284 is_lock_contention() os_transaction, defined by 412 is_member_variable_path() os_path_to_data, defined by 272 is_multiple_session_mode() objectstore, defined by 75 is_null() os_export_id, defined by 219 os_string, defined by 394 is_open() os_database, defined by 162 is_open_multi_db_mvcc() os_database, defined by 162 is_open_mvcc() os_database, defined by 163 is_open_read_only() os_database, defined by 163 is_open_single_db_mvcc() os_database, defined by 163 is_open_update() os_database, defined by 163 is_overloaded() os_member_function, defined by 245 is_persistent() objectstore, defined by 75 os_class_type, defined by 126 os_member_variable, defined by 251 is_pointer_type() os_type, defined by 421 is_prepared() os_transaction, defined by 412 C++ A P I Reference Index is_PTOM() os_untranslatable_pointer_handler, defined by 450 is_pure_virtual() os_member_function, defined by 245 is_real_type() os_type, defined by 421 is_recognized() os_pragma, defined by 282 is_signed() os_integral_type, defined by 233 is_single_session_mode() objectstore, defined by 75 is_static() os_member_function, defined by 245 os_member_variable, defined by 251 is_template_class() os_class_type, defined by 126 is_transient_cluster() os_cluster, defined by 133 is_transient_database() os_database, defined by 163 is_transient_segment() os_segment, defined by 357 is_unassigned_contiguous_address_space() objectstore, defined by 76 is_unspecified() os_member, defined by 241 os_template, defined by 399 os_type, defined by 421 is_valid() os_Dumper_reference, defined by 209 is_virtual() os_base_class, defined by 117 os_member_function, defined by 246 is_volatile() os_anonymous_indirect_type, defined by 101 os_member_function, defined by 246 os_type, defined by 421 K Known os_function_type, defined by 227 L list_directory() os_dbutil, defined by 184 Release 6.3 load() os_reference_cross_session, defined by 298 os_reference_internal, defined by 302 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 374 os_soft_pointer64_base, defined by 378 os_Type_fixup_loader, defined by 431 os_Type_loader, defined by 435 load_DLL() objectstore, defined by 76 os_DLL_finder, defined by 205 local_path() os_path_to_data, defined by 272 lock_as_used objectstore, defined by 76 lock_cluster_read objectstore, defined by 77 lock_cluster_write objectstore, defined by 77 lock_database_read objectstore, defined by 77 lock_database_write objectstore, defined by 77 lock_page_write objectstore, defined by 78 lock_segment_read objectstore, defined by 78 lock_segment_write objectstore, defined by 78 Long_double os_type, defined by 421 lookup() os_database, defined by 163 lookup_DLL_symbol() objectstore, defined by 78 M macros, system-supplied 469 collections facility macros 469 DECLARE_EXCEPTION() 471 DEFINE_EXCEPTION() 472 OS_BEGIN_TXN() 474 OS_BEGIN_TXN_NAMED() 478 OS_END_FAULT_HANDLER 479 OS_END_TXN() 480 OS_ESTABLISH_FAULT_HANDLER 481 OS_MARK_SCHEMA_TYPE() 482 535 N OS_MARK_SCHEMA_TYPESPEC() 483 OS_REFERENCE_NOCLASS() 484 OS_REFERENCE_PROTECTED_NOCLASS() 485 OS_REPORT_DLL_LOAD_AND_UNLOAD() 486 OS_SCHEMA_DLL_ID() 487 OS_SCHEMA_INFO_NAME() 488 os_soft_pointer 489 OS_SOFT_POINTER32_NOCLASS() 490 OS_SOFT_POINTER64_NOCLASS() 491 TIX_END_HANDLE 492 TIX_EXCEPTION 493 TIX_HANDLE() 494 TIX_HANDLE_IF() 497 make() os_path_to_data, defined by 272 make_link() os_dbutil, defined by 184 -make_reachable_source_classes_persistent option to ossg OS_MARK_SCHEMA_TYPESPEC(), the macro 483 MAX_REGISTRY_STRING_LENGTH os_authentication::get_nt_registry_ location() 109 os_authentication::set_nt_registry_ location() 109 metaobject protocol 45 exceptions 509 metatypes 45 minor_subscript() os_path_to_data, defined by 272 mkdir() os_dbutil, defined by 185 more() os_object_cursor, defined by 268 multiversion concurrency control 45 multidatabase 165 open_multi_db_mvcc() 165 open_mvcc() 166 single-database 166 MVCC See multiversion concurrency control N name() os_path_to_data, defined by 272 Named_indirect os_type, defined by 421 Namespace 536 os_member, defined by 241 nested TIX exception handlers 494 nested transactions 475 network_servers_available() objectstore, defined by 79 new, the operator 458 next() os_cluster_cursor, defined by 138 os_export_id_cursor, defined by 220 os_object_cursor, defined by 268 os_segment_cursor, defined by 365 no_access os_segment_access, defined by 362 notify_immediate() os_notification, defined by 261 notify_on_commit() os_notification, defined by 262 number_of_blockers() os_deadlock_exception, defined by 204 os_lock_timeout_exception, defined by 239 O ObjectStore exceptions See exceptions objectstore, the class 54 acquire_address_space() 54 acquire_lock() 54 add_missing_dispatch_table_handler() 57 change_type() 58 clear_persistent_to_transient_ pointers() 58 embedded_server_available() 59 enable_damaged_dope_repair() 59 enable_DLL_schema() 60 export_object() 60 find_DLL_schema() 61 free_memory() 61 get_address_space_generation_number() 62 get_all_servers() 62 get_always_check_server_connection_at_ commit() 63 get_application_schema_pathname() 64 get_as_intervals() 64 get_asmarkers_useless() 64 get_auto_open_mode() 64 get_autoload_DLLs_function() 64 get_cache_file() 65 get_cache_size() 65 C++ A P I Reference Index get_client_name() 65 get_decache_soft_pointers_after_address_ space_release() 65 get_default_partition_size() 65 get_export_id() 66 get_incremental_schema_installation() 67 get_locator_file() 67 get_lock_status() 68 get_lock_timeout() 68 get_log_file() 69 get_n_servers() 69 get_null_illegal_pointers() 69 get_object_range() 69 get_page_size() 70 get_pointer_numbers() 70 get_propagate_on_commit() 70 get_retain_persistent_addresses() 71 get_simple_auth_ui() 71 get_suppress_invalid_hard_pointer_ errors() 71 get_transaction_priority() 71 get_transient_delete_function() 72 get_union_variant() 72 ignore_locator_file() 72 initialize() 72 initialize_for_sessions() 73 is_damaged_dope_repair_enabled() 75 is_DLL_schema_enabled() 75 is_multiple_session_mode() 75 is_persistent() 75 is_single_session_mode() 75 is_unassigned_contiguous_address_ space() 76 load_DLL() 76 lock_as_used 76 lock_cluster_read 77 lock_cluster_write 77 lock_database_read 77 lock_database_write 77 lock_page_write 78 lock_segment_read 78 lock_segment_write 78 lookup_DLL_symbol() 78 network_servers_available() 79 own_page_write 79 propagate_log() 79 release_cleared_persistent_to_transient_ pointers() 79 Release 6.3 release_maintenance() 80 release_major() 80 release_minor() 80 release_name() 81 release_persistent_addresses() 81 reset_persistent_addresses() 81 retain_persistent_addresses() 81 return_all_pages() 81 return_memory() 81 set_allocation_strategy() 82 set_always_check_server_connection_at_ commit() 82 set_always_null_illegal_pointers() 83 set_application_schema_pathname() 83 set_asmarkers_useless() 83 set_auto_open_mode() 83 set_autoload_DLLs_function() 83 set_cache_file() 85 set_cache_size() 85 set_client_name() 85 set_current_schema_key() 86 set_decache_soft_pointers_after_address_ space_release() 86 set_default_address_space_partition_ size() 87 set_fetch_policy() 87 set_handle_transient_faults() 88 set_incremental_schema_installation() 88 set_locator_file() 88 set_lock_option() 88 set_lock_timeout() 89 set_log_file() 89 set_null_illegal_pointers() 90 set_pathname_encoding() 90 set_persistent_to_transient_pointer() 90 set_propagate_on_commit() 91 set_reserve_as_mode() 91 set_retain_persistent_addresses() 91 set_simple_auth_ui() 92 set_suppress_invalid_hard_pointer_ errors() 92 set_transaction_max_retries() 92 set_transaction_priority() 92 set_transient_delete_function() 93 set_union_variant() 94 shutdown() 94 unload_DLL() 94 which_product() 94 537 O objectstore_exception, the class 96 signal() 96 vsignal() 96 of() os_address_space_marker, defined by 99 os_cluster, defined by 133 os_database, defined by 163 os_segment, defined by 357 os_session, defined by 371 open() os_database, defined by 164 open_multi_db_mvcc() os_database, defined by 165 open_mvcc() os_database, defined by 165 operator !() os_Dumper_reference, defined by 210 os_Reference<T>, defined by 294 os_reference_cross_session, defined by 298 os_reference_internal, defined by 302 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 375 os_soft_pointer64_base, defined by 379 operator !=() os_Dumper_reference, defined by 209 os_reference_cross_session, defined by 298 os_reference_internal, defined by 302 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 375 os_soft_pointer64_base, defined by 379 operator ()() os_Dumper_specialization, defined by 211 os_Planning_action, defined by 278 os_Type_fixup_loader, defined by 431 os_Type_loader, defined by 435 operator <() os_Dumper_reference, defined by 209 os_reference_cross_session, defined by 299 os_reference_internal, defined by 302 os_reference_protected_internal, defined by 308 os_soft_pointer32_base, defined by 375 os_soft_pointer64_base, defined by 379 operator <=() os_Dumper_reference, defined by 210 os_reference_cross_session, defined by 299 538 os_reference_internal, defined by 303 os_reference_protected_internal, defined by 308 os_soft_pointer32_base, defined by 376 os_soft_pointer64_base, defined by 380 operator =() os_Dumper_reference, defined by 209 os_rawfs_entry, defined by 284 os_Reference<T>, defined by 294 os_reference_cross_session, defined by 298 os_Reference_cross_session<T>, defined by 295 os_Reference_protected<T>, defined by 304 os_segment_access, defined by 363 os_soft_pointer32<T>, defined by 382 os_soft_pointer64<T>, defined by 385 os_string, defined by 394 operator ==() os_Dumper_reference, defined by 209 os_export_id, defined by 219 os_reference_cross_session, defined by 298 os_reference_internal, defined by 302 os_reference_protected_internal, defined by 307 os_soft_pointer32_base, defined by 375 os_soft_pointer64_base, defined by 379 os_typespec, defined by 444 operator ->() os_Reference<T>, defined by 294 os_Reference_cross_session<T>, defined by 296 os_Reference_protected<T>, defined by 305 os_soft_pointer32<T>, defined by 382 os_soft_pointer64<T>, defined by 385 operator >() os_Dumper_reference, defined by 209 os_reference_cross_session, defined by 299 os_reference_internal, defined by 303 os_reference_protected_internal, defined by 308 os_soft_pointer32_base, defined by 375 os_soft_pointer64_base, defined by 379 operator >=() os_Dumper_reference, defined by 210 os_reference_cross_session, defined by 299 os_reference_internal, defined by 303 os_reference_protected_internal, defined by 308 C++ A P I Reference Index os_soft_pointer32_base, defined by 376 os_soft_pointer64_base, defined by 380 operator const char*() os_string, defined by 394 operator const os_access_modifier&() os_member, defined by 241 operator const os_anonymous_indirect_ type&() os_type, defined by 421 operator const os_app_schema&() os_schema, defined by 330 operator const os_array_type&() os_type, defined by 422 operator const os_class_type&() os_type, defined by 422 operator const os_comp_schema&() os_schema, defined by 330 operator const os_database_schema&() os_schema, defined by 331 operator const os_enum_type&() os_type, defined by 422 operator const os_field_member_variable&() os_member, defined by 241 os_member_variable, defined by 252 operator const os_function_type&() os_type, defined by 422 operator const os_instantiated_class_ type&() os_type, defined by 422 operator const os_integral_type&() os_type, defined by 422 operator const os_literal_template_actual_ arg&() os_template_actual_arg, defined by 401 operator const os_member_function&() os_member, defined by 241 operator const os_member_type&() os_member, defined by 241 operator const os_member_variable&() os_member, defined by 241 operator const os_named_indirect_type&() os_type, defined by 422 operator const os_pointer_to_member_type&() os_type, defined by 422 operator const os_pointer_type&() os_type, defined by 423 operator const os_real_type&() os_type, defined by 423 Release 6.3 operator const os_reference_type&() os_type, defined by 423 operator const os_relationship_member_ variable&() os_member, defined by 242 os_member_variable, defined by 252 operator const os_template_type_formal&() os_template_formal_arg, defined by 403 operator const os_template_value_formal&() os_template_formal_arg, defined by 403 operator const os_type_template&() os_template, defined by 399 operator const os_type_template_actual_ arg&() os_template_actual_arg, defined by 401 operator const os_type_type&() os_type, defined by 423 operator const os_void_type&() os_type, defined by 423 operator delete() os_session, defined by 371 operator delete(), the global function 458 operator new(), the global function 459 operator os_access_modifier&() os_member, defined by 242 operator os_anonymous_indirect_type&() os_type, defined by 423 operator os_app_schema&() os_schema, defined by 331 operator os_array_type&() os_type, defined by 423 operator os_class_type&() os_type, defined by 423 operator os_comp_schema&() os_schema, defined by 331 operator os_database_schema&() os_schema, defined by 331 operator os_enum_type&() os_type, defined by 424 operator os_field_member_variable&() os_member, defined by 242 os_member_variable, defined by 252 operator os_function_type&() os_type, defined by 424 operator os_instantiated_class_type&() os_class_type, defined by 127 os_type, defined by 424 operator os_integral_type&() 539 O os_type, defined by 424 operator os_literal_template_actual_arg&() os_template_actual_arg, defined by 401 operator os_member_function&() os_member, defined by 242 operator os_member_type&() os_member, defined by 242 operator os_member_variable&() os_member, defined by 242 operator os_named_indirect_type&() os_type, defined by 424 operator os_pointer_to_member_type&() os_type, defined by 424 operator os_pointer_type&() os_type, defined by 424 operator os_real_type&() os_type, defined by 424 operator os_reference_type&() os_type, defined by 425 operator os_relationship_member_variable&() os_member, defined by 242 os_member_variable, defined by 252 operator os_template_type_formal&() os_template_formal_arg, defined by 403 operator os_template_value_formal&() os_template_formal_arg, defined by 403 operator os_type_template&() os_template, defined by 400 operator os_type_template_actual_arg&() os_template_actual_arg, defined by 402 operator os_type_type&() os_type, defined by 425 operator os_void_type&() os_type, defined by 425 operator T*() os_Reference<T>, defined by 294 os_Reference_cross_session<T>, defined by 295 os_Reference_protected<T>, defined by 305 os_soft_pointer32<T>, defined by 382 os_soft_pointer64<T>, defined by 385 operator void*() os_Dumper_reference, defined by 209 os_typed_pointer_void, defined by 439 os_access_modifier, the class 97 create() 97 get_base_member() 97 set_base_member() 97 540 ~os_address_space_marker() os_address_space_marker, defined by 100 os_address_space_marker() os_address_space_marker, defined by 99 os_address_space_marker, the class 98 get_current() 99 get_level() 99 get_next() 99 get_previous() 99 of() 99 ~os_address_space_marker() 100 os_address_space_marker() 99 release() 99 retain() 100 os_allocation_strategy_least_space enumerator 63 os_allocation_strategy_least_wait enumerator 63 os_anonymous_indirect_type, the class 101 create() 101 get_target_type() 101 is_const() 101 is_volatile() 101 set_is_const() 101 set_is_volatile() 101 os_app_schema, the class 102 get() 102 os_application_schema_info, the class 103 os_archiver() os_archiver, defined by 104 os_archiver, the class 104 ~os_archiver() 104 add_db_to_archive() 104 change_time_interval() 104 get_current_archive_file_name() 104 get_status() 104 os_archiver() 104 remove_db_from_archive() 105 start_archiver() 105 stop_archiver() 105 take_a_snapshot() 105 os_archiver_options() os_archiver_options, defined by 107 os_archiver_options, the class 106 ~os_archiver_options() 107 os_archiver_options() 107 reset() 107 os_array_type, the class 108 C++ A P I Reference Index create() 108 get_element_type() 108 get_number_of_elements() 108 set_element_type() 108 set_number_of_elements() 108 os_authentication, the class 109 get_nt_registry_location() 109 os_backup() os_backup, defined by 110 os_backup, the class 110 ~os_backup() 110 get_status() 110 os_backup() 110 start_and_run_backup() 110 start_backup() 111 stop_backup() 111 os_backup_options() os_backup_options, defined by 115 os_backup_options, the class 112 ~os_backup_options() 115 os_backup_options() 115 reset() 115 os_base_class, the class 116 create() 116 get_access() 116 get_class() 116 get_offset() 116 get_size() 117 get_virtual_base_class_pointer_ offset() 117 is_virtual() 117 Private 117 Protected 117 Public 117 set_access() 117 set_class() 117 set_offset() 118 set_virtual_base_class_no_pointer() 118 set_virtual_base_class_pointer_ offset() 118 set_virtuals_redefined() 118 virtual_base_class_has_pointer() 118 virtuals_redefined() 118 OS_BEGIN_TXN(), the macro 474 OS_BEGIN_TXN_NAMED(), the macro 478 os_boolean 47 OS_CACHE_FILE environment variable objectstore::set_cache_file 85 Release 6.3 os_class_type, the class 119 Anonymous_union 119 Class 119 create() 119 declares_get_os_typespec_function() 120 defines_virtual_functions() 120 find_base_class() 120 find_member_variable() 120 get_access_of_get_os_typespec_ function() 121 get_allocated_virtual_base_classes() 121 get_base_classes() 121 get_class_kind() 122 get_dispatch_table_pointer_offset() 122 get_dispatch_table_pointer_offset_other_ compiler() 122 get_indirect_virtual_base_classes() 122 get_members() 123 get_most_derived_class() 123 get_name() 125 get_pragmas() 125 get_size_as_base() 125 get_source_position() 125 has_constructor() 126 has_destructor() 126 has_dispatch_table() 126 has_dispatch_table_other_compiler() 126 introduces_virtual_functions() 126 is_abstract() 126 is_forward_definition() 126 is_persistent() 126 is_template_class() 126 operator os_instantiated_class_ type&() 127 set_access_of_get_os_typespec_ function() 127 set_base_classes() 127 set_class_kind() 127 set_declares_get_os_typespec_ function() 127 set_defines_virtual_functions() 127 set_dispatch_table_pointer_offset() 128 set_has_constructor() 128 set_has_destructor() 128 set_indirect_virtual_base_classes() 128 set_introduces_virtual_functions() 128 set_is_abstract() 128 set_is_forward_definition() 128 541 O set_is_persistent() 128 set_members() 128 set_name() 129 set_pragmas() 129 set_source_position() 129 Union 129 os_class_typeStruct 129 os_close_database, the class 130 os_cluster, the class 131 database_of() 131 destroy() 131 get_allocation_strategy() 131 get_fetch_policy() 131 get_lock_option() 132 get_null_illegal_pointers() 132 get_number() 133 get_transient_cluster() 133 is_deleted() 133 is_empty() 133 is_transient_cluster() 133 of() 133 release_pointer() 133 retain_pointer() 134 return_memory() 134 segment_of() 134 session_of() 134 set_allocation_strategy() 135 set_fetch_policy() 135 set_lock_option() 135 set_null_illegal_pointers() 136 set_size() 136 size() 137 with() 137 os_cluster_cursor() os_cluster, defined by 138 os_cluster_cursor, the class 138 get_current() 138 next() 138 os_cluster_cursor() 138 reset() 139 os_cluster_with, the class 140 get() 140 os_comp_schema, the class 147 get() 147 os_compact, the class 141 augment_cluster_split_avoidance() 141 augment_post_compact_transformers() 141 compact() 142 542 initialize() 143 set_address_space_release_interval() 144 set_avoid_page_boundary() 144 set_explanation_level() 144 set_malloc_size() 145 set_maplet_size() 145 set_maximum_cluster_size() 145 set_maximum_memory_size() 145 shutdown() 146 os_database, the class 148 affiliate() 148 change_affiliation() 149 change_schema_key() 149 close() 150 create() 150 create_root() 152 create_segment() 152 destroy() 153 find_root() 153 freeze_schema_key() 153 get_affiliated_databases() 154 get_affiliation_index_of() 154 get_all_databases() 154 get_all_roots() 155 get_all_segments() 155 get_all_segments_and_permissions() 155 get_allocation_strategy() 156 get_application_info() 156 get_default_segment() 156 get_fetch_policy() 156 get_file_host_name() 157 get_fragmentation() 157 get_host_name() 158 get_incremental_schema_ installation() 158 get_lock_option() 158 get_n_databases() 159 get_n_roots() 159 get_n_segments() 159 get_new_segment_reference_policy() 159 get_null_illegal_pointers() 159 get_open_mode() 160 get_path_to() 160 get_pathname() 160 get_required_DLL_identifiers() 160 get_schema_database() 161 get_sector_size() 161 get_segment() 161 C++ A P I Reference Index get_segments() 161 get_transient_database() 161 has_affiliation_to() 162 insert_required_DLL_identifier() 162 insert_required_DLL_identifiers() 162 is_open() 162 is_open_multi_db_mvcc() 162 is_open_mvcc() 163 is_open_read_only() 163 is_open_single_db_mvcc() 163 is_open_update() 163 is_transient_database() 163 lookup() 163 of() 163 open() 164 open_multi_db_mvcc() 165 open_mvcc() 165 release_pointer() 166 remove_required_DLL_identifier() 167 retain_pointer() 167 return_memory() 167 session_of() 167 set_allocation_strategy() 168 set_application_info() 168 set_default_segment() 168 set_fetch_policy() 169 set_incremental_schema_ installation() 169 set_lock_option() 169 set_new_segment_reference_policy() 170 set_null_illegal_pointers() 170 set_schema_database() 170 set_size() 170 set_size_in_sectors() 171 size() 171 size_in_sectors() 171 time_created() 171 ~os_database_root() os_database_root, defined by 174 os_database_root, the class 172 destroy() 172 find() 172 get_name() 172 get_typespec() 172 get_value() 172 ~os_database_root() 174 release_pointer() 173 retain_pointer() 173 Release 6.3 set_value() 174 os_database_schema, the class 175 get() 175 get_for_update() 175 install() 175 os_Database_table, the class 176 find_reference() 176 get() 176 insert() 176 is_ignored() 177 os_dbcontrol_options, the class argument to osdbcontrol() 185 os_dbutil, the class 178 chgrp() 178 chmod() 178 chown() 178 close_all_connections() 179 close_all_server_connections() 179 close_server_connection() 179 cmgr_remove_file() 179 cmgr_shutdown() 179 cmgr_stat() 179 compare_schemas() 181 copy_database() 182 disk_free() 182 expand_global() 182 file_db_pathname() 183 get_client_name() 183 get_sector_size() 183 hostof() 183 initialize() 183 install_backrest_control_c_handler() 183 list_directory() 184 make_link() 184 mkdir() 185 ossize() 186 osverifydb() 187 osverifydb_one_segment() 188 rehost_all_links() 189 rehost_link() 189 remove() 190 rename() 190 rmdir() 190 set_application_schema_path() 190 set_client_name() 191 split_pathname() 191 start_backrest_logging() 191 stat() 192 543 O stop_backrest_logging() 192 svr_checkpoint() 192 svr_client_kill() 192 svr_debug() 193 svr_machine() 193 svr_ping() 194 svr_shutdown() 194 svr_stat() 194 os_deadlock_exception, the class 203 get_application_names() 203 get_fault_addr() 204 get_hostnames() 204 get_lock_type() 204 get_pids() 204 number_of_blockers() 204 OS_DEF_EXCEPT_ACTION environment variable objectstore_exception::signal() 96 objectstore_exception::vsignal() 96 os_DLL_finder, the class 205 equal_DLL_identifiers() 205 equal_DLL_identifiers_same_prefix() 205 get() 205 load_DLL() 205 register_() 205 unregister() 205 os_DLL_schema_info, the class 206 add_DLL_identifier() 206 DLL_loaded() 206 DLL_unloaded() 207 os_Dumper_reference() os_Dumper_reference, defined by 210 os_Dumper_reference, the class 208 get_database() 208 get_database_number() 208 get_offset() 208 get_segment() 208 get_segment_number() 208 get_string() 208 is_valid() 209 operator !() 210 operator !=() 209 operator <() 209 operator <=() 210 operator =() 209 operator ==() 209 operator >() 209 operator >=() 210 operator void*() 209 544 os_Dumper_reference() 210 resolve() 210 os_Dumper_specialization, the class 211 get_specialization_name() 211 operator ()() 211 should_use_default_constructor() 212 ~os_dynamic_extent() os_dynamic_extent, defined by 214 os_dynamic_extent() os_dynamic_extent, defined by 213 os_dynamic_extent, the class 213 insert() 213 ~os_dynamic_extent() 214 os_dynamic_extent() 213 remove() 214 OS_END_FAULT_HANDLER, the macro 479 OS_END_TXN(), the macro 480 os_enum_type, the class 215 create() 215 get_enumerator() 215 get_enumerators() 215 get_name() 215 get_pragmas() 215 get_source_position() 216 set_enumerators() 216 set_name() 216 set_pragmas() 216 set_source_position() 216 os_enumerator_literal, the class 217 create() 217 get_name() 217 get_value() 217 set_name() 217 set_value() 217 OS_ESTABLISH_FAULT_HANDLER, the macro 481 os_evolve_subtype_fun_binding() os_evolve_subtype_fun_binding, defined by 218 os_evolve_subtype_fun_binding, the class 218 os_evolve_subtype_fun_binding() 218 os_export_id, the class 219 get_value() 219 is_null() 219 operator ==() 219 ~os_export_id_cursor() os_export_id_cursor, defined by 221 os_export_id_cursor() os_export_id_cursor, defined by 220 C++ A P I Reference Index os_export_id_cursor, the class 220 get_current() 220 next() 220 ~os_export_id_cursor() 221 os_export_id_cursor() 220 reset() 221 os_failover_server, the class 222 get_logical_server_hostname() 222 get_online_server_hostname() 222 get_reconnect_retry_interval() 222 get_reconnect_timeout() 222 set_reconnect_timeout_and_interval() 223 os_fetch(), the global function 461 os_fetch_address(), the global function 464 os_fetch_cluster enumerator 67 os_fetch_page enumerator 67 os_fetch_stream enumerator 67 os_field_member_variable, the class 224 create() 224 get_offset() 224 get_size() 224 set_size() 224 ~os_Fixup() os_Fixup_dumper, defined by 226 os_Fixup_dumper() os_Fixup_dumper, defined by 226 os_Fixup_dumper, the class 225 dump_info() 225 duplicate() 225 get_number_elements() 225 get_object_to_fix() 225 get_type() 226 ~os_Fixup() 226 os_Fixup_dumper() 226 os_function_type, the class 227 create() 227 equal_signature() 227 get_arg_list() 227 get_arg_list_kind() 227 get_return_type() 228 Known 227 set_arg_list() 228 set_arg_list_kind() 228 set_return_type() 228 Unknown 227 Variable 227 os_indirect_type, the class 229 get_target_type() 229 Release 6.3 set_target_type() 229 os_instantiated_class_type, the class 230 create() 230 get_instantiation() 230 set_instantiation() 230 os_int64() os_int64, defined by 231 os_int64, the class 231 get_high() 231 get_low() 231 os_int64() 231 sprint() 231 os_integral_type, the class 232 create() 232 create_defaulted_char() 232 create_int() 232 create_long() 232 create_short() 233 create_signed_char() 233 create_unsigned_char() 233 is_signed() 233 os_int16 typespec for 441 os_int64 47 typespec for 441 os_int32 47 typespec for 441 os_literal, the class 234 create_char() 234 create_enum_literal() 234 create_pointer_literal() 234 create_signed_char() 234 create_signed_int() 234 create_signed_long() 234 create_signed_short() 234 create_unsigned_char() 234 create_unsigned_int() 235 create_unsigned_long() 235 create_unsigned_short() 235 create_wchar_t() 235 get_char_value() 235 get_enum_literal() 235 get_kind() 235 get_pointer_literal() 236 get_signed_integral_value() 236 get_type() 236 get_unsigned_integral_value() 236 get_wchar_t_value() 236 545 O os_literal_template_actual_arg, the class 237 create() 237 get_literal() 237 set_literal() 237 os_lock_timeout exception 89 os_lock_timeout_exception, the class 238 get_application_names() 238 get_fault_addr() 238 get_hostnames() 239 get_lock_type() 239 get_pids() 239 number_of_blockers() 239 OS_LOG_FILE environment variable and objectstore::set_log_file() 89 OS_MARK_SCHEMA_TYPE(), the macro 482 OS_MARK_SCHEMA_TYPESPEC(), the macro 483 os_member, the class 240 Access_modifier 240 Field_variable 240 Function 240 get_access() 240 get_defining_class() 240 get_kind() 240 is_unspecified() 241 Namespace 241 operator const os_access_modifier&() 241 operator const os_field_member_ variable&() 241 operator const os_member_function&() 241 operator const os_member_type&() 241 operator const os_member_variable&() 241 operator const os_relationship_member_ variable&() 242 operator os_access_modifier&() 242 operator os_field_member_variable&() 242 operator os_member_function&() 242 operator os_member_type&() 242 operator os_member_variable&() 242 operator os_relationship_member_ variable&() 242 Private 242 Protected 243 Public 243 Relationship 243 set_access() 243 Type 243 Variable 243 os_member_function, the class 244 546 create() 244 get_call_linkage() 244 get_function_kind() 244 get_name() 245 get_source_position() 245 get_type() 245 is_const() 245 is_inline() 245 is_overloaded() 245 is_pure_virtual() 245 is_static() 245 is_virtual() 246 is_volatile() 246 set_call_linkage() 246 set_is_const() 246 set_is_inline() 246 set_is_overloaded() 246 set_is_pure_virtual() 246 set_is_static() 246 set_is_virtual() 247 set_is_volatile() 247 set_name() 247 set_source_position() 247 set_type() 247 os_member_namespace, the class 248 create() 248 get_namespace() 248 set_namespace() 248 os_member_type, the class 249 create() 249 get_type() 249 set_type() 249 os_member_variable, the class 250 create() 250 get_name() 250 get_offset() 250 get_size() 250 get_source_position() 251 get_storage_class() 251 get_type() 251 is_field() 251 is_persistent() 251 is_static() 251 operator const os_field_member_ variable&() 252 operator const os_relationship_member_ variable&() 252 operator os_field_member_variable&() 252 C++ A P I Reference Index operator os_relationship_member_ variable&() 252 Persistent 251 Regular 251 set_name() 252 set_offset() 252 set_source_position() 252 set_storage_class() 253 set_type() 253 Static 251 os_mop, the class 254 bind() 254 copy_classes() 255 current() 255 find_namespace() 255 find_type() 255 get_failure_classes() 255 get_neutralized_classes() 255 get_transient_schema() 256 initialize() 256 initialize_object_metadata() 256 reset() 256 os_named_indirect_type, the class 257 create() 257 get_name() 257 get_source_position() 257 set_name() 257 set_source_position() 257 os_namespace, the class 258 create() 258 get_enclosing_namespace() 258 get_members() 258 get_name() 258 set_enclosing_namespace() 258 set_members() 258 set_name() 259 os_notification() os_notification, defined by 263 os_notification, the class 260 assign() 260 get_database() 260 _get_fd() 260 get_kind() 260 get_location() 261 get_string() 261 notify_immediate() 261 notify_on_commit() 262 os_notification() 263 Release 6.3 queue_status() 263 receive() 264 set_queue_size() 265 subscribe() 265 unsubscribe() 266 ~os_object_cursor() os_object_cursor, defined by 270 os_object_cursor() os_object_cursor, defined by 269 os_object_cursor, the class 268 current() 268 first() 268 more() 268 next() 268 ~os_object_cursor() 270 os_object_cursor() 269 release_address_space() 269 reset() 269 set() 270 os_path_to_data, the class 271 add() 271 bit_offset() 271 byte_offset() 271 get_root() 271 get_total_number_of_elements() 272 has_array_components() 272 is_base_path() 272 is_member_variable_path() 272 local_path() 272 make() 272 minor_subscript() 272 name() 272 outer_collocated_path() 273 outer_path() 273 pop() 273 to_bit_field() 273 to_dope() 273 to_static_member() 273 to_subscript() 273 type() 273 unique_name() 273 os_pathname_and_segment_number() os_pathname_and_segment_number, defined by 275 os_pathname_segment_cluster, defined by 276 os_pathname_and_segment_number, the class 275 database_pathname 275 os_pathname_and_segment_number() 275 547 O segment_number 275 os_pathname_segment_cluster, the class 276 cluster_number 276 database_pathname 276 os_pathname_and_segment_number() 276 segment_number 276 os_persistent_to_transient_pointer_manager, the class release() 277 os_persistent_to_transient_pointer_manger, the class 277 os_Planning_action, the class 278 operator ()() 278 os_pointer_literal, the class 279 create() 279 get_name() 279 get_type() 279 set_name() 279 set_type() 279 os_pointer_to_member_type, the class 280 create() 280 get_target_class() 280 set_target_class() 280 os_pointer_type, the class 281 create() 281 get_target_type() 281 set_target_type() 281 os_pragma, the class 282 create() 282 get_string() 282 is_recognized() 282 ~os_rawfs_entry() os_rawfs_entry, defined by 285 os_rawfs_entry() os_rawfs_entry, defined by 284 os_rawfs_entry, the class 283 get_abs_path() 283 get_creation_time() 283 get_group_name() 283 get_link_host() 283 get_link_path() 283 get_n_sectors() 283 get_name() 283 get_permission() 283 get_server_host() 284 get_type() 284 get_user_name() 284 is_db() 284 548 is_dir() 284 is_link() 284 operator =() 284 ~os_rawfs_entry() 285 os_rawfs_entry() 284 OSU_DATABASE 285 OSU_DIRECTORY 285 OSU_LINK 285 os_real_type, the class 286 create() 286 create_double() 286 create_float() 286 create_long_double() 286 os_recover() os_recover, defined by 287 os_recover, the class ~os_recover() 287 get_status() 287 os_recover() 287 start_and_run_recover() 287 start_recover() 288 stop_recover() 288 os_recover_options() os_recover_options, defined by 292 os_recover_options, the class 289 ~os_recover_options() 292 os_recover_options() 292 reset() 292 os_Reference() os_Reference<T>, defined by 294 os_Reference<T>, the class 293 get_os_typespec() 293 operator !() 294 operator =() 294 operator ->() 294 operator T*() 294 os_Reference() 294 resolve() 294 os_Reference_cross_session() os_Reference_cross_session<T>, defined by 296 ~os_reference_cross_session() os_reference_cross_session, defined by 299 os_reference_cross_session() os_reference_cross_session, defined by 299 os_reference_cross_session, the class 297 dump() 298 get_database() 298 C++ A P I Reference Index load() 298 operator !() 298 operator !=() 298 operator <() 299 operator <=() 299 operator =() 298 operator ==() 298 operator >() 299 operator >=() 299 ~os_reference_cross_session() 299 os_reference_cross_session() 299 resolve() 300 os_Reference_cross_session<T>, the class 295 get_os_typespec() 295 operator =() 295 operator ->() 296 operator T*() 295 os_Reference_cross_session() 296 resolve() 296 ~os_reference_internal() os_reference_internal, defined by 303 os_reference_internal, the class 301 dump() 301 get_database() 301 get_database_key() 301 get_open_database() 302 hash() 302 load() 302 operator !() 302 operator !=() 302 operator <() 302 operator <=() 303 operator ==() 302 operator >() 303 operator >=() 303 ~os_reference_internal() 303 resolve() 303 OS_REFERENCE_NOCLASS(), the macro 484 os_Reference_protected() os_Reference_protected<T>, defined by 305 os_Reference_protected<T>, the class 304 get_os_typespec() 304 operator =() 304 operator ->() 305 operator T*() 305 os_Reference_protected() 305 resolve() 305 ~os_reference_protected_internal() Release 6.3 os_reference_protected_internal, defined by 308 os_reference_protected_internal, the class 306 dump() 306 get_database() 306 get_database_key() 307 hash() 307 load() 307 operator !() 307 operator !=() 307 operator <() 308 operator <=() 308 operator ==() 307 operator >() 308 operator >=() 308 ~os_reference_protected_internal() 308 resolve() 309 OS_REFERENCE_PROTECTED_NOCLASS(), the macro 485 os_reference_type, the class 310 create() 310 os_relationship_member_variable, the class 311 get_related_class() 311 get_related_member() 311 os_release_cluster_pointer, the class 312 os_release_database_pointer, the class 313 os_release_root_pointer, the class 314 os_release_segment_pointer, the class 315 ~os_replicator() os_replicator, defined by 316 os_replicator() os_replicator, defined by 316 os_replicator, the class 316 change_time_interval() 316 get_statistics() 316 get_status() 317 os_replicator() 316 reset_statistics() 317 start_replicator() 317 stop_replicator() 317 ~os_replicator_options() os_replicator_options, defined by 320 os_replicator_options() os_replicator_options, defined by 320 os_replicator_options, the class 318 os_replicator_options() 320 reset() 320 ~os_replicator_statistic_info() 549 O os_replicator_statistic_info, defined by 322 os_replicator_statistic_info() os_replicator_statistic_info, defined by 321 os_replicator_statistic_info, the class format_and_print_statistics() 322 format_statistics() 322 get_replica_ID() 322 os_replicator_statistic_info() 321 OS_REPORT_DLL_LOAD_AND_UNLOAD(), the macro 486 os_restore() os_restore, defined by 323 os_restore, the class 287, 323 ~os_restore() 323 get_status() 323 os_restore() 323 start_and_run_restore() 324 start_restore() 324 stop_restore() 324 os_restore_options() os_restore_options, defined by 328 os_restore_options, the class 325 ~os_restore_options() 328 os_restore_options() 328 reset() 328 os_retain_address() os_retain_address, defined by 329 os_retain_address, the class 329 os_retain_address() 329 release() 329 retaining() 329 set_retain() 329 os_schema, the class 330 Application_schema 330 Compilation_schema 330 Database_schema 330 find_type() 330 get_classes() 330 get_kind() 330 operator const os_app_schema&() 330 operator const os_comp_schema&() 330 operator const os_database_schema&() 331 operator os_app_schema&() 331 operator os_comp_schema&() 331 operator os_database_schema&() 331 OS_SCHEMA_DLL_ID(), the macro 487 550 os_schema_evolution, the class 332 augment_classes_to_be_recycled() 335 augment_classes_to_be_removed() 335 augment_cluster_split_avoidance() 335 augment_dll_schema_db_names() 335 augment_optional_classes() 336 augment_post_evol_transformers() 336 evolve() 337 get_enclosing_object() 340 get_evolved_schema() 340 get_evolved_schema_db_name() 340 get_explanation_level() 340 get_path_to_member() 340 get_unevolved_schema() 341 get_work_database() 341 initialize() 341 set_address_space_release_interval() 341 set_avoid_page_boundary() 341 set_disable_transformer_class_ checks() 342 set_evolved_schema_db_name() 342 set_explanation_level() 342 set_malloc_size() 343 set_maplet_size() 343 set_maximum_cluster_size() 145, 343 set_maximum_memory_size() 145, 343 set_obsolete_index_handler() 343 set_obsolete_query_handler() 343 set_optimzie_checkpoints() 345 set_pre_evolution_setup_hook() 345 set_resolve_ambiguous_void_ pointers() 345 set_task_list_file_name() 345 set_untranslatable_pointer_handler() 345 shutdown() 345 task_list() 346 os_schema_handle, the class 347 DLL_unloaded() 347 get() 347 get_all() 347 get_application_schema_handle() 348 get_DLL_identifiers() 348 get_schema_database() 348 get_schema_database_pathname() 348 get_schema_info() 348 get_status() 348 insert_required_DLL_identifiers() 349 set_schema_database_pathname() 349 C++ A P I Reference Index os_schema_handle_status, the enumerator 349 os_schema_info, the class 350 get() 350 get_DLL_identifiers() 350 get_schema_database_pathname() 350 set_schema_database_pathname() 350 OS_SCHEMA_INFO_NAME(), the macro 488 os_schema_install_options() os_schema_install_options, defined by 351 os_schema_install_options, the class 351 get_copy_member_functions() 351 os_schema_install_options() 351 set_copy_member_functions() 351 os_segment, the class 352 create_cluster() 352 database_of() 352 destroy() 352 get_access_control() 352 get_all_clusters() 353 get_allocation_strategy() 353 get_application_info() 353 get_cluster() 353 get_clusters() 354 get_comment() 354 get_default_cluster() 354 get_export_ids() 355 get_fetch_policy() 355 get_lock_option() 356 get_n_clusters() 356 get_null_illegal_pointers() 356 get_number() 357 get_transient_segment() 357 is_deleted() 357 is_empty() 357 is_transient_segment() 357 of() 357 release_pointer() 358 resolve_export_id() 358 retain_pointer() 358 return_memory() 359 session_of() 359 set_access_control() 359 set_allocation_strategy() 359 set_application_info() 360 set_comment() 360 set_default_cluster() 360 set_fetch_policy() 360 set_lock_option() 361 Release 6.3 set_null_illegal_pointers() 361 set_segment_reference_policy() 357 size() 361 ~os_segment_access() os_segment_access, defined by 364 os_segment_access() os_segment_access, defined by 363 os_segment_access, the class 362 get_default() 362 get_primary_group() 362 no_access 362 operator =() 363 ~os_segment_access() 364 os_segment_access() 363 read_access 363 read_write_access 363 set_default() 364 set_primary_group() 364 os_segment_cursor() os_segment_cursor, defined by 365 os_segment_cursor, the class 365 get_current() 365 next() 365 os_segment_cursor() 365 reset() 366 os_server, the class 367 connection_is_broken() 367 disconnect() 368 get_databases() 368 get_host_name() 368 get_n_databases() 368 is_failover() 369 reconnect() 369 os_session, the class 370 create() 370 force_full_initialization() 370 get_all_sessions() 370 get_current() 370 get_n_sessions() 371 get_name() 371 get_thread_absorption() 371 of() 371 operator delete() 371 set_current() 372 set_thread_absorption() 372 unuse_DLL() 372 use_DLL() 372 os_signed_int8 551 O typespec for 442 os_size_options, the class argument to ossize() 187 os_soft_pointer, the macro 489 os_soft_pointer<T>, the class 489 os_soft_pointer32() os_soft_pointer32<T>, defined by 382 os_soft_pointer32<char>, the class 389 os_soft_pointer32<T>, the class 381 operator =() 382 operator ->() 382 operator T*() 382 os_soft_pointer32() 382 resolve() 383 os_soft_pointer32<void>, the class 387 ~os_soft_pointer32_base() os_soft_pointer32_base, defined by 376 os_soft_pointer32_base, the class 373 decache() 373 dump() 373 get_database() 374 get_database_key() 374 get_open_database() 374 hash() 374 load() 374 operator !() 375 operator !=() 375 operator <() 375 operator <=() 376 operator ==() 375 operator >() 375 operator >=() 376 ~os_soft_pointer32_base() 376 resolve() 376 OS_SOFT_POINTER32_NOCLASS(), the macro 490 os_soft_pointer64() os_soft_pointer64<T>, defined by 385 os_soft_pointer64<char>, the class 390 os_soft_pointer64<T>, the class 384 operator =() 385 operator ->() 385 operator T*() 385 os_soft_pointer64() 385 resolve() 386 os_soft_pointer64<void>, the class 388 ~os_soft_pointer64_base() os_soft_pointer64_base, defined by 380 os_soft_pointer64_base, the class 377 552 decache() 377 dump() 377 get_database() 378 get_database_key() 378 get_open_database() 378 hash() 378 load() 378 operator !() 379 operator !=() 379 operator <() 379 operator <=() 380 operator ==() 379 operator >() 379 operator >=() 380 ~os_soft_pointer64_base() 380 resolve() 380 OS_SOFT_POINTER64_NOCLASS(), the macro 491 os_store(), the global function 465 os_str_conv() os_str_conv, defined by 393 os_str_conv, the class 391 change_mapping() 391 convert() 391 get_converted_size() 392 os_str_conv() 393 ~os_string() os_string, defined by 395 os_string() os_string, defined by 395 os_string, the class 394 compare() 394 compare_nocase() 394 is_null() 394 operator =() 394 operator const char*() 394 ~os_string() 395 os_string() 395 os_subscription() os_subscription, defined by 398 os_subscription, the class 396 assign() 396 get_database() 397 os_subscription() 398 os_template, the class 399 Function 399 get_args() 399 get_kind() 399 is_unspecified() 399 C++ A P I Reference Index operator const os_type_template&() 399 operator os_type_template&() 400 set_args() 400 Type 400 os_template_actual_arg, the class 401 get_kind() 401 operator const os_literal_template_ actual_arg&() 401 operator const os_type_template_actual_ arg&() 401 operator os_literal_template_actual_ arg&() 401 operator os_type_template_actual_ arg&() 402 os_template_formal_arg, the class 403 get_kind() 403 get_name() 403 operator const os_template_type_ formal&() 403 operator const os_template_value_ formal&() 403 operator os_template_type_formal&() 403 operator os_template_value_formal&() 403 set_name() 404 os_template_instantiation, the class 405 create() 405 get_args() 405 get_template() 405 set_args() 405 set_template() 406 os_template_type_formal, the class 407 create() 407 os_template_value_formal, the class 408 create() 408 get_type() 408 set_type() 408 os_transaction, the class 409 abort() 409 abort_top_level() 409 begin() 409 checkpoint() 410 commit() 411 get_current() 411 get_name() 411 get_parent() 411 get_scope() 411 get_type() 411 is_aborted() 411 Release 6.3 is_committed() 412 is_lock_contention() 412 is_prepared() 412 read_only 413 session_of() 413 set_name() 413 top_level() 413 update 414 os_transaction_hook, the class 415 after_begin 415 after_checkpoint 415 after_commit 415 before_abort 415 before_checkpoint 415 before_commit 416 before_retry 416 deregister_hook() 416 register_hook() 416 os_transformer_binding() os_transformer_binding, defined by 417 os_transformer_binding, the class 417 os_transformer_binding() 417 os_type, the class 418 Anonymous_indirect 418 Array 418 Char 418 Class 418 Double 418 Enum 418 Float 418 Function 418 get_alignment() 419 get_enclosing_class() 419 get_kind() 419 get_kind_string() 420 get_size() 420 get_string() 420 Instantiated_class 420 Integer 420 is_class_type() 420 is_const() 420 is_indirect_type() 420 is_integral_type() 420 is_pointer_type() 421 is_real_type() 421 is_unspecified() 421 is_volatile() 421 Long_double 421 553 O Named_indirect 421 operator const os_anonymous_indirect_ type&() 421 operator const os_array_type&() 422 operator const os_class_type&() 422 operator const os_enum_type&() 422 operator const os_function_type&() 422 operator const os_instantiated_class_ type&() 422 operator const os_integral_type&() 422 operator const os_named_indirect_ type&() 422 operator const os_pointer_to_member_ type&() 422 operator const os_pointer_type&() 423 operator const os_real_type&() 423 operator const os_reference_type&() 423 operator const os_type_type&() 423 operator const os_void_type&() 423 operator os_anonymous_indirect_ type&() 423 operator os_array_type&() 423 operator os_class_type&() 423 operator os_enum_type&() 424 operator os_function_type&() 424 operator os_instantiated_class_ type&() 424 operator os_integral_type&() 424 operator os_named_indirect_type&() 424 operator os_pointer_to_member_type&() 424 operator os_pointer_type&() 424 operator os_real_type&() 424 operator os_reference_type&() 425 operator os_type_type&() 425 operator os_void_type&() 425 Pointer 425 Pointer_to_member 425 Reference 425 set_alignment() 425 set_size() 425 Signed_char 425 Signed_long 426 Signed_short 426 strip_indirect_types() 426 Type 427 type_at() 427 type_containing() 427 Undefined 427 554 Unsigned_char 427 Unsigned_integer 427 Unsigned_long 428 Unsigned_short 428 Void 428 os_Type_fixup_info() os_Type_fixup_info, defined by 429 os_Type_fixup_info, the class 429 fixup_data 429 os_Type_fixup_info() 429 os_Type_fixup_loader, the class 430 fixup() 430 get() 430 load() 431 operator ()() 431 os_Type_info() os_Type_info, defined by 433 os_Type_info, the class 432 data 432 get_original_location() 432 get_replacing_database() 432 get_replacing_location() 432 get_replacing_segment() 432 get_type() 433 os_Type_info() 433 set_replacing_location() 433 os_Type_loader, the class 434 create() 434 fixup() 434 get() 434 load() 435 operator ()() 435 os_type_template, the class 436 create() 436 get_type() 436 set_type() 436 os_type_template_actual_arg, the class 437 create() 437 get_type() 437 set_type() 437 os_type_type, the class 438 os_typed_pointer_void, the class 439 get_type() 439 operator void*() 439 os_typespec() os_typespec, defined by 444 os_typespec, the class 440 get_char() 440 C++ A P I Reference Index get_double() 440 get_float() 440 get_int() 440 get_long() 441 get_long_double() 441 get_name() 441 get_os_int16() 441 get_os_int64() 441 get_os_int32() 441 get_os_signed_int8() 442 get_os_unsigned_int16() 442 get_os_unsigned_int32() 442 get_os_unsigned_int64() 442 get_os_unsigned_int8() 442 get_pointer() 443 get_short() 443 get_signed_char() 443 get_signed_int() 443 get_signed_long() 443 get_signed_short() 443 get_unsigned_char() 444 get_unsigned_int() 444 get_unsigned_long() 444 get_unsigned_short() 444 operator ==() 444 os_typespec() 444 os_unsigned_int16 typespec for 442 os_unsigned_int32 typespec for 442 os_unsigned_int64 typespec for 442 os_unsigned_int64() os_unsigned_int64, defined by 446 os_unsigned_int64, the class 446 get_high() 446 get_low() 446 os_unsigned_int64() 446 sprint() 447 os_unsigned_int8 typespec for 442 os_unsigned_int32 47 os_untranslatable_pointer_handler, the class 448 ~os_untranslatable_pointer_handler() 451 get_exception() 448 get_explanation() 448 get_final_offset() 449 Release 6.3 get_source_cluster() 448 get_source_offset() 448 get_source_path() 448 get_target_cluster() 448 get_target_export_id() 449 get_target_exported() 449 get_target_offset() 449 get_target_path() 449 get_target_segment() 449 handle_xxx() 450 is_PTOM() 450 set_final_offset() 450 os_verifydb_options, the class argument to osverifydb() 188 argument to osverifydb_one_segment() 189 os_void_type, the class 451 create() 451 ~os_with_mapped() os_with_mapped, defined by 452 os_with_mapped() os_with_mapped, defined by 452 os_with_mapped, the class 452 ~os_with_mapped() 452 os_with_mapped() 452 ossg utility OS_MARK_SCHEMA_TYPE(), the macro 482 OS_MARK_SCHEMA_TYPESPEC(), the macro 483 ossize() os_dbutil, defined by 186 OSU_DATABASE os_rawfs_entry, defined by 285 OSU_DIRECTORY os_rawfs_entry, defined by 285 OSU_LINK os_rawfs_entry, defined by 285 osverifydb() os_dbutil, defined by 187 osverifydb_one_segment() osdbutil, defined by 188 outer_collocated_path() os_path_to_data, defined by 273 outer_path() os_path_to_data, defined by 273 own_page_write objectstore, defined by 79 P permissions 362 555 Q Persistent os_member_variable, defined by 251 persistent delete 458 persistent new 459 persistent storage 44 allocating 459 reclaiming using the delete operator 458 persistently allocated objects 44 Pointer os_type, defined by 425 Pointer_to_member os_type, defined by 425 pointers See also cross-database pointers pop() os_path_to_data, defined by 273 Private os_base_class, defined by 117 os_member, defined by 242 programs, examples See example programs propagate_log() objectstore, defined by 79 Protected os_base_class, defined by 117 os_member, defined by 243 Public os_base_class, defined by 117 os_member, defined by 243 Q queue_status() os_notification, defined by 263 R read_access os_segment_access, defined by 363 read_only os_transaction, defined by 413 read_write_access os_segment_access, defined by 363 read-only transactions 475 receive() os_notification, defined by 264 reclaiming storage using the delete operator 458 reconnect() 556 os_server, defined by 369 reconnecting to servers 367 Reference os_type, defined by 425 register_() os_DLL_finder, defined by 205 register_hook() os_transaction_hook, defined by 416 registry location on Windows 109 Regular os_member_variable, defined by 251 rehost_all_links() os_dbutil, defined by 189 rehost_link() os_dbutil, defined by 189 Relationship os_member, defined by 243 release() os_address_space_marker, defined by 99 os_persistent_to_transient_pointer_ manager, defined by 277 os_retain_address, defined by 329 release_address_space() os_object_cursor, defined by 269 release_cleared_persistent_to_transient_ pointers() objectstore, defined by 79 release_maintenance() objectstore, defined by 80 release_major() objectstore, defined by 80 release_minor() objectstore, defined by 80 release_name() objectstore, defined by 81 release_persistent_addresses() objectstore, defined by 81 release_pointer() os_cluster, defined by 133 os_database, defined by 166 os_database_root, defined by 173 os_segment, defined by 358 tix_exception, defined by 454 remote schemas 151 remove() os_dbutil, defined by 190 os_dynamic_extent, defined by 214 remove_db_from_archive() C++ A P I Reference Index os_archiver, defined by 105 remove_required_DLL_identifier() os_database, defined by 167 rename() os_dbutil, defined by 190 reset() os_archiver_options, defined by 107 os_backup_options, defined by 115 os_cluster_cursor, defined by 139 os_export_id_cursor, defined by 221 os_mop, defined by 256 os_object_cursor, defined by 269 os_recover_options, defined by 292 os_replicator_options, defined by 320 os_restore_options, defined by 328 os_segment_cursor, defined by 366 reset_persistent_addresses() objectstore, defined by 81 reset_statistics() os_replicator, defined by 317 resolve() os_Dumper_reference, defined by 210 os_Reference<T>, defined by 294 os_reference_cross_session, defined by 300 os_Reference_cross_session<T>, defined by 296 os_reference_internal, defined by 303 os_Reference_protected<T>, defined by 305 os_reference_protected_internal, defined by 309 os_soft_pointer32<T>, defined by 383 os_soft_pointer32_base, defined by 376 os_soft_pointer64<T>, defined by 386 os_soft_pointer64_base, defined by 380 resolve_export_id() os_segment, defined by 358 retain() os_address_space_marker, defined by 100 retain_persistent_addresses() objectstore, defined by 81 retain_pointer() os_cluster, defined by 134 os_database, defined by 167 os_database_root, defined by 173 os_segment, defined by 358 retaining() os_retain_address, defined by 329 retrieving data member address using os_fetch_ Release 6.3 address() 464 retrieving data member value using os_ fetch() 461 return_all_pages() objectstore, defined by 81 return_memory() objectstore, defined by 81 os_cluster, defined by 134 os_database, defined by 167 os_segment, defined by 359 rmdir() os_dbutil, defined by 190 RPC exceptions 511 S schema evolution 46 exceptions 508 transformer functions 333 schema keys objectstore::set_current_schema_key() 86 os_database::change_schema_key() 149 os_database::freeze_schema_key() 153 schemas See also component schemas OS_MARK_SCHEMA_TYPE(), the macro 482 OS_MARK_SCHEMA_TYPESPEC(), the macro 483 remote 151 segment_number os_pathname_and_segment_number, defined by 275 os_pathname_segment_cluster, defined by 276 segment_of() os_cluster, defined by 134 segment-level access control 362 segments 44 default returning 156 setting 168 initial, returning 156 initial, setting 168 iterating over 365 os_segment, the class 352 transient 357 servers reconnecting to 367 session_of() os_cluster, defined by 134 os_database, defined by 167 557 S os_segment, defined by 359 os_transaction, defined by 413 set() os_object_cursor, defined by 270 set_access() os_base_class, defined by 117 os_member, defined by 243 set_access_control() os_segment, defined by 359 set_access_of_get_os_typespec_function() os_class_type, defined by 127 set_address_space_release_interval() os_compact, defined by 144 os_schema_evolution, defined by 341 set_alignment() os_type, defined by 425 set_allocation_strategy() objectstore, defined by 82 os_cluster, defined by 135 os_database, defined by 168 os_segment, defined by 359 set_always_check_server_connection_at_ commit() objectstore, defined by 82 set_always_null_illegal_pointers() objectstore, defined by 83 set_application_info() os_database, defined by 168 os_segment, defined by 360 set_application_schema_path() os_dbutil, defined by 190 set_application_schema_pathname() objectstore, defined by 83 set_arg_list() os_function_type, defined by 228 set_arg_list_kind() os_function_type, defined by 228 set_args() os_template, defined by 400 os_template_instantiation, defined by 405 set_asmarkers_useless() objectstore, defined by 83 set_auto_open_mode() objectstore, defined by 83 set_autoload_DLLs_function() objectstore, defined by 83 set_avoid_page_boundary() os_compact, defined by 144 558 os_schema_evolution, defined by 341 set_base_classes() os_class_type, defined by 127 set_base_member() os_access_modifier, defined by 97 set_cache_file() objectstore, defined by 85 set_cache_size() objectstore, defined by 85 set_call_linkage() os_member_function, defined by 246 set_class() os_base_class, defined by 117 set_class_kind() os_class_type, defined by 127 set_client_name() objectstore, defined by 85 os_dbutil, defined by 191 set_comment() os_segment, defined by 360 set_copy_member_functions() os_schema_install_options, defined by 351 set_current() os_session, defined by 372 set_current_schema_key() objectstore, defined by 86 set_decache_soft_pointers_after_address_ space_release() objectstore, defined by 86 set_declares_get_os_typespec_function() os_class_type, defined by 127 set_default() os_segment_access, defined by 364 set_default_address_space_partition_size() objectstore, defined by 87 set_default_cluster() os_segment, defined by 360 set_default_segment() os_database, defined by 168 set_defines_virtual_functions() os_class_type, defined by 127 set_disable_transformer_class_checks() os_schema_evolution, defined by 342 set_dispatch_table_pointer_offset() os_class_type, defined by 128 set_element_type() os_array_type, defined by 108 set_enclosing_namespace() C++ A P I Reference Index os_namespace, defined by 258 set_enumerators() os_enum_type, defined by 216 set_evolved_schema_db_name() os_schema_evolution, defined by 342 set_explanation_level() os_compact, defined by 144 os_schema_evolution, defined by 342 set_fetch_policy() objectstore, defined by 87 os_cluster, defined by 135 os_database, defined by 169 os_segment, defined by 360 set_final_offset() os_untranslatable_pointer_handler, defined by 450 set_handle_transient_faults() objectstore, defined by 88 set_has_constructor() os_class_type, defined by 128 set_has_destructor() os_class_type, defined by 128 set_incremental_schema_installation() objectstore, defined by 88 os_database, defined by 169 set_indirect_virtual_base_classes() os_class_type, defined by 128 set_instantiation() os_instantiated_class_type, defined by 230 set_introduces_virtual_functions() os_class_type, defined by 128 set_is_abstract() os_class_type, defined by 128 set_is_const() os_anonymous_indirect_type, defined by 101 os_member_function, defined by 246 set_is_forward_definition() os_class_type, defined by 128 set_is_inline() os_member_function, defined by 246 set_is_overloaded() os_member_function, defined by 246 set_is_persistent() os_class_type, defined by 128 set_is_pure_virtual() os_member_function, defined by 246 set_is_static() os_member_function, defined by 246 Release 6.3 set_is_virtual() os_member_function, defined by 247 set_is_volatile() os_anonymous_indirect_type, defined by 101 os_member_function, defined by 247 set_literal() os_literal_template_actual_arg, defined by 237 set_locator_file() objectstore, defined by 88 set_lock_option() objectstore, defined by 88 os_cluster, defined by 135 os_database, defined by 169 os_segment, defined by 361 set_lock_timeout() objectstore, defined by 89 set_log_file() objectstore, defined by 89 set_malloc_size() os_compact, defined by 145 os_schema_evolution, defined by 343 set_maplet_size() os_compact, defined by 145 os_schema_evolution, defined by 343 set_maximum_cluster_size() os_compact, defined by 145 os_schema_evolution, defined by 145, 343 set_maximum_memory_size() os_compact, defined by 145 os_schema_evolution, defined by 145, 343 set_members() os_class_type, defined by 128 os_namespace, defined by 258 set_name() os_class_type, defined by 129 os_enum_type, defined by 216 os_enumerator_literal, defined by 217 os_member_function, defined by 247 os_member_variable, defined by 252 os_named_indirect_type, defined by 257 os_namespace, defined by 259 os_pointer_literal, defined by 279 os_template_formal_arg, defined by 404 os_transaction, defined by 413 set_namespace() os_member_namespace, defined by 248 set_new_segment_reference_policy() 559 S os_database, defined by 170 set_null_illegal_pointers() objectstore, defined by 90 os_cluster, defined by 136 os_database, defined by 170 os_segment, defined by 361 set_number_of_elements() os_array_type, defined by 108 set_obsolete_index_handler() os_schema_evolution, defined by 343 set_obsolete_query_handler() os_schema_evolution, defined by 343 set_offset() os_base_class, defined by 118 os_member_variable, defined by 252 set_optimzie_checkpoints() os_schema_evolution, defined by 345 set_pathname_encoding() objectstore, defined by 90 set_persistent_to_transient_pointer() objectstore, defined by 90 set_pragmas() os_class_type, defined by 129 os_enum_type, defined by 216 set_pre_evolution_setup_hook() os_schema_evolution, defined by 345 set_primary_group() os_segment_access, defined by 364 set_propagate_on_commit() objectstore, defined by 91 set_queue_size() os_notification, defined by 265 set_reconnect_timeout_and_interval() os_failover_server, defined by 223 set_replacing_location() os_Type_info, defined by 433 set_reserve_as_mode() objectstore, defined by 91 set_resolve_ambiguous_void_pointers() os_schema_evolution, defined by 345 set_retain() os_retain_address, defined by 329 set_retain_persistent_addresses() objectstore, defined by 91 set_return_type() os_function_type, defined by 228 set_schema_database() os_database, defined by 170 560 set_schema_database_pathname() os_schema_handle, defined by 349 os_schema_info, defined by 350 set_segment_reference_policy() os_segment, defined by 357 set_simple_auth_ui() objectstore, defined by 92 set_size() os_cluster, defined by 136 os_database, defined by 170 os_field_member_variable, defined by 224 os_type, defined by 425 set_size_in_sectors() os_database, defined by 171 set_source_position() os_class_type, defined by 129 os_enum_type, defined by 216 os_member_function, defined by 247 os_member_variable, defined by 252 os_named_indirect_type, defined by 257 set_storage_class() os_member_variable, defined by 253 set_suppress_invalid_hard_pointer_errors() objectstore, defined by 92 set_target_class() os_pointer_to_member_type, defined by 280 set_target_type() os_indirect_type, defined by 229 os_pointer_type, defined by 281 set_task_list_file_name() os_schema_evolution, defined by 345 set_template() os_template_instantiation, defined by 406 set_thread_absorption() os_session, defined by 372 set_transaction_max_retries() objectstore, defined by 92 set_transaction_priority() objectstore, defined by 92 set_transient_delete_function() objectstore, defined by 93 set_type() os_member_function, defined by 247 os_member_type, defined by 249 os_member_variable, defined by 253 os_pointer_literal, defined by 279 os_template_value_formal, defined by 408 os_type_template, defined by 436 C++ A P I Reference Index os_type_template_actual_arg, defined by 437 set_unhandled_exception_hook() tix_exception, defined by 455 set_union_variant() objectstore, defined by 94 set_untranslatable_pointer_handler() os_schema_evolution, defined by 345 set_value() os_database_root, defined by 174 os_enumerator_literal, defined by 217 set_virtual_base_class_no_pointer() os_base_class, defined by 118 set_virtual_base_class_pointer_offset() os_base_class, defined by 118 set_virtuals_redefined() os_base_class, defined by 118 should_use_default_constructor() os_Dumper_specialization, defined by 212 shutdown() objectstore, defined by 94 os_compact, defined by 146 os_schema_evolution, defined by 345 signal() objectstore_exception, defined by 96 Signed_char os_type, defined by 425 Signed_long os_type, defined by 426 Signed_short os_type, defined by 426 size() os_cluster, defined by 137 os_database, defined by 171 os_segment, defined by 361 size_in_sectors() os_database, defined by 171 soft-pointer decaching 86 split_pathname() os_dbutil, defined by 191 sprint() os_int64, defined by 231 os_unsigned_int64, defined by 447 stack unwind 52 start_and_run_backup() os_backup, defined by 110 start_and_run_recover() os_recover, defined by 287 start_and_run_restore() Release 6.3 os_restore, defined by 324 start_archiver() os_archiver, defined by 105 start_backrest_logging() os_dbutil, defined by 191 start_backup() os_backup, defined by 111 start_recover() os_recover, defined by 288 start_replicator() os_replicator, defined by 317 start_restore() os_restore, defined by 324 stat() os_dbutil, defined by 192 Static os_member_variable, defined by 251 stop_archiverp() os_archiver, defined by 105 stop_backrest_logging() os_dbutil, defined by 192 stop_backup() os_backup, defined by 111 stop_recover() os_recover, defined by 288 stop_replicator() os_replicator, defined by 317 stop_restore() os_restore, defined by 324 storage allocating 459 strip_indirect_types() os_type, defined by 426 Struct os_class_type, defined by 129 subscribe() os_notification, defined by 265 svr_checkpoint() os_dbutil, defined by 192 svr_client_kill() os_dbutil, defined by 192 svr_debug() os_dbutil, defined by 193 svr_machine() os_dbutil, defined by 193 svr_ping() os_dbutil, defined by 194 svr_shutdown() 561 T os_dbutil, defined by 194 svr_stat() os_dbutil, defined by 194 T take_a_snapshot() os_archiver, defined by 105 task_list() os_schema_evolution, defined by 346 time_created() os_database, defined by 171 TIX exception macros TIX_END_HANDLE 492 TIX_EXCEPTION 493 TIX_HANDLE() 494 TIX_HANDLE_IF() 497 TIX exceptions See also exceptions DECLARE_EXCEPTION(), the macro 471 DEFINE_EXCEPTION(), the macro 472 tix_context, the class 453 TIX_END_HANDLE, the macro 492 tix_exception, the class 454 ancestor_of() 454 get_os_deadlock_exception() 454 get_os_lock_timeout_exception() 454 release_pointer() 454 set_unhandled_exception_hook() 455 TIX_EXCEPTION, the macro 493 TIX_HANDLE(), the macro 494 TIX_HANDLE_IF(), the macro 497 tix_handler, the class 456 get_current() 456 get_exception() 456 get_report() 456 get_report0() 456 get_value() 456 to_bit_field() os_path_to_data, defined by 273 to_dope() os_path_to_data, defined by 273 to_static_member() os_path_to_data, defined by 273 to_subscript() os_path_to_data, defined by 273 top_level() os_transaction, defined by 413 transactions 562 nesting 475 OS_BEGIN_TXN(), the macro 474 OS_BEGIN_TXN_NAMED(), the macro 478 read-only 475 update 475 transformer functions 333 transient segments 357 transient storage allocating 459 transiently allocated objects and clustering 459 creating 459 Type os_member, defined by 243 os_template, defined by 400 os_type, defined by 427 type() os_path_to_data, defined by 273 type_at() os_type, defined by 427 type_containing() os_type, defined by 427 typespecs os_typespec class 440 U Undefined os_type, defined by 427 Union os_class_type, defined by 129 unique_name() os_path_to_data, defined by 273 Unknown os_function_type, defined by 227 unload_DLL() objectstore, defined by 94 unregister() os_DLL_finder, defined by 205 Unsigned_char os_type, defined by 427 Unsigned_integer os_type, defined by 427 Unsigned_long os_type, defined by 428 Unsigned_short os_type, defined by 428 unsubscribe() os_notification, defined by 266 C++ A P I Reference Index unuse_DLL() os_session, defined by 372 unwind, stack 52 update os_transaction, defined by 414 update transactions 475 use_DLL() os_session, defined by 372 utility API 178 V Variable os_function_type, defined by 227 os_member, defined by 243 virtual_base_class_has_pointer() os_base_class, defined by 118 virtuals_redefined() os_base_class, defined by 118 Void os_type, defined by 428 vsignal() objectstore_exception, defined by 96 W which_product() objectstore, defined by 94 Windows registry location 109 with() os_cluster, defined by 137 Release 6.3 563 W 564 C++ A P I Reference