DBNew.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. /*****************************************************************************
  2. * DBNew.h
  3. *****************************************************************************
  4. *
  5. * Project: HALCON/libhalcon
  6. * Description: Object handling and storing in memory
  7. *
  8. * (c) 1996-2020 by MVTec Software GmbH
  9. * www.mvtec.com
  10. *
  11. *****************************************************************************
  12. *
  13. *
  14. */
  15. #ifndef HDBNEW_H
  16. #define HDBNEW_H
  17. #if defined(__cplusplus)
  18. extern "C" {
  19. #endif
  20. #include <stdio.h>
  21. /*===========================================================================*/
  22. /* Defines */
  23. /*===========================================================================*/
  24. #define DB_MAGIC_OK 1234567890
  25. #define DB_MAGIC_REGION (DB_MAGIC_OK + REGION_ID)
  26. #define DB_MAGIC_IMAGE (DB_MAGIC_OK + IMAGE_ID)
  27. #define DB_MAGIC_OBJECT (DB_MAGIC_OK + OBJECT_ID)
  28. #define DB_MAGIC_OBJECT_TUPLE (DB_MAGIC_OK + TUPLE_ID)
  29. #define DB_MAGIC_CLEARED 1987654320
  30. #define DB_CLEARED_REGION (DB_MAGIC_CLEARED + REGION_ID)
  31. #define DB_CLEARED_IMAGE (DB_MAGIC_CLEARED + IMAGE_ID)
  32. #define DB_CLEARED_OBJECT (DB_MAGIC_CLEARED + OBJECT_ID)
  33. #define DB_CLEARED_OBJECT_TUPLE (DB_MAGIC_CLEARED + TUPLE_ID)
  34. #define DB_MIN_CLEARED (DB_MAGIC_CLEARED + 1)
  35. #define DB_MAX_CLEARED (DB_MAGIC_CLEARED + MAX_XLD_ID)
  36. /*===========================================================================*/
  37. /* 'Global' Makros */
  38. /*===========================================================================*/
  39. /* -------- work on data identifiers --------------------------------------- */
  40. #define DB_ID(PTR) ((INT4)(((DBImage*)PTR)->magic) - DB_MAGIC_OK)
  41. #define DB_ERROR_ID(PTR) ((INT4)(((DBImage*)PTR)->magic) - DB_MAGIC_CLEARED)
  42. #define DB_IS_XLD(PTR) \
  43. ((DB_ID(PTR) >= MIN_XLD_ID) && (DB_ID(PTR) <= MAX_XLD_ID))
  44. /* -------- work on doubly linked lists ------------------------------------ */
  45. /*****************************************************************************/
  46. /* DB_INSERT - insert element in doubly linked list */
  47. /*****************************************************************************/
  48. #define DB_INSERT(ROOT, PTR, H) \
  49. H = (ROOT)->succ; \
  50. if (H != NULL) \
  51. (H)->pred = PTR; \
  52. (ROOT)->succ = PTR; \
  53. (PTR)->succ = H; \
  54. (PTR)->pred = ROOT
  55. /*****************************************************************************/
  56. /* DB_REMOVE - remove element from doubly linked list */
  57. /*****************************************************************************/
  58. #define DB_REMOVE(PTR) \
  59. (PTR)->pred->succ = (PTR)->succ; \
  60. if ((PTR)->succ != NULL) \
  61. (PTR)->succ->pred = (PTR)->pred
  62. /*****************************************************************************/
  63. /* HPAR_DATASIZE_XXX */
  64. /*****************************************************************************/
  65. #ifdef H_PARALLEL
  66. # define HPAR_DATASIZE_IMG(DOMAIN, CHANNELS, DATASIZE) \
  67. if (HTestF(DOMAIN, center_area)) \
  68. { \
  69. (DATASIZE) = HGetFVal(DOMAIN, area) * (CHANNELS); \
  70. } \
  71. else if (0 < (DOMAIN)->num) \
  72. { \
  73. (DATASIZE) = (CHANNELS) * (DOMAIN)->num * \
  74. ((DOMAIN)->rl[0].ce - (DOMAIN)->rl[0].cb + 1); \
  75. } \
  76. else \
  77. { \
  78. (DATASIZE) = 0; \
  79. }
  80. # define HPAR_DATASIZE_REG(REGION, DATASIZE) (DATASIZE) = (REGION)->num;
  81. # define HPAR_DATASIZE_XLD(XLD, TYPE, DATASIZE) \
  82. switch (TYPE) \
  83. { \
  84. case XLD_CONTOUR_ID: \
  85. (DATASIZE) = ((Hcont*)(XLD))->num; \
  86. break; \
  87. case XLD_POLYGON_ID: \
  88. (DATASIZE) = ((Hpoly*)(XLD))->num_line; \
  89. break; \
  90. case XLD_PARALLEL_ID: \
  91. case XLD_MOD_PARALLEL_ID: /* Hmod_para struct up to last2 member identic \
  92. * to Hpara_poly */ \
  93. case XLD_EXT_PARALLEL_ID: /* Hext_para struct up to last2 member identic \
  94. * to Hpara_poly */ \
  95. (DATASIZE) = \
  96. ((Hpara_poly*)(XLD))->last1 - ((Hpara_poly*)(XLD))->first1 + \
  97. ((Hpara_poly*)(XLD))->last2 - ((Hpara_poly*)(XLD))->first2 + 2; \
  98. break; \
  99. default: \
  100. return H_ERR_XLDWT; \
  101. }
  102. # define HPAR_READ_DATASIZE_OBJ(POBJ, NUM, DATASIZE) \
  103. { \
  104. UINT4_8 idx; \
  105. (DATASIZE) = 0; \
  106. if (64 > (NUM)) \
  107. { \
  108. for (idx = 0; idx < NUM; idx++) \
  109. { \
  110. (DATASIZE) += ((DBObject*)(POBJ)[idx])->datasize; \
  111. } \
  112. } \
  113. /* approximation for bigger object arrays ...*/ \
  114. else if (256 > NUM) \
  115. { \
  116. for (idx = 0; idx < NUM; idx += 4) \
  117. { \
  118. (DATASIZE) += (((DBObject*)(POBJ)[idx])->datasize << 2); \
  119. } \
  120. } \
  121. else if (512 > NUM) \
  122. { \
  123. for (idx = 0; idx < NUM; idx += 8) \
  124. { \
  125. (DATASIZE) += (((DBObject*)(POBJ)[idx])->datasize << 3); \
  126. } \
  127. } \
  128. else \
  129. { \
  130. for (idx = 0; idx < NUM; idx += 16) \
  131. { \
  132. (DATASIZE) += (((DBObject*)(POBJ)[idx])->datasize << 4); \
  133. } \
  134. } \
  135. }
  136. # define HPAR_READ_DATASIZE(OBJ, DATASIZE) \
  137. switch (*(UINT4*)(OBJ)) \
  138. { /* switch on magig number */ \
  139. case DB_MAGIC_OBJECT_TUPLE: \
  140. HPAR_READ_DATASIZE_OBJ(((DBObjectTuple*)(OBJ))->object, \
  141. ((DBObjectTuple*)(OBJ))->num, DATASIZE); \
  142. break; \
  143. default: \
  144. DATASIZE = ((DBObject*)(OBJ))->datasize; \
  145. break; \
  146. }
  147. #else
  148. # define HPAR_DATASIZE_IMG(DOMAIN, CHANNELS, DATASIZE) (DATASIZE) = 0
  149. # define HPAR_DATASIZE_REG(REGION, DATASIZE) (DATASIZE) = 0
  150. # define HPAR_DATASIZE_XLD(XLD, TYPE, DATASIZE) (DATASIZE) = 0
  151. # define HPAR_READ_DATASIZE_OBJ(POBJ, NUM, DATASIZE) (DATASIZE) = 0
  152. # define HPAR_READ_DATASIZE(OBJ, DATASIZE) (DATASIZE) = 0
  153. #endif
  154. /*===========================================================================*/
  155. /* Data Types */
  156. /*===========================================================================*/
  157. #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
  158. /* sets the struct member alignment to avoid problems if
  159. * the settings of the user differ to those of the HALCON
  160. * version. (8 is the default alignment, generally) */
  161. # pragma pack(push, 8)
  162. #endif
  163. typedef Herror (*DBFreeProc)(Hproc_handle proc_handle, void* mem);
  164. /*****************************************************************************/
  165. /* Regions */
  166. /*****************************************************************************/
  167. typedef struct DB_REGION
  168. {
  169. UINT4 magic;
  170. Hrlregion* region; /* region data inn runlength encoding */
  171. UINT2 creator; /* operator index (see HProcInfo) */
  172. INT4_8 counter; /* references > 0; if == 0 delete it */
  173. H_pthread_mutex_t mutex_counter;
  174. struct DB_REGION* pred;
  175. struct DB_REGION* succ;
  176. DBFreeProc clear;
  177. void* list; /* associated management list */
  178. HBOOL filed; /* is object stored in data base? */
  179. } DBRegion;
  180. typedef DBRegion* DBRegionPtr;
  181. /*****************************************************************************/
  182. /* Images */
  183. /*****************************************************************************/
  184. #ifndef HC_NO_COMPUTE_DEVICES
  185. /* 2d dimensions */
  186. typedef struct
  187. {
  188. HIMGDIM width;
  189. HIMGDIM height;
  190. } HCDDimension;
  191. /* linear and 2d memory size */
  192. typedef union
  193. {
  194. HCDDimension dim;
  195. UINT4_8 bytes;
  196. } HCDSize;
  197. /* compute device memory ptr */
  198. typedef struct HCD_PTR
  199. {
  200. void* ptr;
  201. INT2 type;
  202. HINT image_kind;
  203. HCDSize size;
  204. void* device_handle;
  205. struct HCD_PTR* next;
  206. struct HCD_PTR* prev;
  207. } HCDPtrT;
  208. typedef HCDPtrT* HCDPtr;
  209. /* HCD_PTR::type values */
  210. # define HCD_BUFFER (INT2)0
  211. # define HCD_IMAGE (INT2)1
  212. /* page locked host memory ptr */
  213. typedef struct HCD_PINNED_PTR
  214. {
  215. void* handle;
  216. void* ptr;
  217. UINT4_8 size;
  218. void* device_handle;
  219. HBOOL is_pinned;
  220. struct HCD_PINNED_PTR* next;
  221. struct HCD_PINNED_PTR* prev;
  222. } HCDPinnedPtrT;
  223. typedef HCDPinnedPtrT* HCDPinnedPtr;
  224. /* compute devices associated function ptr types */
  225. typedef Herror (*DeviceHandleFreeProc)(Hproc_handle proc_handle);
  226. typedef Herror (*HImageTransferProc)(Hproc_handle, Hkey);
  227. typedef Herror (*HImageFreeDeviceMemProc)(Hproc_handle, HCDPtr);
  228. typedef Herror (*HImageSynchProc)(Hproc_handle, void*);
  229. typedef Herror (*HCleanupProc)(Hproc_handle, void*);
  230. /* identical header for all compute device handles */
  231. # ifdef H_PARALLEL
  232. # define DEVICE_HANDLE_HEADER \
  233. INT2 device_kind; /* e.g. COMPUTE_DEVICE_OPENCL */ \
  234. UINT4_8 device_id; /* device identifier */ \
  235. UINT4_8 platform; \
  236. H_pthread_mutex_t sync_mutex; \
  237. DeviceHandleFreeProc free_proc; \
  238. HBOOL asynchronous_execution; \
  239. HBOOL alloc_pinned; \
  240. void* next_handle;
  241. # else
  242. # define DEVICE_HANDLE_HEADER \
  243. INT2 device_kind; /* e.g. COMPUTE_DEVICE_OPENCL */ \
  244. UINT4_8 device_id; /* device identifier */ \
  245. UINT4_8 platform; \
  246. DeviceHandleFreeProc free_proc; \
  247. HBOOL asynchronous_execution; \
  248. HBOOL alloc_pinned; \
  249. void* next_handle;
  250. # endif
  251. typedef struct
  252. {
  253. DEVICE_HANDLE_HEADER
  254. } Hdevice_handle_header;
  255. /* macros to access Hdevice_handle_header */
  256. # define HCDGetDeviceKind(DEVICE_HANDLE_PTR) \
  257. (((Hdevice_handle_header*)(DEVICE_HANDLE_PTR))->device_kind)
  258. # define HCDGetDeviceID(DEVICE_HANDLE_PTR) \
  259. (((Hdevice_handle_header*)(DEVICE_HANDLE_PTR))->device_id)
  260. # define HCDGetDeviceFreeProc(DEVICE_HANDLE_PTR) \
  261. (((Hdevice_handle_header*)(DEVICE_HANDLE_PTR))->free_proc)
  262. # ifdef H_PARALLEL
  263. # define HCDGetDeviceSyncMutex(DEVICE_HANDLE_PTR) \
  264. (((Hdevice_handle_header*)(DEVICE_HANDLE_PTR))->sync_mutex)
  265. # define HGetDeviceSyncMutex(PROC_HANDLE) \
  266. HCDGetDeviceSyncMutex(HGetGV_compute_device_handle(DEVICE_HANDLE_PTR))
  267. # endif
  268. typedef struct
  269. {
  270. UINT4 state; /* state bitfield */
  271. HImageTransferProc transfer_proc; /* image->host transfer */
  272. HImageFreeDeviceMemProc free_device_mem_proc; /* frees decvice memory */
  273. HCDPtr device_ptr; /* ptr to device memory */
  274. void* event_handle; /* device computation event*/
  275. HImageSynchProc sync_proc; /* wait for event */
  276. HImageSynchProc release_event_proc; /* free event (no wait) */
  277. HCleanupProc cleanup_proc; /* frees cleanup_data */
  278. void* cleanup_data; /* blocks to free after
  279. computation has finished*/
  280. DBRegionPtr domain; /* associated domain */
  281. HCDPinnedPtr pinned_mem_ptr; /* associated pinned mem */
  282. } HCDImageInfo;
  283. #endif
  284. #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
  285. # pragma pack(pop)
  286. #endif
  287. /* HCDImageInfo::state flags */
  288. #define HCD_HOST_MEM_ALLOCATED (UINT4)(1 << 0)
  289. #define HCD_DEVICE_MEM_ALLOCATED (UINT4)(1 << 1)
  290. #define HCD_IMAGE_IN_HOST_MEM (UINT4)(1 << 2)
  291. #define HCD_IMAGE_IN_DEVICE_MEM (UINT4)(1 << 3)
  292. #define HCD_IMAGE_IN_IMAGE_2D (UINT4)(1 << 4)
  293. #define HCD_HOST_IS_PINNED (UINT4)(1 << 5)
  294. #define HCD_HAS_COMPUTE_EVENT (UINT4)(1 << 6)
  295. #define HCD_HAS_UPLOAD_EVENT (UINT4)(1 << 7)
  296. #define HCD_STD_FLAGS ((HCD_HOST_MEM_ALLOCATED) | (HCD_IMAGE_IN_HOST_MEM))
  297. /* macros to access HCDImageInfo::state */
  298. #define HCD_TEST_FLAG(KEY, FLAG) (((DBImage*)KEY)->device_data.state & FLAG)
  299. #define HCD_SET_FLAG(KEY, FLAG) ((DBImage*)KEY)->device_data.state |= FLAG
  300. #define HCD_UNSET_FLAG(KEY, FLAG) ((DBImage*)KEY)->device_data.state &= ~(FLAG)
  301. /* macros to access HCDImageInfo */
  302. #define HCD_SET_DEVICE(KEY, DEVICE) \
  303. ((DBImage*)KEY)->device_data.device_ptr->device_kind = DEVICE;
  304. #define HCD_SET_DEVICE_ID(KEY, DEVICE_ID) \
  305. ((DBImage*)KEY)->device_data.device_ptr->device_id = DEVICE_ID;
  306. #define HCD_GET_DEVICE(KEY) \
  307. HCDGetDeviceKind((((DBImage*)KEY)->device_data.device_ptr->device_handle))
  308. #define HCD_GET_DEVICE_ID(KEY) \
  309. HCDGetDeviceID((((DBImage*)KEY)->device_data.device_ptr->device_handle))
  310. #define HCD_DEVICE_DATA(KEY) (((DBImage*)KEY)->device_data)
  311. #define HCD_SET_PINNED_MEM_HANDLE(KEY, HANDLE) \
  312. (((DBImage*)KEY)->device_data.pinned_mem_ptr) = HANDLE;
  313. #define HCD_GET_PINNED_MEM_HANDLE(KEY) \
  314. (((DBImage*)KEY)->device_data.pinned_mem_ptr)
  315. #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
  316. /* sets the struct member alignment to avoid problems if
  317. * the settings of the user differ to those of the HALCON
  318. * version. (8 is the default alignment, generally) */
  319. # pragma pack(push, 8)
  320. #endif
  321. typedef struct DB_IMAGE
  322. {
  323. UINT4 magic;
  324. Himage image; /* image data */
  325. UINT2 creator; /* operator index (see HProcInfo) */
  326. INT4_8 counter; /* references > 0; if == 0 delete it */
  327. H_pthread_mutex_t mutex_counter;
  328. struct DB_IMAGE* pred;
  329. struct DB_IMAGE* succ;
  330. void* list; /* associated management list */
  331. HBOOL filed; /* is object stored in data base? */
  332. #ifndef HC_NO_COMPUTE_DEVICES
  333. HCDImageInfo device_data;
  334. #endif
  335. } DBImage;
  336. typedef DBImage* DBImagePtr;
  337. /*****************************************************************************/
  338. /* Objects */
  339. /*****************************************************************************/
  340. typedef struct DB_OBJECT
  341. {
  342. UINT4 magic; /* specific magic number for tests */
  343. INT4_8 datasize; /* for AOP relevant size information */
  344. DBRegion* region; /* pointer to region */
  345. DBImagePtr* image; /* pointer to array of image matrices */
  346. /* (undefined components are set to NULL) */
  347. UINT2 num; /* num. of gray value matrices; not fixed!*/
  348. UINT2 creator; /* operator index (see HProcInfo) */
  349. struct DB_OBJECT* pred;
  350. struct DB_OBJECT* succ;
  351. void* list; /* associated management list */
  352. HBOOL filed; /* is object stored in data base? */
  353. } DBObject;
  354. typedef DBObject* DBObjectPtr;
  355. /*****************************************************************************/
  356. /* XLD */
  357. /*****************************************************************************/
  358. typedef struct DB_XLD
  359. {
  360. UINT4 magic;
  361. INT4_8 datasize; /* for AOP relevant size information */
  362. void* xld; /* pointer to data */
  363. Hkey* uses; /* XLD objects that are used */
  364. UINT2 num_uses;
  365. UINT2 creator; /* operator index (see HProcInfo) */
  366. INT4_8 counter;
  367. H_pthread_mutex_t mutex_counter;
  368. struct DB_XLD* pred;
  369. struct DB_XLD* succ;
  370. DBFreeProc clear;
  371. void* list; /* associated management list */
  372. HBOOL filed; /* is object stored in data base? */
  373. } DBXLD;
  374. typedef DBXLD* DBXLDPtr;
  375. /*****************************************************************************/
  376. /* Object Tuple */
  377. /*****************************************************************************/
  378. typedef struct DB_TUPLE
  379. {
  380. UINT4 magic; /* specific magic number for tests */
  381. DBObjectPtr* object; /* array of pointers to DBObjects */
  382. UINT4 num; /* length of object */
  383. UINT2 creator; /* operator index (see HProcInfo) */
  384. struct DB_TUPLE* pred;
  385. struct DB_TUPLE* succ;
  386. void* list; /* associated management list */
  387. HBOOL filed; /* is object stored in data base? */
  388. } DBObjectTuple;
  389. /*****************************************************************************/
  390. /* Data Structure for Management Lists and Counters */
  391. /*****************************************************************************/
  392. typedef struct DB_HANDLE
  393. {
  394. /* singly linked object lists */
  395. DBObjectTuple* DBObjectTupleRoot; /* entry of obj. tuple list */
  396. DBObjectTuple* DBObjectTupleSave; /* memory to recycle */
  397. H_pthread_mutex_t mutex_DBObjectTupleRoot; /* to lock obj. tuple list */
  398. H_pthread_mutex_t mutex_DBObjectTupleSave; /* to lock recycle-list */
  399. DBObject* DBObjectRoot; /* entry of object list */
  400. DBObject* DBObjectSave; /* memory to recycle */
  401. H_pthread_mutex_t mutex_DBObjectRoot; /* to lock object list */
  402. H_pthread_mutex_t mutex_DBObjectSave; /* to lock recycle-list */
  403. DBRegion* DBRegionRoot; /* entry of region list */
  404. DBRegion* DBRegionSave; /* memory to recycle */
  405. H_pthread_mutex_t mutex_DBRegionRoot; /* to lock region list */
  406. H_pthread_mutex_t mutex_DBRegionSave; /* to lock recycle-list */
  407. DBImage* DBImageRoot; /* Bildobjekt-Liste-Anker */
  408. DBImage* DBImageSave; /* memory to recycle */
  409. H_pthread_mutex_t mutex_DBImageRoot; /* to lock image list */
  410. H_pthread_mutex_t mutex_DBImageSave; /* to lock recycle-list */
  411. DBXLD* DBXLDRoot; /* XLD-Objekt-Liste-Anker */
  412. DBXLD* DBXLDSave; /* memory to recycle */
  413. H_pthread_mutex_t mutex_DBXLDRoot; /* to lock XLD object list */
  414. H_pthread_mutex_t mutex_DBXLDSave; /* to lock recycle-list */
  415. /* counters for managed objects */
  416. INT4_8 CountObjectTuple; /* number of object tuples */
  417. INT4_8 CountObject; /* number of objects */
  418. INT4_8 CountRegion; /* number of regions */
  419. INT4_8 CountImage; /* number of image objects */
  420. INT4_8 CountXLD; /* number of XLD objects */
  421. /* counter for living image objects (independent of working state of
  422. * HALCON data base): */
  423. INT4_8 NumImgObjs;
  424. /* mutex variables for changing an object reference pointer */
  425. H_pthread_mutex_t mutex_DBRegionCount; /* lock writing to reference*/
  426. H_pthread_mutex_t mutex_DBImageCount; /* counter on primary iconic*/
  427. H_pthread_mutex_t mutex_DBXLDCount; /* objects */
  428. } DBHandle;
  429. typedef DBHandle* DBhandle;
  430. #ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
  431. # pragma pack(pop)
  432. #endif
  433. /*===========================================================================*/
  434. /* External Interface */
  435. /*===========================================================================*/
  436. extern HLibExport Herror HDataBaseSwitch(HBOOL db_on);
  437. extern HLibExport Herror HDataBaseState(HBOOL* db_on);
  438. extern HLibExport Herror HDBIsInitial(HBOOL* is_initial);
  439. extern HLibExport Herror HNumImgObjs(INT4_8* num_img_objs);
  440. extern HLibExport Herror DBFreeCaches(void);
  441. extern HLibExport Herror DBInitRoots(Hproc_handle proc_handle);
  442. extern HLibExport Herror DBInitHandle(Hproc_handle proc_handle, HBOOL shared);
  443. extern HLibExport Herror DBCloseRoots(Hproc_handle proc_handle);
  444. extern HLibExport Herror DBCloseHandle(Hproc_handle proc_handle);
  445. extern HLibExport Herror DBWriteBackHandle(Hproc_handle proc_handle);
  446. extern HLibExport void HPrintPixelType(FILE* file, HINT kind);
  447. extern HLibExport Herror DBSpy(FILE* file);
  448. extern HLibExport void DBInfoCleared(void* ptr);
  449. extern HLibExport Herror HIsCompact(Hproc_handle proc_handle, Hkey key,
  450. HBOOL* res);
  451. extern HLibExport Herror DBCountImage(INT4_8* num);
  452. extern HLibExport Herror DBCountXLD(INT4_8* num);
  453. extern HLibExport Herror DBStoreImage(Hproc_handle proc_handle, Himage* image,
  454. Hkey* id);
  455. extern HLibExport Herror DBFetchImage(Hproc_handle proc_handle, Hkey id,
  456. Himage** image);
  457. extern HLibExport Herror DBGetImageCreator(Hproc_handle proc_handle, Hkey obj,
  458. HINT comp, HINT* proc_num);
  459. extern HLibExport Herror DBCountRegion(INT4_8* num);
  460. extern HLibExport Herror DBStoreRegion(Hproc_handle proc_handle,
  461. Hrlregion* region, Hkey* id);
  462. extern Herror DBStoreRegionLocal(Hproc_handle proc_handle, Hrlregion* region,
  463. Hkey* id);
  464. extern HLibExport Herror DBFetchDRegion(Hproc_handle proc_handle, Hkey id,
  465. Hrlregion** region);
  466. extern HLibExport Herror DBFetchRegion(Hproc_handle proc_handle, Hkey id,
  467. Hrlregion** region);
  468. extern HLibExport Herror DBGetRegionCreator(Hproc_handle proc_handle, Hkey obj,
  469. HINT* proc_num);
  470. extern HLibExport Herror DBGetObjectCreator(Hproc_handle proc_handle, Hkey obj,
  471. HINT* proc_num);
  472. extern HLibExport Herror DBCountObject(INT4_8* num);
  473. extern HLibExport Herror DBTestObjektID(Hkey id);
  474. extern HLibExport Herror DBStoreObject(Hproc_handle proc_handle,
  475. Hkey region_id, Hkey* image_ids,
  476. HINT num, HBOOL copy, Hkey* id);
  477. extern Herror DBStoreObjectLocal(Hproc_handle proc_handle, Hkey region_id,
  478. Hkey* image_ids, HINT num, HBOOL copy,
  479. Hkey* id);
  480. extern HLibExport Herror DBFetchObject(Hproc_handle proc_handle, Hkey id,
  481. Hkey* region_id, Hkey** image_ids,
  482. HINT* num);
  483. extern HLibExport Herror DBCopyObject(Hproc_handle proc_handle, Hkey id,
  484. Hkey* new_id);
  485. extern HLibExport Herror DBDelObject(Hproc_handle proc_handle, Hkey id);
  486. extern Herror DBDelObjectLocal(Hproc_handle proc_handle, Hkey id);
  487. extern HLibExport Herror DBDelRegion(Hproc_handle proc_handle, DBRegion* ptr);
  488. extern HLibExport Herror DBDelImage(Hproc_handle proc_handle, DBImage* ptr);
  489. extern HLibExport Herror DBRetainImage(Hproc_handle proc_handle, DBImage* ptr);
  490. extern HLibExport Herror DBRequestRegion(Hproc_handle proc_handle,
  491. DBRegion* ptr);
  492. extern HLibExport Herror DBObjectNewRegion(Hproc_handle proc_handle, Hkey id,
  493. Hkey region_id);
  494. extern HLibExport Herror DBObjectNewImage(Hproc_handle proc_handle, Hkey id,
  495. Hkey image_id, HINT comp);
  496. extern HLibExport Herror DBStoreXLD(Hproc_handle proc_handle, void* data,
  497. HINT type, Hkey* uses, INT4 num,
  498. DBFreeProc free_proc, Hkey* id);
  499. extern HLibExport Herror DBFetchXLD(Hproc_handle proc_handle, Hkey id,
  500. HINT* type, void* data, Hkey** uses,
  501. INT4* num); /* in fact void **data */
  502. extern HLibExport Herror DBCopyXLD(Hkey id, Hkey* new_id);
  503. extern HLibExport Herror DBDelXLD(Hproc_handle proc_handle, Hkey id);
  504. extern HLibExport Herror DBGetXLDCreator(Hkey obj, HINT* proc_num);
  505. extern HLibExport Herror DBCountObjectTuple(INT4_8* num);
  506. extern HLibExport Herror DBStoreTuple(Hproc_handle proc_handle,
  507. Hkey const* ids, INT4_8 num, Hkey* id);
  508. extern HLibExport Herror DBFetchTuple(Hproc_handle proc_handle, Hkey id,
  509. Hkey** ids, INT4_8* num);
  510. extern HLibExport Herror DBDelTuple(Hproc_handle proc_handle, Hkey id);
  511. extern Herror DBFreeObjectTuple(Hproc_handle, DBObjectTuple*);
  512. extern HLibExport Herror DBDelObjectId(Hproc_handle proc_handle, Hkey id);
  513. extern HLibExport Herror DBCopyObjectId(Hproc_handle proc_handle, Hkey id,
  514. Hkey* new_id);
  515. extern HLibExport Herror DBNumImaRefs(Hkey id, INT4_8* num);
  516. extern HLibExport Herror HGetCreator(Hproc_handle proc_handle, Hkey obj,
  517. HINT comp, HINT* proc_num);
  518. extern HLibExport Herror DBGetRLPtr(Hproc_handle proc_handle, Hkey id,
  519. Hrlregion** rl);
  520. extern HLibExport Herror DBGetXLDPtr(Hkey id, void** xld);
  521. #if defined(__cplusplus)
  522. }
  523. #endif
  524. #endif