00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #include "common.h"
00054
00055 #include "machine.h"
00056 #include "vmath.h"
00057 #include "db.h"
00058 #include "raytrace.h"
00059
00060
00061 #define DEFAULT_DB_TITLE "Untitled BRL-CAD Database"
00062
00063
00064
00065
00066
00067
00068
00069
00070 struct db_i *
00071 db_open_inmem(void)
00072 {
00073 register struct db_i *dbip = DBI_NULL;
00074 register int i;
00075
00076 BU_GETSTRUCT( dbip, db_i );
00077 dbip->dbi_eof = -1L;
00078 dbip->dbi_fd = -1;
00079 dbip->dbi_fp = NULL;
00080 dbip->dbi_mf = NULL;
00081 dbip->dbi_read_only = 1;
00082
00083
00084 for( i=0; i<RT_DBNHASH; i++ ) {
00085 dbip->dbi_Head[i] = DIR_NULL;
00086 }
00087
00088 dbip->dbi_local2base = 1.0;
00089 dbip->dbi_base2local = 1.0;
00090 dbip->dbi_title = bu_strdup(DEFAULT_DB_TITLE);
00091 dbip->dbi_uses = 1;
00092 dbip->dbi_filename = NULL;
00093 dbip->dbi_filepath = NULL;
00094 dbip->dbi_version = 5;
00095
00096
00097
00098
00099
00100 bu_ptbl_init( &dbip->dbi_clients, 128, "dbi_clients[]" );
00101 dbip->dbi_magic = DBI_MAGIC;
00102
00103
00104 dbip->dbi_wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_INMEM);
00105
00106 return dbip;
00107 }
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 struct db_i *
00118 db_create_inmem(void) {
00119 struct db_i *dbip;
00120 struct bu_external obj;
00121 struct bu_attribute_value_set avs;
00122 struct bu_vls units;
00123 struct bu_external attr;
00124 int flags;
00125
00126 dbip = db_open_inmem();
00127
00128 RT_CK_DBI(dbip);
00129 RT_CK_WDB(dbip->dbi_wdbp);
00130
00131 #if 0
00132
00133 db5_export_object3( &out, DB5HDR_HFLAGS_DLI_HEADER_OBJECT,
00134 NULL, 0, NULL, NULL,
00135 DB5_MAJORTYPE_RESERVED, 0,
00136 DB5_ZZZ_UNCOMPRESSED, DB5_ZZZ_UNCOMPRESSED );
00137 #endif
00138
00139
00140 bu_vls_init( &units );
00141 bu_vls_printf( &units, "%.25e", dbip->dbi_local2base );
00142
00143 bu_avs_init( &avs, 4, "db_create_inmem" );
00144 bu_avs_add( &avs, "title", dbip->dbi_title );
00145 bu_avs_add( &avs, "units", bu_vls_addr(&units) );
00146
00147 db5_export_attributes( &attr, &avs );
00148 db5_export_object3(&obj, DB5HDR_HFLAGS_DLI_APPLICATION_DATA_OBJECT,
00149 DB5_GLOBAL_OBJECT_NAME, DB5HDR_HFLAGS_HIDDEN_OBJECT, &attr, NULL,
00150 DB5_MAJORTYPE_ATTRIBUTE_ONLY, 0,
00151 DB5_ZZZ_UNCOMPRESSED, DB5_ZZZ_UNCOMPRESSED );
00152 flags = DIR_HIDDEN | DIR_NON_GEOM | RT_DIR_INMEM;
00153 wdb_export_external(dbip->dbi_wdbp, &obj, DB5_GLOBAL_OBJECT_NAME, flags, 0);
00154
00155 bu_free_external( &obj );
00156 bu_free_external( &attr );
00157 bu_avs_free( &avs );
00158 bu_vls_free( &units );
00159
00160 return dbip;
00161 }
00162
00163
00164
00165
00166
00167
00168
00169
00170 void
00171 db_inmem(struct directory *dp, struct bu_external *ext, int flags, struct db_i *dbip)
00172 {
00173 BU_CK_EXTERNAL(ext);
00174 RT_CK_DIR(dp);
00175
00176 if( dp->d_flags & RT_DIR_INMEM )
00177 bu_free( dp->d_un.ptr, "db_inmem() ext ptr" );
00178 dp->d_un.ptr = ext->ext_buf;
00179 if( dbip->dbi_version < 5 ) {
00180 dp->d_len = ext->ext_nbytes / 128;
00181 } else {
00182 dp->d_len = ext->ext_nbytes;
00183 }
00184 dp->d_flags = flags | RT_DIR_INMEM;
00185
00186
00187 ext->ext_buf = (genptr_t)NULL;
00188 ext->ext_nbytes = 0;
00189 }
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200