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
00507 typedef void (*col_item_cleanup_fn)(const char *property,
00508 int property_len,
00509 int type,
00510 void *data,
00511 int length,
00512 void *custom_data);
00513
00535 void col_destroy_collection_with_cb(struct collection_item *ci,
00536 col_item_cleanup_fn cb,
00537 void *custom_data);
00538
00563 typedef int (*col_copy_cb)(struct collection_item *item,
00564 void *ext_data,
00565 int *skip);
00566
00593 int col_copy_collection_with_cb(struct collection_item **col_copy,
00594 struct collection_item *col_to_copy,
00595 const char *name_to_use,
00596 int copy_mode,
00597 col_copy_cb copy_cb,
00598 void *ext_data);
00599
00617 int col_copy_collection(struct collection_item **col_copy,
00618 struct collection_item *col_to_copy,
00619 const char *name_to_use,
00620 int copy_mode);
00621
00653 int col_add_collection_to_collection(struct collection_item *ci,
00654 const char *subcollection,
00655 const char *as_property,
00656 struct collection_item *ci_to_add,
00657 int mode);
00684 typedef int (*col_item_fn)(const char *property,
00685 int property_len,
00686 int type,
00687 void *data,
00688 int length,
00689 void *custom_data,
00690 int *stop);
00691
00713 int col_traverse_collection(struct collection_item *ci,
00714 int mode_flags,
00715 col_item_fn item_handler,
00716 void *custom_data);
00717
00752 int col_get_item_and_do(struct collection_item *ci,
00753 const char *property_to_find,
00754 int type,
00755 int mode_flags,
00756 col_item_fn item_handler,
00757 void *custom_data);
00758
00797 int col_get_item(struct collection_item *ci,
00798 const char *property_to_find,
00799 int type,
00800 int mode_flags,
00801 struct collection_item **item);
00802
00845 int col_get_dup_item(struct collection_item *ci,
00846 const char *subcollection,
00847 const char *property_to_find,
00848 int type,
00849 int idx,
00850 int exact,
00851 struct collection_item **item);
00852
00882 int col_sort_collection(struct collection_item *col,
00883 unsigned cmp_flags,
00884 unsigned sort_flags);
00885
00917 int col_delete_property(struct collection_item *ci,
00918 const char *property_to_find,
00919 int type,
00920 int mode_flags);
00921
00946 int col_is_item_in_collection(struct collection_item *ci,
00947 const char *property_to_find,
00948 int type,
00949 int mode_flags,
00950 int *found);
00951
00973 int col_get_collection_reference(struct collection_item *ci,
00974 struct collection_item **acceptor,
00975 const char *col_to_find);
00976
00996 int col_get_reference_from_item(struct collection_item *item,
00997 struct collection_item **acceptor);
00998
00999
01000
01029 int col_get_collection_class(struct collection_item *ci,
01030 unsigned *cclass);
01031
01045 int col_set_collection_class(struct collection_item *ci,
01046 unsigned cclass);
01047
01066 int col_get_collection_count(struct collection_item *ci,
01067 unsigned *count);
01068
01069
01083 int col_is_of_class(struct collection_item *ci,
01084 unsigned cclass);
01085
01086
01159 int col_add_str_property(struct collection_item *ci,
01160 const char *subcollection,
01161 const char *property,
01162 const char *string,
01163 int length);
01164
01191 int col_add_binary_property(struct collection_item *ci,
01192 const char *subcollection,
01193 const char *property,
01194 void *binary_data,
01195 int length);
01196
01222 int col_add_int_property(struct collection_item *ci,
01223 const char *subcollection,
01224 const char *property,
01225 int32_t number);
01226
01252 int col_add_unsigned_property(struct collection_item *ci,
01253 const char *subcollection,
01254 const char *property,
01255 uint32_t number);
01256
01282 int col_add_long_property(struct collection_item *ci,
01283 const char *subcollection,
01284 const char *property,
01285 int64_t number);
01286
01312 int col_add_ulong_property(struct collection_item *ci,
01313 const char *subcollection,
01314 const char *property,
01315 uint64_t number);
01316
01342 int col_add_double_property(struct collection_item *ci,
01343 const char *subcollection,
01344 const char *property,
01345 double number);
01371 int col_add_bool_property(struct collection_item *ci,
01372 const char *subcollection,
01373 const char *property,
01374 unsigned char logical);
01375
01376
01404 int col_add_any_property(struct collection_item *ci,
01405 const char *subcollection,
01406 const char *property,
01407 int type,
01408 void *data,
01409 int length);
01410
01470 int col_add_str_property_with_ref(struct collection_item *ci,
01471 const char *subcollection,
01472 const char *property,
01473 char *string, int length,
01474 struct collection_item **ret_ref);
01475
01504 int col_add_binary_property_with_ref(struct collection_item *ci,
01505 const char *subcollection,
01506 const char *property,
01507 void *binary_data, int length,
01508 struct collection_item **ret_ref);
01509
01537 int col_add_int_property_with_ref(struct collection_item *ci,
01538 const char *subcollection,
01539 const char *property, int32_t number,
01540 struct collection_item **ret_ref);
01541
01569 int col_add_unsigned_property_with_ref(struct collection_item *ci,
01570 const char *subcollection,
01571 const char *property, uint32_t number,
01572 struct collection_item **ret_ref);
01573
01601 int col_add_long_property_with_ref(struct collection_item *ci,
01602 const char *subcollection,
01603 const char *property, int64_t number,
01604 struct collection_item **ret_ref);
01605
01633 int col_add_ulong_property_with_ref(struct collection_item *ci,
01634 const char *subcollection,
01635 const char *property, uint64_t number,
01636 struct collection_item **ret_ref);
01637
01665 int col_add_double_property_with_ref(struct collection_item *ci,
01666 const char *subcollection,
01667 const char *property, double number,
01668 struct collection_item **ret_ref);
01669
01697 int col_add_bool_property_with_ref(struct collection_item *ci,
01698 const char *subcollection,
01699 const char *property, unsigned char logical,
01700 struct collection_item **ret_ref);
01701
01702
01732 int col_add_any_property_with_ref(struct collection_item *ci,
01733 const char *subcollection,
01734 const char *property,
01735 int type, void *data, int length,
01736 struct collection_item **ret_ref);
01737
01792 int col_insert_str_property(struct collection_item *ci,
01793 const char *subcollection,
01794 int disposition,
01795 const char *refprop,
01796 int idx,
01797 unsigned flags,
01798 const char *property,
01799 const char *string,
01800 int length);
01801
01803 int col_insert_binary_property(struct collection_item *ci,
01804 const char *subcollection,
01805 int disposition,
01806 const char *refprop,
01807 int idx,
01808 unsigned flags,
01809 const char *property,
01810 void *binary_data,
01811 int length);
01812
01814 int col_insert_int_property(struct collection_item *ci,
01815 const char *subcollection,
01816 int disposition,
01817 const char *refprop,
01818 int idx,
01819 unsigned flags,
01820 const char *property,
01821 int32_t number);
01822
01824 int col_insert_unsigned_property(struct collection_item *ci,
01825 const char *subcollection,
01826 int disposition,
01827 const char *refprop,
01828 int idx,
01829 unsigned flags,
01830 const char *property,
01831 uint32_t number);
01832
01834 int col_insert_long_property(struct collection_item *ci,
01835 const char *subcollection,
01836 int disposition,
01837 const char *refprop,
01838 int idx,
01839 unsigned flags,
01840 const char *property,
01841 int64_t number);
01842
01844 int col_insert_ulong_property(struct collection_item *ci,
01845 const char *subcollection,
01846 int disposition,
01847 const char *refprop,
01848 int idx,
01849 unsigned flags,
01850 const char *property,
01851 uint64_t number);
01852
01854 int col_insert_double_property(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 double number);
01862
01864 int col_insert_bool_property(struct collection_item *ci,
01865 const char *subcollection,
01866 int disposition,
01867 const char *refprop,
01868 int idx,
01869 unsigned flags,
01870 const char *property,
01871 unsigned char logical);
01872
01874 int col_insert_str_property_with_ref(struct collection_item *ci,
01875 const char *subcollection,
01876 int disposition,
01877 const char *refprop,
01878 int idx,
01879 unsigned flags,
01880 const char *property,
01881 const char *string,
01882 int length,
01883 struct collection_item **ret_ref);
01884
01886 int col_insert_binary_property_with_ref(struct collection_item *ci,
01887 const char *subcollection,
01888 int disposition,
01889 const char *refprop,
01890 int idx,
01891 unsigned flags,
01892 const char *property,
01893 void *binary_data,
01894 int length,
01895 struct collection_item **ret_ref);
01896
01898 int col_insert_int_property_with_ref(struct collection_item *ci,
01899 const char *subcollection,
01900 int disposition,
01901 const char *refprop,
01902 int idx,
01903 unsigned flags,
01904 const char *property,
01905 int32_t number,
01906 struct collection_item **ret_ref);
01907
01909 int col_insert_unsigned_property_with_ref(struct collection_item *ci,
01910 const char *subcollection,
01911 int disposition,
01912 const char *refprop,
01913 int idx,
01914 unsigned flags,
01915 const char *property,
01916 uint32_t number,
01917 struct collection_item **ret_ref);
01918
01920 int col_insert_long_property_with_ref(struct collection_item *ci,
01921 const char *subcollection,
01922 int disposition,
01923 const char *refprop,
01924 int idx,
01925 unsigned flags,
01926 const char *property,
01927 int64_t number,
01928 struct collection_item **ret_ref);
01929
01931 int col_insert_ulong_property_with_ref(struct collection_item *ci,
01932 const char *subcollection,
01933 int disposition,
01934 const char *refprop,
01935 int idx,
01936 unsigned flags,
01937 const char *property,
01938 uint64_t number,
01939 struct collection_item **ret_ref);
01940
01945 int col_insert_double_property_with_ref(struct collection_item *ci,
01946 const char *subcollection,
01947 int disposition,
01948 const char *refprop,
01949 int idx,
01950 unsigned flags,
01951 const char *property,
01952 double number,
01953 struct collection_item **ret_ref);
01954
01956 int col_insert_bool_property_with_ref(struct collection_item *ci,
01957 const char *subcollection,
01958 int disposition,
01959 const char *refprop,
01960 int idx,
01961 unsigned flags,
01962 const char *property,
01963 unsigned char logical,
01964 struct collection_item **ret_ref);
01965
01967 int col_insert_property_with_ref(struct collection_item *ci,
01968 const char *subcollection,
01969 int disposition,
01970 const char *refprop,
01971 int idx,
01972 unsigned flags,
01973 const char *property,
01974 int type,
01975 const void *data,
01976 int length,
01977 struct collection_item **ret_ref);
01978
01979
02028 int col_update_str_property(struct collection_item *ci,
02029 const char *property,
02030 int mode_flags,
02031 char *string,
02032 int length);
02036 int col_update_binary_property(struct collection_item *ci,
02037 const char *property,
02038 int mode_flags,
02039 void *binary_data,
02040 int length);
02044 int col_update_int_property(struct collection_item *ci,
02045 const char *property,
02046 int mode_flags,
02047 int32_t number);
02051 int col_update_unsigned_property(struct collection_item *ci,
02052 const char *property,
02053 int mode_flags,
02054 uint32_t number);
02058 int col_update_long_property(struct collection_item *ci,
02059 const char *property,
02060 int mode_flags,
02061 int64_t number);
02065 int col_update_ulong_property(struct collection_item *ci,
02066 const char *property,
02067 int mode_flags,
02068 uint64_t number);
02072 int col_update_double_property(struct collection_item *ci,
02073 const char *property,
02074 int mode_flags,
02075 double number);
02079 int col_update_bool_property(struct collection_item *ci,
02080 const char *property,
02081 int mode_flags,
02082 unsigned char logical);
02083
02091 int col_update_property(struct collection_item *ci,
02092 const char *property,
02093 int type,
02094 void *new_data,
02095 int length,
02096 int mode_flags);
02097
02098
02130 #define COL_CMPIN_PROP_EQU 0x000000004
02131
02132 #define COL_CMPIN_PROP_BEG 0x000000005
02133
02134 #define COL_CMPIN_PROP_MID 0x000000006
02135
02136 #define COL_CMPIN_PROP_END 0x000000007
02137
02149 #define COL_CMPIN_PROP_DOT 0x000000008
02150
02152 #define COL_CMPIN_PROP_LEN 0x000000010
02153
02155 #define COL_CMPIN_TYPE 0x000000020
02156
02158 #define COL_CMPIN_DATA_LEN 0x000000040
02159
02168 #define COL_CMPIN_DATA 0x000000080
02169
02190 #define COL_CMPOUT_PROP_STR 0x00000001
02191
02198 #define COL_CMPOUT_PROP_LEN 0x00000002
02199
02205 #define COL_CMPOUT_DATA_LEN 0x00000004
02206
02214 #define COL_CMPOUT_DATA 0x00000008
02215
02241 #define COL_DSP_END 0
02242
02252 #define COL_DSP_FRONT 1
02253
02265 #define COL_DSP_BEFORE 2
02266
02278 #define COL_DSP_AFTER 3
02279
02297 #define COL_DSP_INDEX 4
02298
02315 #define COL_DSP_FIRSTDUP 5
02316
02335 #define COL_DSP_LASTDUP 6
02336
02365 #define COL_DSP_NDUP 7
02366
02385 #define COL_DSP_LASTDUPNS 8
02386
02415 #define COL_DSP_NDUPNS 9
02416
02435 #define COL_INSERT_NOCHECK 0
02436
02440 #define COL_INSERT_DUPOVER 1
02441
02445 #define COL_INSERT_DUPOVERT 2
02446
02447 #define COL_INSERT_DUPERROR 3
02448
02452 #define COL_INSERT_DUPERRORT 4
02453
02456 #define COL_INSERT_DUPMOVE 5
02457
02460 #define COL_INSERT_DUPMOVET 6
02461
02488 const char *col_get_item_property(struct collection_item *ci,
02489 int *property_len);
02490
02503 int col_get_item_type(struct collection_item *ci);
02504
02518 int col_get_item_length(struct collection_item *ci);
02519
02532 void *col_get_item_data(struct collection_item *ci);
02533
02553 uint64_t col_get_item_hash(struct collection_item *ci);
02554
02578 uint64_t col_make_hash(const char *string, int sub_len, int *length);
02579
02580
02607 int col_compare_items(struct collection_item *first,
02608 struct collection_item *second,
02609 unsigned in_flags,
02610 unsigned *out_flags);
02611
02612
02613
02650 int col_modify_item(struct collection_item *item,
02651 const char *property,
02652 int type,
02653 const void *data,
02654 int length);
02655
02673 int col_modify_item_property(struct collection_item *item,
02674 const char *property);
02675
02689 int col_modify_str_item(struct collection_item *item,
02690 const char *property,
02691 const char *string,
02692 int length);
02703 int col_modify_binary_item(struct collection_item *item,
02704 const char *property,
02705 void *binary_data,
02706 int length);
02717 int col_modify_bool_item(struct collection_item *item,
02718 const char *property,
02719 unsigned char logical);
02730 int col_modify_int_item(struct collection_item *item,
02731 const char *property,
02732 int32_t number);
02743 int col_modify_long_item(struct collection_item *item,
02744 const char *property,
02745 int64_t number);
02756 int col_modify_ulong_item(struct collection_item *item,
02757 const char *property,
02758 uint64_t number);
02769 int col_modify_unsigned_item(struct collection_item *item,
02770 const char *property,
02771 uint32_t number);
02782 int col_modify_double_item(struct collection_item *item,
02783 const char *property,
02784 double number);
02785
02849 int col_extract_item(struct collection_item *ci,
02850 const char *subcollection,
02851 int disposition,
02852 const char *refprop,
02853 int idx,
02854 int type,
02855 struct collection_item **ret_ref);
02856
02897 int col_extract_item_from_current(struct collection_item *ci,
02898 int disposition,
02899 const char *refprop,
02900 int idx,
02901 int type,
02902 struct collection_item **ret_ref);
02903
02951 int col_remove_item(struct collection_item *ci,
02952 const char *subcollection,
02953 int disposition,
02954 const char *refprop,
02955 int idx,
02956 int type);
02957
03008 int col_remove_item_with_cb(struct collection_item *ci,
03009 const char *subcollection,
03010 int disposition,
03011 const char *refprop,
03012 int idx,
03013 int type,
03014 col_item_cleanup_fn cb,
03015 void *custom_data);
03016
03055 int col_remove_item_from_current(struct collection_item *ci,
03056 int disposition,
03057 const char *refprop,
03058 int idx,
03059 int type);
03060
03120 int col_insert_item(struct collection_item *ci,
03121 const char *subcollection,
03122 struct collection_item *item,
03123 int disposition,
03124 const char *refprop,
03125 int idx,
03126 unsigned flags);
03127
03168 int col_insert_item_into_current(struct collection_item *ci,
03169 struct collection_item *item,
03170 int disposition,
03171 const char *refprop,
03172 int idx,
03173 unsigned flags);
03174
03175
03176
03190 void col_delete_item(struct collection_item *item);
03191
03205 void col_delete_item_with_cb(struct collection_item *item,
03206 col_item_cleanup_fn cb,
03207 void *custom_data);
03208
03209
03244 int col_bind_iterator(struct collection_iterator **iterator,
03245 struct collection_item *ci,
03246 int mode_flags);
03247
03253 void col_unbind_iterator(struct collection_iterator *iterator);
03254
03275 int col_iterate_collection(struct collection_iterator *iterator,
03276 struct collection_item **item);
03277
03295 int col_iterate_up(struct collection_iterator *iterator, unsigned level);
03296
03328 int col_get_iterator_depth(struct collection_iterator *iterator, int *depth);
03329
03344 int col_get_item_depth(struct collection_iterator *iterator, int *depth);
03345
03391 void col_pin_iterator(struct collection_iterator *iterator);
03392
03402 void col_rewind_iterator(struct collection_iterator *iterator);
03403
03404
03413 #endif