1///////////////////////////////////////////////////////////////////////////
2//
3// Copyright (c) 2007, Weta Digital Ltd
4//
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions are
9// met:
10// *       Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12// *       Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16// *       Neither the name of Weta Digital nor the names of
17// its contributors may be used to endorse or promote products derived
18// from this software without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31//
32///////////////////////////////////////////////////////////////////////////
33
34
35
36//-----------------------------------------------------------------------------
37//
38//	class StringAttribute
39//
40//-----------------------------------------------------------------------------
41
42#include <ImfStringVectorAttribute.h>
43
44
45namespace Imf {
46
47
48template <>
49const char *
50StringVectorAttribute::staticTypeName ()
51{
52    return "stringvector";
53}
54
55
56template <>
57void
58StringVectorAttribute::writeValueTo (OStream &os, int) const
59{
60    int size = _value.size();
61
62    for (int i = 0; i < size; i++)
63    {
64        int strSize = _value[i].size();
65        Xdr::write <StreamIO> (os, strSize);
66    Xdr::write <StreamIO> (os, &_value[i][0], strSize);
67    }
68}
69
70
71template <>
72void
73StringVectorAttribute::readValueFrom (IStream &is, int size, int)
74{
75    int read = 0;
76
77    while (read < size)
78    {
79       int strSize;
80       Xdr::read <StreamIO> (is, strSize);
81       read += Xdr::size<int>();
82
83       std::string str;
84       str.resize (strSize);
85
86       Xdr::read<StreamIO> (is, &str[0], strSize);
87       read += strSize;
88
89       _value.push_back (str);
90    }
91}
92
93
94} // namespace Imf
95