Line data Source code
1 : /* File: document_link_provider.c; Copyright and License: see below */
2 :
3 : #include "document/document_link_provider.h"
4 : #include "utf8stringbuf/utf8stringview.h"
5 : #include "u8/u8_trace.h"
6 : #include "u8/u8_log.h"
7 : #include <stdio.h>
8 : #include <stdbool.h>
9 : #include <assert.h>
10 :
11 0 : void document_link_provider_init( document_link_provider_t *this_,
12 : data_database_reader_t *db_reader )
13 : {
14 0 : U8_TRACE_BEGIN();
15 0 : assert( NULL != db_reader );
16 :
17 0 : (*this_).db_reader = db_reader;
18 :
19 0 : U8_TRACE_END();
20 0 : }
21 :
22 0 : void document_link_provider_destroy( document_link_provider_t *this_ )
23 : {
24 0 : U8_TRACE_BEGIN();
25 :
26 0 : (*this_).db_reader = NULL;
27 :
28 0 : U8_TRACE_END();
29 0 : }
30 :
31 0 : u8_error_t document_link_provider_get_occurrences( document_link_provider_t *this_,
32 : data_id_t classifier_id,
33 : data_diagram_t (**out_diagram)[],
34 : uint32_t *out_diagram_count )
35 : {
36 0 : U8_TRACE_BEGIN();
37 0 : assert ( NULL != (*this_).db_reader );
38 0 : assert ( DATA_TABLE_CLASSIFIER == data_id_get_table( &classifier_id ) );
39 0 : assert ( NULL != out_diagram );
40 0 : assert ( NULL != out_diagram_count );
41 0 : u8_error_t db_err = U8_ERROR_NONE;
42 :
43 : data_diagram_iterator_t diagram_iterator;
44 0 : db_err |= data_diagram_iterator_init_empty( &diagram_iterator );
45 0 : db_err |= data_database_reader_get_diagrams_by_classifier_id( (*this_).db_reader,
46 : data_id_get_row_id( &classifier_id ),
47 : &diagram_iterator
48 : );
49 0 : uint_fast32_t next_idx = 0;
50 0 : for ( ; (next_idx < DOCUMENT_LINK_PROVIDER_MAX_LINKS) && data_diagram_iterator_has_next( &diagram_iterator ); next_idx++ )
51 : {
52 0 : db_err |= data_diagram_iterator_next( &diagram_iterator, &( (*this_).temp_diagrams[next_idx] ) );
53 : }
54 0 : if ( data_diagram_iterator_has_next( &diagram_iterator ) )
55 : {
56 : /* This is not an error - rather expected - should only be traced...*/
57 0 : U8_TRACE_INFO_INT( "document_link_provider_get_occurrences finds too many classifier occurrences", DOCUMENT_LINK_PROVIDER_MAX_LINKS );
58 : }
59 0 : db_err |= data_diagram_iterator_destroy( &diagram_iterator );
60 :
61 0 : *out_diagram = &((*this_).temp_diagrams);
62 0 : *out_diagram_count = next_idx;
63 :
64 0 : U8_TRACE_END_ERR( db_err );
65 0 : return db_err;
66 : }
67 :
68 :
69 : /*
70 : Copyright 2023-2025 Andreas Warnke
71 :
72 : Licensed under the Apache License, Version 2.0 (the "License");
73 : you may not use this file except in compliance with the License.
74 : You may obtain a copy of the License at
75 :
76 : http://www.apache.org/licenses/LICENSE-2.0
77 :
78 : Unless required by applicable law or agreed to in writing, software
79 : distributed under the License is distributed on an "AS IS" BASIS,
80 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
81 : See the License for the specific language governing permissions and
82 : limitations under the License.
83 : */
|