~ubuntu-branches/ubuntu/vivid/mozjs24/vivid

« back to all changes in this revision

Viewing changes to intl/icu/source/i18n/fphdlimp.cpp

  • Committer: Package Import Robot
  • Author(s): Tim Lunn
  • Date: 2014-02-11 21:55:34 UTC
  • Revision ID: package-import@ubuntu.com-20140211215534-m1zyq5aj59md3y07
Tags: upstream-24.2.0
ImportĀ upstreamĀ versionĀ 24.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
*******************************************************************************
 
3
* Copyright (C) 2009-2010, International Business Machines Corporation and
 
4
* others. All Rights Reserved.
 
5
*******************************************************************************
 
6
*/
 
7
 
 
8
#include "unicode/utypes.h"
 
9
 
 
10
#if !UCONFIG_NO_FORMATTING
 
11
 
 
12
#include "fphdlimp.h"
 
13
#include "uvectr32.h"
 
14
 
 
15
U_NAMESPACE_BEGIN
 
16
 
 
17
// utility FieldPositionHandler
 
18
// base class, null implementation
 
19
 
 
20
FieldPositionHandler::~FieldPositionHandler() {
 
21
}
 
22
 
 
23
void
 
24
FieldPositionHandler::addAttribute(int32_t, int32_t, int32_t) {
 
25
}
 
26
 
 
27
void
 
28
FieldPositionHandler::shiftLast(int32_t) {
 
29
}
 
30
 
 
31
UBool
 
32
FieldPositionHandler::isRecording(void) {
 
33
  return FALSE;
 
34
}
 
35
 
 
36
 
 
37
// utility subclass FieldPositionOnlyHandler
 
38
 
 
39
FieldPositionOnlyHandler::FieldPositionOnlyHandler(FieldPosition& _pos)
 
40
  : pos(_pos) {
 
41
}
 
42
 
 
43
FieldPositionOnlyHandler::~FieldPositionOnlyHandler() {
 
44
}
 
45
 
 
46
void
 
47
FieldPositionOnlyHandler::addAttribute(int32_t id, int32_t start, int32_t limit) {
 
48
  if (pos.getField() == id) {
 
49
    pos.setBeginIndex(start);
 
50
    pos.setEndIndex(limit);
 
51
  }
 
52
}
 
53
 
 
54
void
 
55
FieldPositionOnlyHandler::shiftLast(int32_t delta) {
 
56
  if (delta != 0 && pos.getField() != FieldPosition::DONT_CARE && pos.getBeginIndex() != -1) {
 
57
    pos.setBeginIndex(delta + pos.getBeginIndex());
 
58
    pos.setEndIndex(delta + pos.getEndIndex());
 
59
  }
 
60
}
 
61
 
 
62
UBool
 
63
FieldPositionOnlyHandler::isRecording(void) {
 
64
  return pos.getField() != FieldPosition::DONT_CARE;
 
65
}
 
66
 
 
67
 
 
68
// utility subclass FieldPositionIteratorHandler
 
69
 
 
70
FieldPositionIteratorHandler::FieldPositionIteratorHandler(FieldPositionIterator* posIter,
 
71
                                                           UErrorCode& _status)
 
72
    : iter(posIter), vec(NULL), status(_status) {
 
73
  if (iter && U_SUCCESS(status)) {
 
74
    vec = new UVector32(status);
 
75
  }
 
76
}
 
77
 
 
78
FieldPositionIteratorHandler::~FieldPositionIteratorHandler() {
 
79
  // setData adopts the vec regardless of status, so it's safe to null it
 
80
  if (iter) {
 
81
    iter->setData(vec, status);
 
82
  }
 
83
  // if iter is null, we never allocated vec, so no need to free it
 
84
  vec = NULL;
 
85
}
 
86
 
 
87
void
 
88
FieldPositionIteratorHandler::addAttribute(int32_t id, int32_t start, int32_t limit) {
 
89
  if (iter && U_SUCCESS(status) && start < limit) {
 
90
    int32_t size = vec->size();
 
91
    vec->addElement(id, status);
 
92
    vec->addElement(start, status);
 
93
    vec->addElement(limit, status);
 
94
    if (!U_SUCCESS(status)) {
 
95
      vec->setSize(size);
 
96
    }
 
97
  }
 
98
}
 
99
 
 
100
void
 
101
FieldPositionIteratorHandler::shiftLast(int32_t delta) {
 
102
  if (U_SUCCESS(status) && delta != 0) {
 
103
    int32_t i = vec->size();
 
104
    if (i > 0) {
 
105
      --i;
 
106
      vec->setElementAt(delta + vec->elementAti(i), i);
 
107
      --i;
 
108
      vec->setElementAt(delta + vec->elementAti(i), i);
 
109
    }
 
110
  }
 
111
}
 
112
 
 
113
UBool
 
114
FieldPositionIteratorHandler::isRecording(void) {
 
115
  return U_SUCCESS(status);
 
116
}
 
117
 
 
118
U_NAMESPACE_END
 
119
 
 
120
#endif /* !UCONFIG_NO_FORMATTING */