corinthia-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject [1/5] incubator-corinthia git commit: Initial start on an Apache-licensed UI toolkit
Date Fri, 31 Jul 2015 16:23:13 GMT
Repository: incubator-corinthia
Updated Branches:
  refs/heads/newZipExperiment 055b257ca -> 46398fc33


Initial start on an Apache-licensed UI toolkit


Project: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/commit/40310dcb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/tree/40310dcb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/diff/40310dcb

Branch: refs/heads/newZipExperiment
Commit: 40310dcb8fb8d64f8e9acce06b6c96734c304163
Parents: 6677e00
Author: Peter Kelly <peter@uxproductivity.com>
Authored: Wed Jul 29 17:43:20 2015 +0700
Committer: Peter Kelly <peter@uxproductivity.com>
Committed: Wed Jul 29 17:44:11 2015 +0700

----------------------------------------------------------------------
 ui/src/AColor.h    |  28 ++++++++++
 ui/src/AEvent.h    |  27 ++++++++++
 ui/src/APoint.h    |  26 +++++++++
 ui/src/ARect.h     |  31 +++++++++++
 ui/src/AShared.cpp |  48 +++++++++++++++++
 ui/src/AShared.h   | 137 ++++++++++++++++++++++++++++++++++++++++++++++++
 ui/src/ASize.h     |  26 +++++++++
 ui/src/AString.cpp |  81 ++++++++++++++++++++++++++++
 ui/src/AString.h   |  52 ++++++++++++++++++
 ui/src/AView.h     |  60 +++++++++++++++++++++
 ui/src/uitest.cpp  |  75 ++++++++++++++++++++++++++
 11 files changed, 591 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AColor.h
----------------------------------------------------------------------
diff --git a/ui/src/AColor.h b/ui/src/AColor.h
new file mode 100644
index 0000000..eb0d9d4
--- /dev/null
+++ b/ui/src/AColor.h
@@ -0,0 +1,28 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+struct AColor
+{
+    AColor() : red(0.0), green(0.0), blue(0.0) { }
+    AColor(double _red, double _green, double _blue) :
+        red(_red), green(_green), blue(_blue) { }
+    double red;
+    double green;
+    double blue;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AEvent.h
----------------------------------------------------------------------
diff --git a/ui/src/AEvent.h b/ui/src/AEvent.h
new file mode 100644
index 0000000..e4744a0
--- /dev/null
+++ b/ui/src/AEvent.h
@@ -0,0 +1,27 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include "AShared.h"
+
+class AEvent : public AShared
+{
+public:
+    AEvent() { }
+    virtual ~AEvent() { }
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/APoint.h
----------------------------------------------------------------------
diff --git a/ui/src/APoint.h b/ui/src/APoint.h
new file mode 100644
index 0000000..6956166
--- /dev/null
+++ b/ui/src/APoint.h
@@ -0,0 +1,26 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+struct APoint
+{
+    APoint() : x(0), y(0) { }
+    APoint(double _x, double _y) : x(_x), y(_y) { }
+    double x;
+    double y;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/ARect.h
----------------------------------------------------------------------
diff --git a/ui/src/ARect.h b/ui/src/ARect.h
new file mode 100644
index 0000000..239db42
--- /dev/null
+++ b/ui/src/ARect.h
@@ -0,0 +1,31 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include "APoint.h"
+#include "ASize.h"
+
+struct ARect
+{
+    ARect() { }
+    ARect(const APoint &o, const ASize &s) : origin(o), size(s) { }
+    ARect(double x, double y, double width, double height)
+        : origin(APoint(x,y)), size(ASize(width,height)) { }
+    APoint origin;
+    ASize size;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AShared.cpp
----------------------------------------------------------------------
diff --git a/ui/src/AShared.cpp b/ui/src/AShared.cpp
new file mode 100644
index 0000000..1886916
--- /dev/null
+++ b/ui/src/AShared.cpp
@@ -0,0 +1,48 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "AShared.h"
+#include <assert.h>
+#include <stdio.h>
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                      
         //
+//                                             AShared                                  
         //
+//                                                                                      
         //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void AShared::ref()
+{
+    _refCount++;
+    printf("%p ref():   now _refCount = %d\n",this,_refCount);
+}
+
+void AShared::deref()
+{
+    _refCount--;
+    printf("%p deref(): now _refCount = %d\n",this,_refCount);
+    if (_refCount == 0)
+        delete this;
+}
+
+void AShared::addWeakRef(AWeakRefData *wref)
+{
+}
+
+void AShared::removeWeakRef(AWeakRefData *wref)
+{
+}

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AShared.h
----------------------------------------------------------------------
diff --git a/ui/src/AShared.h b/ui/src/AShared.h
new file mode 100644
index 0000000..c8de282
--- /dev/null
+++ b/ui/src/AShared.h
@@ -0,0 +1,137 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <stddef.h>
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                      
         //
+//                                          AWeakRefData                                
         //
+//                                                                                      
         //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+struct AWeakRefData
+{
+    AWeakRefData() : ptr(NULL), prev(NULL), next(NULL) { }
+    void *ptr;
+    AWeakRefData *prev;
+    AWeakRefData *next;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                      
         //
+//                                             AShared                                  
         //
+//                                                                                      
         //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+class AShared
+{
+public:
+    AShared() : _refCount(0) { }
+    virtual ~AShared() { }
+
+    void ref();
+    void deref();
+
+    void addWeakRef(AWeakRefData *wref);
+    void removeWeakRef(AWeakRefData *wref);
+
+private:
+    int _refCount;
+    struct {
+        AWeakRefData *first;
+        AWeakRefData *last;
+    } _weakRefs;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                      
         //
+//                                              ARef                                    
         //
+//                                                                                      
         //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+class ARef
+{
+public:
+    ARef() : _ptr(NULL) { }
+    ARef(T *ptr) : _ptr(NULL) { setPtr(ptr); }
+    ARef(const ARef<T> &other) : _ptr(NULL) { setPtr(other._ptr); }
+    ~ARef() { setPtr(NULL); }
+
+    ARef<T> &operator=(const ARef<T> &other) {
+        setPtr(other._ptr);
+        return *this;
+    }
+
+    T &operator*() const { return *_ptr; }
+    T *operator->() const { return _ptr; }
+    T *ptr() const { return _ptr; }
+    bool isNull() const { return (_ptr == NULL); }
+
+    void setPtr(T *newPtr) {
+        T *oldPtr = _ptr;
+        if (newPtr != NULL)
+            newPtr->ref();
+        if (oldPtr != NULL)
+            oldPtr->deref();
+        _ptr = newPtr;
+    }
+
+ private:
+    T *_ptr;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//                                                                                      
         //
+//                                            AWeakRef                                  
         //
+//                                                                                      
         //
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+class AWeakRef
+{
+public:
+    AWeakRef() : _ptr(NULL) { }
+    AWeakRef(T *ptr) : _ptr(NULL) { setPtr(ptr); }
+    AWeakRef(const AWeakRef<T> &other) : _ptr(NULL) { setPtr(other._ptr); }
+    ~AWeakRef() { setPtr(NULL); }
+
+    AWeakRef &operator=(const AWeakRef<T> &other) {
+        setPtr(other._ptr);
+        return *this;
+    }
+
+    T &operator*() const { return *_ptr; }
+    T *operator->() const { return _ptr; }
+    T *ptr() const { return _ptr; }
+    bool isNull() const { return (_ptr == NULL); }
+
+    void setPtr(T *newPtr) {
+        T *oldPtr = _ptr;
+        if (oldPtr != NULL)
+            oldPtr->removeWeakRef(&_data);
+        if (newPtr != NULL)
+            newPtr->addWeakRef(&_data);
+        _ptr = newPtr;
+    }
+
+ private:
+    T *_ptr;
+    AWeakRefData _data;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/ASize.h
----------------------------------------------------------------------
diff --git a/ui/src/ASize.h b/ui/src/ASize.h
new file mode 100644
index 0000000..900fff9
--- /dev/null
+++ b/ui/src/ASize.h
@@ -0,0 +1,26 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+struct ASize
+{
+    ASize() : width(0), height(0) { }
+    ASize(double w, double h) : width(w), height(h) { }
+    double width;
+    double height;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AString.cpp
----------------------------------------------------------------------
diff --git a/ui/src/AString.cpp b/ui/src/AString.cpp
new file mode 100644
index 0000000..25d5c6b
--- /dev/null
+++ b/ui/src/AString.cpp
@@ -0,0 +1,81 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "AString.h"
+#include <string.h>
+
+class AStringImpl : public AShared
+{
+public:
+    AStringImpl() { }
+    ~AStringImpl() { delete chars; }
+    AChar *chars;
+    unsigned int len;
+};
+
+AString::AString()
+{
+    _impl = NULL;
+}
+
+AString::AString(const char *utf8)
+{
+    _impl = new AStringImpl();
+    _impl->len = strlen(utf8);
+    _impl->chars = new AChar[_impl->len];
+    // FIXME: Do propert UTF-8 decoding here
+    for (unsigned int i = 0; i < _impl->len; i++)
+        _impl->chars[i] = utf8[i];
+}
+
+AString::AString(AChar *chars, unsigned int length)
+{
+    _impl = new AStringImpl();
+    _impl->chars = new AChar[length];
+    _impl->len = length;
+}
+
+AString::AString(const AString &other)
+{
+    _impl = other._impl;
+}
+
+AString::~AString()
+{
+}
+
+AString &AString::operator=(const AString &other)
+{
+    _impl = other._impl;
+    return *this;
+}
+
+unsigned int AString::length() const
+{
+    if (_impl.isNull())
+        return 0;
+    else
+        return _impl->len;
+}
+
+AChar AString::charAt(int index) const
+{
+    if (_impl.isNull())
+        return 0;
+    else
+        return _impl->chars[index];
+}

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AString.h
----------------------------------------------------------------------
diff --git a/ui/src/AString.h b/ui/src/AString.h
new file mode 100644
index 0000000..ea43c8f
--- /dev/null
+++ b/ui/src/AString.h
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+class AStringImpl;
+
+#include <stdint.h>
+#include "AShared.h"
+
+typedef uint32_t AChar;
+
+class AString
+{
+public:
+    AString();
+    AString(const char *utf8);
+    AString(AChar *chars, unsigned int length);
+    AString(const AString &other);
+    ~AString();
+
+    AString &operator=(const AString &other);
+
+    unsigned int length() const;
+    AChar charAt(int index) const;
+
+    /*
+    int compare(const AString &other) const;
+    bool hasPrefix(const AString &other) const;
+    bool hasSuffix(const AString &other) const;
+    AString substring(int start, int end) const;
+    AString substringTo(int start) const;
+    AString substringFrom(int end) const;
+    AString lowerCase() const;
+    AString upperCase() const;
+    */
+
+ private:
+    ARef<AStringImpl> _impl;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/AView.h
----------------------------------------------------------------------
diff --git a/ui/src/AView.h b/ui/src/AView.h
new file mode 100644
index 0000000..278d239
--- /dev/null
+++ b/ui/src/AView.h
@@ -0,0 +1,60 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include "ARect.h"
+#include "AColor.h"
+#include "AEvent.h"
+#include "AShared.h"
+
+class AView : public AShared
+{
+public:
+    AView() : _visible(true),
+              _enabled(true),
+              _parent(NULL),
+              _nextSibling(NULL),
+              _prevSibling(NULL),
+              _firstChild(NULL),
+              _lastChild(NULL) { }
+    AView(const ARect &frame) : _frame(frame) { }
+    virtual ~AView() { }
+
+    ARect frame() const { return _frame; }
+    void setFrame(const ARect &newFrame) { _frame = newFrame; }
+
+    AColor backgroundColor() const { return _backgroundColor; }
+    void setBackgroundColor(const AColor &newBackgroundColor) { _backgroundColor = newBackgroundColor;
}
+
+    bool visible() const { return _visible; }
+    void setVisible(bool newVisible) { _visible = newVisible; }
+
+    bool enabled() const { return _enabled; }
+    void setEnabled(bool newEnabled) { _enabled = newEnabled; }
+
+private:
+    ARect _frame;
+    AColor _backgroundColor;
+    bool _visible;
+    bool _enabled;
+    AView *_parent;
+    AView *_nextSibling;
+    AView *_prevSibling;
+    AView *_firstChild;
+    AView *_lastChild;
+};

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/40310dcb/ui/src/uitest.cpp
----------------------------------------------------------------------
diff --git a/ui/src/uitest.cpp b/ui/src/uitest.cpp
new file mode 100644
index 0000000..ee9c09f
--- /dev/null
+++ b/ui/src/uitest.cpp
@@ -0,0 +1,75 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <stdio.h>
+#include "AView.h"
+#include "AString.h"
+
+class Foo : public AShared
+{
+public:
+    Foo(int value) : x(value) { printf("%p Foo::Foo()\n",this); }
+    virtual ~Foo() { printf("%p Foo::~Foo()\n",this); }
+    int x;
+    void print() {
+        printf("x = %d\n",x);
+    }
+};
+
+class StrongHolder
+{
+public:
+    StrongHolder() { }
+    StrongHolder(const ARef<Foo> &_ref) : ref(_ref) { }
+    StrongHolder(Foo *ptr) : ref(ptr) { }
+    ARef<Foo> ref;
+};
+
+class WeakHolder
+{
+public:
+    WeakHolder() { }
+    WeakHolder(const AWeakRef<Foo> &_ref) : ref(_ref) { }
+    WeakHolder(Foo *ptr) : ref(ptr) { }
+    AWeakRef<Foo> ref;
+};
+
+int main(int argc, const char **argv)
+{
+    printf("Hello World\n");
+    Foo *f = new Foo(4);
+    printf("f = %p\n",f);
+
+    StrongHolder *s1 = new StrongHolder();
+    /*
+    StrongHolder *s2 = new StrongHolder();
+    StrongHolder *s3 = new StrongHolder();
+    WeakHolder *w1 = new WeakHolder();
+    WeakHolder *w2 = new WeakHolder();
+    WeakHolder *w3 = new WeakHolder();
+    */
+    printf("s1 = %p\n",s1);
+
+    printf("s1->ref.ptr() = %p\n",s1->ref.ptr());
+    printf("before\n");
+    s1->ref = f;
+    printf("after\n");
+    printf("s1->ref.ptr() = %p\n",s1->ref.ptr());
+    //    printf("s1->ref.ptr()->x = %d\n",s1->ref.ptr()->x);
+
+    return 0;
+}


Mime
View raw message