xref: /aoo42x/main/xmlreader/source/pad.cxx (revision b63233d8)
1*b725e8ebSAndrew Rist /**************************************************************
2*b725e8ebSAndrew Rist  *
3*b725e8ebSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*b725e8ebSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*b725e8ebSAndrew Rist  * distributed with this work for additional information
6*b725e8ebSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*b725e8ebSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*b725e8ebSAndrew Rist  * "License"); you may not use this file except in compliance
9*b725e8ebSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*b725e8ebSAndrew Rist  *
11*b725e8ebSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*b725e8ebSAndrew Rist  *
13*b725e8ebSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*b725e8ebSAndrew Rist  * software distributed under the License is distributed on an
15*b725e8ebSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b725e8ebSAndrew Rist  * KIND, either express or implied.  See the License for the
17*b725e8ebSAndrew Rist  * specific language governing permissions and limitations
18*b725e8ebSAndrew Rist  * under the License.
19*b725e8ebSAndrew Rist  *
20*b725e8ebSAndrew Rist  *************************************************************/
21*b725e8ebSAndrew Rist 
22*b725e8ebSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "sal/config.h"
25cdf0e10cSrcweir #include "osl/diagnose.h"
26cdf0e10cSrcweir #include "rtl/string.h"
27cdf0e10cSrcweir #include "sal/types.h"
28cdf0e10cSrcweir #include "xmlreader/pad.hxx"
29cdf0e10cSrcweir #include "xmlreader/span.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir namespace xmlreader {
32cdf0e10cSrcweir 
add(char const * begin,sal_Int32 length)33cdf0e10cSrcweir void Pad::add(char const * begin, sal_Int32 length) {
34cdf0e10cSrcweir     OSL_ASSERT(
35cdf0e10cSrcweir         begin != 0 && length >= 0 && !(span_.is() && buffer_.getLength() != 0));
36cdf0e10cSrcweir     if (length != 0) {
37cdf0e10cSrcweir         flushSpan();
38cdf0e10cSrcweir         if (buffer_.getLength() == 0) {
39cdf0e10cSrcweir             span_ = Span(begin, length);
40cdf0e10cSrcweir         } else {
41cdf0e10cSrcweir             buffer_.append(begin, length);
42cdf0e10cSrcweir         }
43cdf0e10cSrcweir     }
44cdf0e10cSrcweir }
45cdf0e10cSrcweir 
addEphemeral(char const * begin,sal_Int32 length)46cdf0e10cSrcweir void Pad::addEphemeral(char const * begin, sal_Int32 length) {
47cdf0e10cSrcweir     OSL_ASSERT(
48cdf0e10cSrcweir         begin != 0 && length >= 0 && !(span_.is() && buffer_.getLength() != 0));
49cdf0e10cSrcweir     if (length != 0) {
50cdf0e10cSrcweir         flushSpan();
51cdf0e10cSrcweir         buffer_.append(begin, length);
52cdf0e10cSrcweir     }
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
clear()55cdf0e10cSrcweir void Pad::clear() {
56cdf0e10cSrcweir     OSL_ASSERT(!(span_.is() && buffer_.getLength() != 0));
57cdf0e10cSrcweir     span_.clear();
58cdf0e10cSrcweir     buffer_.setLength(0);
59cdf0e10cSrcweir }
60cdf0e10cSrcweir 
get() const61cdf0e10cSrcweir Span Pad::get() const {
62cdf0e10cSrcweir     OSL_ASSERT(!(span_.is() && buffer_.getLength() != 0));
63cdf0e10cSrcweir     if (span_.is()) {
64cdf0e10cSrcweir         return span_;
65cdf0e10cSrcweir     } else if (buffer_.getLength() == 0) {
66cdf0e10cSrcweir         return Span(RTL_CONSTASCII_STRINGPARAM(""));
67cdf0e10cSrcweir     } else {
68cdf0e10cSrcweir         return Span(buffer_.getStr(), buffer_.getLength());
69cdf0e10cSrcweir     }
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
flushSpan()72cdf0e10cSrcweir void Pad::flushSpan() {
73cdf0e10cSrcweir     if (span_.is()) {
74cdf0e10cSrcweir         buffer_.append(span_.begin, span_.length);
75cdf0e10cSrcweir         span_.clear();
76cdf0e10cSrcweir     }
77cdf0e10cSrcweir }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir }
80