OPENSSL_SA.pod 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. =pod
  2. =head1 NAME
  3. OPENSSL_SA, ossl_sa_TYPE_new, ossl_sa_TYPE_free,
  4. ossl_sa_TYPE_free_leaves, ossl_sa_TYPE_num, ossl_sa_TYPE_doall,
  5. ossl_sa_TYPE_doall_arg, ossl_sa_TYPE_get, ossl_sa_TYPE_set
  6. - sparse array container
  7. =head1 SYNOPSIS
  8. #include "crypto/sparse_array.h"
  9. typedef struct sparse_array_st OPENSSL_SA;
  10. SPARSE_ARRAY_OF(TYPE)
  11. DEFINE_SPARSE_ARRAY_OF(TYPE)
  12. SPARSE_ARRAY_OF(TYPE) *ossl_sa_TYPE_new(void);
  13. void ossl_sa_TYPE_free(const SPARSE_ARRAY_OF(TYPE) *sa);
  14. void ossl_sa_TYPE_free_leaves(const SPARSE_ARRAY_OF(TYPE) *sa);
  15. size_t ossl_sa_TYPE_num(const SPARSE_ARRAY_OF(TYPE) *sa);
  16. void ossl_sa_TYPE_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t,
  17. void *));
  18. void ossl_sa_TYPE_doall_arg(const OPENSSL_SA *sa,
  19. void (*leaf)(ossl_uintmax_t, void *, void *),
  20. void *arg);
  21. TYPE *ossl_sa_TYPE_get(const SPARSE_ARRAY_OF(TYPE) *sa, ossl_uintmax_t idx);
  22. int ossl_sa_TYPE_set(SPARSE_ARRAY_OF(TYPE) *sa, ossl_uintmax_t idx,
  23. TYPE *value);
  24. =head1 DESCRIPTION
  25. =begin comment
  26. POD is pretty good at recognising function names and making them appropriately
  27. bold... however, when part of the function name is variable, we have to help
  28. the processor along
  29. =end comment
  30. SPARSE_ARRAY_OF() returns the name for a sparse array of the specified
  31. B<I<TYPE>>. DEFINE_SPARSE_ARRAY_OF() creates set of functions for a sparse
  32. array of B<I<TYPE>>. This will mean that a pointer to type B<I<TYPE>>
  33. is stored in each element of a sparse array, the type is referenced by
  34. B<SPARSE_ARRAY_OF>(B<I<TYPE>>) and each function name begins with
  35. B<ossl_sa_I<TYPE>_>. For example:
  36. TYPE *ossl_sa_TYPE_get(SPARSE_ARRAY_OF(TYPE) *sa, ossl_uintmax_t idx);
  37. B<ossl_sa_I<TYPE>_num>() returns the number of elements in I<sa> or 0 if I<sa>
  38. is NULL.
  39. B<ossl_sa_I<TYPE>_get>() returns element I<idx> in I<sa>, where I<idx> starts
  40. at zero. If I<idx> refers to a value that has not been set then NULL is
  41. returned.
  42. B<ossl_sa_I<TYPE>_set>() sets element I<idx> in I<sa> to I<value>, where I<idx>
  43. starts at zero. The sparse array will be resized as required.
  44. B<ossl_sa_I<TYPE>_new>() allocates a new empty sparse array.
  45. B<ossl_sa_I<TYPE>_free>() frees up the I<sa> structure. It does I<not> free up any
  46. elements of I<sa>. After this call I<sa> is no longer valid.
  47. B<ossl_sa_I<TYPE>_free_leaves>() frees up the I<sa> structure and all of its
  48. elements. After this call I<sa> is no longer valid.
  49. B<ossl_sa_I<TYPE>_doall>() calls the function I<leaf> for each element in I<sa>
  50. in ascending index order. The index position, within the sparse array,
  51. of each item is passed as the first argument to the leaf function and a
  52. pointer to the associated value is passed as the second argument.
  53. B<ossl_sa_I<TYPE>_doall_arg>() calls the function I<leaf> for each element in
  54. I<sa> in ascending index order. The index position, within the sparse
  55. array, of each item is passed as the first argument to the leaf function,
  56. a pointer to the associated value is passed as the second argument and
  57. the third argument is the user supplied I<arg>.
  58. =head1 NOTES
  59. Sparse arrays are an internal data structure and should B<not> be used by user
  60. applications.
  61. Care should be taken when accessing sparse arrays in multi-threaded
  62. environments. The B<ossl_sa_I<TYPE>_set>() operation can cause the internal
  63. structure of the sparse array to change which causes race conditions if the
  64. sparse array is accessed in a different thread.
  65. SPARSE_ARRAY_OF() and DEFINE_SPARSE_ARRAY_OF() are implemented as macros.
  66. The underlying utility B<OPENSSL_SA_> API should not be used directly. It
  67. defines these functions: OPENSSL_SA_doall, OPENSSL_SA_doall_arg,
  68. OPENSSL_SA_free, OPENSSL_SA_free_leaves, OPENSSL_SA_get, OPENSSL_SA_new,
  69. OPENSSL_SA_num and OPENSSL_SA_set.
  70. =head1 RETURN VALUES
  71. B<ossl_sa_I<TYPE>_num>() returns the number of elements in the sparse array or
  72. B<0> if the passed sparse array is NULL.
  73. B<ossl_sa_I<TYPE>_get>() returns a pointer to a sparse array element or NULL if
  74. the element has not be set.
  75. B<ossl_sa_I<TYPE>_set>() return B<1> on success and B<0> on error. In the latter
  76. case, the elements of the sparse array remain unchanged, although the internal
  77. structures might have.
  78. B<ossl_sa_I<TYPE>_new>() returns an empty sparse array or NULL if an error
  79. occurs.
  80. B<ossl_sa_I<TYPE>_doall>(), B<ossl_sa_I<TYPE>_doall_arg>(),
  81. B<ossl_sa_I<TYPE>_free>() and B<ossl_sa_I<TYPE>_free_leaves>()
  82. do not return values.
  83. =head1 HISTORY
  84. This functionality was added to OpenSSL 3.0.
  85. =head1 COPYRIGHT
  86. Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. Copyright
  87. (c) 2019, Oracle and/or its affiliates. All rights reserved.
  88. Licensed under the Apache License 2.0 (the "License"). You may not use this
  89. file except in compliance with the License. You can obtain a copy in the file
  90. LICENSE in the source distribution or at
  91. L<https://www.openssl.org/source/license.html>.
  92. =cut