LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
ConcatenatedEntry.cpp
Go to the documentation of this file.
1// Copyright 2002-2013 CEA LIST
2// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
3//
4// SPDX-License-Identifier: MIT
5
6// NAUTITIA
7//
8// jys 1-OCT-2002
9//
10// ConcatenatedEntry is the way to access dictionary concatenated words infos datas.
11// ConcatenatedEntry manages recurent calls to list of concatenated words.
12// Dictionaries in memory are specified in NA2002.r2128 JYS
13// Dictionaries iterators are specified in NA2002.r2129 JYS
14
15// <concatenated> ::= <Len3> { <concatenatedEntry> }
16// <concatenatedEntry> ::= <Len9> { <Component> <dictionaryEntry> }
17// <dictionaryEntry> ::= <Len0> <infos>
18
19#include "ConcatenatedEntry.h"
20
22#include <wchar.h>
23
24using namespace Lima::Common::Misc;
25
26namespace Lima {
27namespace LinguisticProcessing {
28namespace Dictionary {
29
30// Creates ConcatenatedEntry
33m_stringStartAddr(NULL),
34m_startAddr(NULL),
35m_endAddr(NULL),
36m_singleConcatenated(NULL) {
37}
38
39// copy constructor. Copies the specified ConcatenatedEntry
40// into self. Internal iteration pointers of self are reset
43m_stringStartAddr(concatenated.m_stringStartAddr),
44m_startAddr(concatenated.m_startAddr),
45m_endAddr(NULL),
46m_singleConcatenated(NULL) {
47 reset();
48}
49
50ConcatenatedEntry::ConcatenatedEntry(unsigned char *startAddr,
51 unsigned char *stringStartAddr) :
53m_stringStartAddr(stringStartAddr),
54m_startAddr(startAddr),
55m_endAddr(NULL),
56m_singleConcatenated(NULL) {
57 reset();
58}
59
60// Destroys ConcatenatedEntry
63
64// Assignment operator. Copies the specified ConcatenatedEntry
65// into self. Returns a reference to self.
66// After assignment, internal iteration pointers of self are reset
68 const ConcatenatedEntry& concatenated) {
69 BinaryEntry::operator=(concatenated);
70 m_stringStartAddr = concatenated.m_stringStartAddr;
71 m_startAddr = concatenated.m_startAddr;
72 reset();
73 return *this;
74}
75
76// Reset iteration pointer
78 if (m_startAddr != NULL) {
79 unsigned char *ptr = m_startAddr;
80 uint64_t num = getEncodedNumber(ptr);
81 m_endAddr = num + ptr; //<Len9>
82 m_singleConcatenated = ptr;
83 }
84 else {
85 m_endAddr = NULL;
86 m_singleConcatenated = NULL;
87 }
88 return *this;
89}
90
91// Returns true if self is empty
93 return (m_startAddr == NULL);
94}
95
96// Gets the next SingleConcatenatedEntry if exists
97// This call "increments" the internal SingleConcatenatedEntry pointer.
98// If there is no SingleConcatenated anymore, an empty SingleConcatenatedEntry
99// is returned
101 if (m_startAddr == NULL) throw EmptyEntryException();
102 if (m_singleConcatenated < m_endAddr) {
103 unsigned char *singleConcatenated = m_singleConcatenated;
104 getEncodedNumber(m_singleConcatenated); // Skip <component>
105 nextField(m_singleConcatenated); // Skip <dictionaryEntry>
106 return SingleConcatenatedEntry(singleConcatenated, m_stringStartAddr);
107 }
108 else
110}
111
112} // closing namespace Dictionary
113} // closing namespace LinguisticProcessing
114} // closing namespace Lima
uint64_t getEncodedNumber(unsigned char *&ptr) const
BinaryEntry & operator=(const BinaryEntry &entry)
unsigned char * nextField(unsigned char *&ptr) const
ConcatenatedEntry & operator=(const ConcatenatedEntry &)
NAUTITIA.