00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef COLLECTION_H
00023 #define COLLECTION_H
00024
00025 #include <stdint.h>
00026
00108 #ifndef EOK
00109 #define EOK 0
00110 #endif
00111
00120 #define COL_CLASS_DEFAULT 0
00121
00127 #define COL_NOMATCH 0
00128
00133 #define COL_MATCH 1
00134
00135
00145 #define COL_TYPE_STRING 0x00000001
00146
00147 #define COL_TYPE_BINARY 0x00000002
00148
00149 #define COL_TYPE_INTEGER 0x00000004
00150
00151 #define COL_TYPE_UNSIGNED 0x00000008
00152
00153 #define COL_TYPE_LONG 0x00000010
00154
00155 #define COL_TYPE_ULONG 0x00000020
00156
00157 #define COL_TYPE_DOUBLE 0x00000040
00158
00159 #define COL_TYPE_BOOL 0x00000080
00160
00166 #define COL_TYPE_COLLECTION 0x00000100
00167
00173 #define COL_TYPE_COLLECTIONREF 0x00000200
00174
00179 #define COL_TYPE_END 0x10000000
00180
00186 #define COL_TYPE_ANY 0x0FFFFFFF
00187
00200 #define COL_ADD_MODE_REFERENCE 0
00201
00211 #define COL_ADD_MODE_EMBED 1
00212
00217 #define COL_ADD_MODE_CLONE 2
00218
00225 #define COL_ADD_MODE_FLAT 3
00226
00238 #define COL_ADD_MODE_FLATDOT 4
00239
00261 #define COL_TRAVERSE_DEFAULT 0x00000000
00262
00269 #define COL_TRAVERSE_ONELEVEL 0x00000001
00270
00280 #define COL_TRAVERSE_END 0x00000002
00281
00282 #define COL_TRAVERSE_IGNORE 0x00000004
00283
00296 #define COL_TRAVERSE_FLAT 0x00000008
00297
00322 #define COL_TRAVERSE_SHOWSUB 0x00010000
00323
00330 #define COL_TRAVERSE_ONLYSUB 0x00020000
00331
00353 #define COL_COPY_NORMAL 0
00354
00359 #define COL_COPY_FLAT 1
00360
00365 #define COL_COPY_FLATDOT 2
00366
00367 #define COL_COPY_KEEPREF 3
00368
00369 #define COL_COPY_TOP 4
00370
00385 #define COL_SORT_ASC 0x00000000
00386
00387 #define COL_SORT_DESC 0x00000001
00388
00389 #define COL_SORT_SUB 0x00000002
00390
00395 #define COL_SORT_MYSUB 0x00000004
00396
00401
00402 #ifndef COLLECTION_PRIV_H
00403
00418 struct collection_item;
00431 struct collection_iterator;
00432
00433 #endif
00434
00435
00472 int col_create_collection(struct collection_item **ci,
00473 const char *name,
00474 unsigned cclass);
00475
00484 void col_destroy_collection(struct collection_item *ci);
00485
00510 typedef int (*col_copy_cb)(struct collection_item *item,
00511 void *ext_data,
00512 int *skip);
00513
00540 int col_copy_collection_with_cb(struct collection_item **col_copy,
00541 struct collection_item *col_to_copy,
00542 const char *name_to_use,
00543 int copy_mode,
00544 col_copy_cb copy_cb,
00545 void *ext_data);
00546
00564 int col_copy_collection(struct collection_item **col_copy,
00565 struct collection_item *col_to_copy,
00566 const char *name_to_use,
00567 int copy_mode);
00568
00600 int col_add_collection_to_collection(struct collection_item *ci,
00601 const char *subcollection,
00602 const char *as_property,
00603 struct collection_item *ci_to_add,
00604 int mode);
00631 typedef int (*col_item_fn)(const char *property,
00632 int property_len,
00633 int type,
00634 void *data,
00635 int length,
00636 void *custom_dat,
00637 int *stop);
00638
00639
00661 int col_traverse_collection(struct collection_item *ci,
00662 int mode_flags,
00663 col_item_fn item_handler,
00664 void *custom_data);
00665
00700 int col_get_item_and_do(struct collection_item *ci,
00701 const char *property_to_find,
00702 int type,
00703 int mode_flags,
00704 col_item_fn item_handler,
00705 void *custom_data);
00706
00745 int col_get_item(struct collection_item *ci,
00746 const char *property_to_find,
00747 int type,
00748 int mode_flags,
00749 struct collection_item **item);
00750
00780 int col_sort_collection(struct collection_item *col,
00781 unsigned cmp_flags,
00782 unsigned sort_flags);
00783
00815 int col_delete_property(struct collection_item *ci,
00816 const char *property_to_find,
00817 int type,
00818 int mode_flags);
00819
00844 int col_is_item_in_collection(struct collection_item *ci,
00845 const char *property_to_find,
00846 int type,
00847 int mode_flags,
00848 int *found);
00849
00871 int col_get_collection_reference(struct collection_item *ci,
00872 struct collection_item **acceptor,
00873 const char *col_to_find);
00874
00894 int col_get_reference_from_item(struct collection_item *item,
00895 struct collection_item **acceptor);
00896
00897
00898
00927 int col_get_collection_class(struct collection_item *ci,
00928 unsigned *cclass);
00929
00943 int col_set_collection_class(struct collection_item *ci,
00944 unsigned cclass);
00945
00964 int col_get_collection_count(struct collection_item *ci,
00965 unsigned *count);
00966
00967
00981 int col_is_of_class(struct collection_item *ci,
00982 unsigned cclass);
00983
00984
01057 int col_add_str_property(struct collection_item *ci,
01058 const char *subcollection,
01059 const char *property,
01060 const char *string,
01061 int length);
01062
01089 int col_add_binary_property(struct collection_item *ci,
01090 const char *subcollection,
01091 const char *property,
01092 void *binary_data,
01093 int length);
01094
01120 int col_add_int_property(struct collection_item *ci,
01121 const char *subcollection,
01122 const char *property,
01123 int32_t number);
01124
01150 int col_add_unsigned_property(struct collection_item *ci,
01151 const char *subcollection,
01152 const char *property,
01153 uint32_t number);
01154
01180 int col_add_long_property(struct collection_item *ci,
01181 const char *subcollection,
01182 const char *property,
01183 int64_t number);
01184
01210 int col_add_ulong_property(struct collection_item *ci,
01211 const char *subcollection,
01212 const char *property,
01213 uint64_t number);
01214
01240 int col_add_double_property(struct collection_item *ci,
01241 const char *subcollection,
01242 const char *property,
01243 double number);
01269 int col_add_bool_property(struct collection_item *ci,
01270 const char *subcollection,
01271 const char *property,
01272 unsigned char logical);
01273
01274
01302 int col_add_any_property(struct collection_item *ci,
01303 const char *subcollection,
01304 const char *property,
01305 int type,
01306 void *data,
01307 int length);
01308
01368 int col_add_str_property_with_ref(struct collection_item *ci,
01369 const char *subcollection,
01370 const char *property,
01371 char *string, int length,
01372 struct collection_item **ret_ref);
01373
01402 int col_add_binary_property_with_ref(struct collection_item *ci,
01403 const char *subcollection,
01404 const char *property,
01405 void *binary_data, int length,
01406 struct collection_item **ret_ref);
01407
01435 int col_add_int_property_with_ref(struct collection_item *ci,
01436 const char *subcollection,
01437 const char *property, int32_t number,
01438 struct collection_item **ret_ref);
01439
01467 int col_add_unsigned_property_with_ref(struct collection_item *ci,
01468 const char *subcollection,
01469 const char *property, uint32_t number,
01470 struct collection_item **ret_ref);
01471
01499 int col_add_long_property_with_ref(struct collection_item *ci,
01500 const char *subcollection,
01501 const char *property, int64_t number,
01502 struct collection_item **ret_ref);
01503
01531 int col_add_ulong_property_with_ref(struct collection_item *ci,
01532 const char *subcollection,
01533 const char *property, uint64_t number,
01534 struct collection_item **ret_ref);
01535
01563 int col_add_double_property_with_ref(struct collection_item *ci,
01564 const char *subcollection,
01565 const char *property, double number,
01566 struct collection_item **ret_ref);
01567
01595 int col_add_bool_property_with_ref(struct collection_item *ci,
01596 const char *subcollection,
01597 const char *property, unsigned char logical,
01598 struct collection_item **ret_ref);
01599
01600
01630 int col_add_any_property_with_ref(struct collection_item *ci,
01631 const char *subcollection,
01632 const char *property,
01633 int type, void *data, int length,
01634 struct collection_item **ret_ref);
01635
01690 int col_insert_str_property(struct collection_item *ci,
01691 const char *subcollection,
01692 int disposition,
01693 const char *refprop,
01694 int idx,
01695 unsigned flags,
01696 const char *property,
01697 const char *string,
01698 int length);
01699
01701 int col_insert_binary_property(struct collection_item *ci,
01702 const char *subcollection,
01703 int disposition,
01704 const char *refprop,
01705 int idx,
01706 unsigned flags,
01707 const char *property,
01708 void *binary_data,
01709 int length);
01710
01712 int col_insert_int_property(struct collection_item *ci,
01713 const char *subcollection,
01714 int disposition,
01715 const char *refprop,
01716 int idx,
01717 unsigned flags,
01718 const char *property,
01719 int32_t number);
01720
01722 int col_insert_unsinged_property(struct collection_item *ci,
01723 const char *subcollection,
01724 int disposition,
01725 const char *refprop,
01726 int idx,
01727 unsigned flags,
01728 const char *property,
01729 uint32_t number);
01730
01732 int col_insert_long_property(struct collection_item *ci,
01733 const char *subcollection,
01734 int disposition,
01735 const char *refprop,
01736 int idx,
01737 unsigned flags,
01738 const char *property,
01739 int64_t number);
01740
01742 int col_insert_ulong_property(struct collection_item *ci,
01743 const char *subcollection,
01744 int disposition,
01745 const char *refprop,
01746 int idx,
01747 unsigned flags,
01748 const char *property,
01749 uint64_t number);
01750
01752 int col_insert_double_property(struct collection_item *ci,
01753 const char *subcollection,
01754 int disposition,
01755 const char *refprop,
01756 int idx,
01757 unsigned flags,
01758 const char *property,
01759 double number);
01760
01762 int col_insert_bool_property(struct collection_item *ci,
01763 const char *subcollection,
01764 int disposition,
01765 const char *refprop,
01766 int idx,
01767 unsigned flags,
01768 const char *property,
01769 unsigned char logical);
01770
01772 int col_insert_str_property_with_ref(struct collection_item *ci,
01773 const char *subcollection,
01774 int disposition,
01775 const char *refprop,
01776 int idx,
01777 unsigned flags,
01778 const char *property,
01779 const char *string,
01780 int length,
01781 struct collection_item **ret_ref);
01782
01784 int col_insert_binary_property_with_ref(struct collection_item *ci,
01785 const char *subcollection,
01786 int disposition,
01787 const char *refprop,
01788 int idx,
01789 unsigned flags,
01790 const char *property,
01791 void *binary_data,
01792 int length,
01793 struct collection_item **ret_ref);
01794
01796 int col_insert_int_property_with_ref(struct collection_item *ci,
01797 const char *subcollection,
01798 int disposition,
01799 const char *refprop,
01800 int idx,
01801 unsigned flags,
01802 const char *property,
01803 int32_t number,
01804 struct collection_item **ret_ref);
01805
01807 int col_insert_unsinged_property_with_ref(struct collection_item *ci,
01808 const char *subcollection,
01809 int disposition,
01810 const char *refprop,
01811 int idx,
01812 unsigned flags,
01813 const char *property,
01814 uint32_t number,
01815 struct collection_item **ret_ref);
01816
01818 int col_insert_long_property_with_ref(struct collection_item *ci,
01819 const char *subcollection,
01820 int disposition,
01821 const char *refprop,
01822 int idx,
01823 unsigned flags,
01824 const char *property,
01825 int64_t number,
01826 struct collection_item **ret_ref);
01827
01829 int col_insert_ulong_property_with_ref(struct collection_item *ci,
01830 const char *subcollection,
01831 int disposition,
01832 const char *refprop,
01833 int idx,
01834 unsigned flags,
01835 const char *property,
01836 uint64_t number,
01837 struct collection_item **ret_ref);
01838
01843 int col_insert_double_property_with_ref(struct collection_item *ci,
01844 const char *subcollection,
01845 int disposition,
01846 const char *refprop,
01847 int idx,
01848 unsigned flags,
01849 const char *property,
01850 double number,
01851 struct collection_item **ret_ref);
01852
01854 int col_insert_bool_property_with_ref(struct collection_item *ci,
01855 const char *subcollection,
01856 int disposition,
01857 const char *refprop,
01858 int idx,
01859 unsigned flags,
01860 const char *property,
01861 unsigned char logical,
01862 struct collection_item **ret_ref);
01863
01865 int col_insert_property_with_ref(struct collection_item *ci,
01866 const char *subcollection,
01867 int disposition,
01868 const char *refprop,
01869 int idx,
01870 unsigned flags,
01871 const char *property,
01872 int type,
01873 const void *data,
01874 int length,
01875 struct collection_item **ret_ref);
01876
01877
01926 int col_update_str_property(struct collection_item *ci,
01927 const char *property,
01928 int mode_flags,
01929 char *string,
01930 int length);
01934 int col_update_binary_property(struct collection_item *ci,
01935 const char *property,
01936 int mode_flags,
01937 void *binary_data,
01938 int length);
01942 int col_update_int_property(struct collection_item *ci,
01943 const char *property,
01944 int mode_flags,
01945 int32_t number);
01949 int col_update_unsigned_property(struct collection_item *ci,
01950 const char *property,
01951 int mode_flags,
01952 uint32_t number);
01956 int col_update_long_property(struct collection_item *ci,
01957 const char *property,
01958 int mode_flags,
01959 int64_t number);
01963 int col_update_ulong_property(struct collection_item *ci,
01964 const char *property,
01965 int mode_flags,
01966 uint64_t number);
01970 int col_update_double_property(struct collection_item *ci,
01971 const char *property,
01972 int mode_flags,
01973 double number);
01977 int col_update_bool_property(struct collection_item *ci,
01978 const char *property,
01979 int mode_flags,
01980 unsigned char logical);
01981
01989 int col_update_property(struct collection_item *ci,
01990 const char *property,
01991 int type,
01992 void *new_data,
01993 int length,
01994 int mode_flags);
01995
01996
02028 #define COL_CMPIN_PROP_EQU 0x000000004
02029
02030 #define COL_CMPIN_PROP_BEG 0x000000005
02031
02032 #define COL_CMPIN_PROP_MID 0x000000006
02033
02034 #define COL_CMPIN_PROP_END 0x000000007
02035
02047 #define COL_CMPIN_PROP_DOT 0x000000008
02048
02050 #define COL_CMPIN_PROP_LEN 0x000000010
02051
02053 #define COL_CMPIN_TYPE 0x000000020
02054
02056 #define COL_CMPIN_DATA_LEN 0x000000040
02057
02066 #define COL_CMPIN_DATA 0x000000080
02067
02088 #define COL_CMPOUT_PROP_STR 0x00000001
02089
02096 #define COL_CMPOUT_PROP_LEN 0x00000002
02097
02103 #define COL_CMPOUT_DATA_LEN 0x00000004
02104
02112 #define COL_CMPOUT_DATA 0x00000008
02113
02139 #define COL_DSP_END 0
02140
02150 #define COL_DSP_FRONT 1
02151
02163 #define COL_DSP_BEFORE 2
02164
02176 #define COL_DSP_AFTER 3
02177
02195 #define COL_DSP_INDEX 4
02196
02213 #define COL_DSP_FIRSTDUP 5
02214
02233 #define COL_DSP_LASTDUP 6
02234
02263 #define COL_DSP_NDUP 7
02264
02283 #define COL_INSERT_NOCHECK 0
02284
02288 #define COL_INSERT_DUPOVER 1
02289
02293 #define COL_INSERT_DUPOVERT 2
02294
02295 #define COL_INSERT_DUPERROR 3
02296
02300 #define COL_INSERT_DUPERRORT 4
02301
02304 #define COL_INSERT_DUPMOVE 5
02305
02308 #define COL_INSERT_DUPMOVET 6
02309
02336 const char *col_get_item_property(struct collection_item *ci,
02337 int *property_len);
02338
02351 int col_get_item_type(struct collection_item *ci);
02352
02366 int col_get_item_length(struct collection_item *ci);
02367
02380 void *col_get_item_data(struct collection_item *ci);
02381
02401 uint64_t col_get_item_hash(struct collection_item *ci);
02402
02426 uint64_t col_make_hash(const char *string, int sub_len, int *length);
02427
02428
02455 int col_compare_items(struct collection_item *first,
02456 struct collection_item *second,
02457 unsigned in_flags,
02458 unsigned *out_flags);
02459
02460
02461
02496 int col_modify_item(struct collection_item *item,
02497 const char *property,
02498 int type,
02499 const void *data,
02500 int length);
02501
02519 int col_modify_item_property(struct collection_item *item,
02520 const char *property);
02521
02535 int col_modify_str_item(struct collection_item *item,
02536 const char *property,
02537 const char *string,
02538 int length);
02549 int col_modify_binary_item(struct collection_item *item,
02550 const char *property,
02551 void *binary_data,
02552 int length);
02563 int col_modify_bool_item(struct collection_item *item,
02564 const char *property,
02565 unsigned char logical);
02576 int col_modify_int_item(struct collection_item *item,
02577 const char *property,
02578 int32_t number);
02589 int col_modify_long_item(struct collection_item *item,
02590 const char *property,
02591 int64_t number);
02602 int col_modify_ulong_item(struct collection_item *item,
02603 const char *property,
02604 uint64_t number);
02615 int col_modify_unsigned_item(struct collection_item *item,
02616 const char *property,
02617 uint32_t number);
02628 int col_modify_double_item(struct collection_item *item,
02629 const char *property,
02630 double number);
02631
02695 int col_extract_item(struct collection_item *ci,
02696 const char *subcollection,
02697 int disposition,
02698 const char *refprop,
02699 int idx,
02700 int type,
02701 struct collection_item **ret_ref);
02702
02743 int col_extract_item_from_current(struct collection_item *ci,
02744 int disposition,
02745 const char *refprop,
02746 int idx,
02747 int type,
02748 struct collection_item **ret_ref);
02749
02797 int col_remove_item(struct collection_item *ci,
02798 const char *subcollection,
02799 int disposition,
02800 const char *refprop,
02801 int idx,
02802 int type);
02803
02804
02843 int col_remove_item_from_current(struct collection_item *ci,
02844 int disposition,
02845 const char *refprop,
02846 int idx,
02847 int type);
02848
02908 int col_insert_item(struct collection_item *ci,
02909 const char *subcollection,
02910 struct collection_item *item,
02911 int disposition,
02912 const char *refprop,
02913 int idx,
02914 unsigned flags);
02915
02956 int col_insert_item_into_current(struct collection_item *ci,
02957 struct collection_item *item,
02958 int disposition,
02959 const char *refprop,
02960 int idx,
02961 unsigned flags);
02962
02963
02964
02978 void col_delete_item(struct collection_item *item);
02979
03014 int col_bind_iterator(struct collection_iterator **iterator,
03015 struct collection_item *ci,
03016 int mode_flags);
03017
03023 void col_unbind_iterator(struct collection_iterator *iterator);
03024
03045 int col_iterate_collection(struct collection_iterator *iterator,
03046 struct collection_item **item);
03047
03065 int col_iterate_up(struct collection_iterator *iterator, unsigned level);
03066
03098 int col_get_iterator_depth(struct collection_iterator *iterator, int *depth);
03099
03114 int col_get_item_depth(struct collection_iterator *iterator, int *depth);
03115
03164 void col_pin_iterator(struct collection_iterator *iterator);
03165
03178 void col_rewind_iterator(struct collection_iterator *iterator);
03179
03180
03189 #endif