42 StreamWriterHost<Adapter, AP>::StreamWriterHost(Thread* thread) : |
42 StreamWriterHost<Adapter, AP>::StreamWriterHost(Thread* thread) : |
43 MemoryWriterHost<Adapter, AP>(thread), _stream_pos(0), _fd(invalid_fd) { |
43 MemoryWriterHost<Adapter, AP>(thread), _stream_pos(0), _fd(invalid_fd) { |
44 } |
44 } |
45 |
45 |
46 template <typename Adapter, typename AP> |
46 template <typename Adapter, typename AP> |
47 inline intptr_t StreamWriterHost<Adapter, AP>::current_stream_position() const { |
47 inline int64_t StreamWriterHost<Adapter, AP>::current_stream_position() const { |
48 return this->used_offset() + _stream_pos; |
48 return this->used_offset() + _stream_pos; |
49 } |
49 } |
50 |
50 |
51 template <typename Adapter, typename AP> |
51 template <typename Adapter, typename AP> |
52 inline bool StreamWriterHost<Adapter, AP>::accommodate(size_t used, size_t requested) { |
52 inline bool StreamWriterHost<Adapter, AP>::accommodate(size_t used, size_t requested) { |
71 |
71 |
72 template <typename Adapter, typename AP> |
72 template <typename Adapter, typename AP> |
73 inline void StreamWriterHost<Adapter, AP>::flush(size_t size) { |
73 inline void StreamWriterHost<Adapter, AP>::flush(size_t size) { |
74 assert(size > 0, "invariant"); |
74 assert(size > 0, "invariant"); |
75 assert(this->is_valid(), "invariant"); |
75 assert(this->is_valid(), "invariant"); |
76 _stream_pos += os::write(_fd, this->start_pos(), (int)size); |
76 _stream_pos += os::write(_fd, this->start_pos(), (unsigned int)size); |
77 StorageHost<Adapter, AP>::reset(); |
77 StorageHost<Adapter, AP>::reset(); |
78 assert(0 == this->used_offset(), "invariant"); |
78 assert(0 == this->used_offset(), "invariant"); |
79 } |
79 } |
80 |
80 |
81 template <typename Adapter, typename AP> |
81 template <typename Adapter, typename AP> |
82 inline bool StreamWriterHost<Adapter, AP>::has_valid_fd() const { |
82 inline bool StreamWriterHost<Adapter, AP>::has_valid_fd() const { |
83 return invalid_fd != _fd; |
83 return invalid_fd != _fd; |
84 } |
84 } |
85 |
85 |
86 template <typename Adapter, typename AP> |
86 template <typename Adapter, typename AP> |
87 inline intptr_t StreamWriterHost<Adapter, AP>::current_offset() const { |
87 inline int64_t StreamWriterHost<Adapter, AP>::current_offset() const { |
88 return current_stream_position(); |
88 return current_stream_position(); |
89 } |
89 } |
90 |
90 |
91 template <typename Adapter, typename AP> |
91 template <typename Adapter, typename AP> |
92 void StreamWriterHost<Adapter, AP>::seek(intptr_t offset) { |
92 void StreamWriterHost<Adapter, AP>::seek(int64_t offset) { |
93 this->flush(); |
93 this->flush(); |
94 assert(0 == this->used_offset(), "can only seek from beginning"); |
94 assert(0 == this->used_offset(), "can only seek from beginning"); |
95 _stream_pos = os::seek_to_file_offset(_fd, offset); |
95 _stream_pos = os::seek_to_file_offset(_fd, offset); |
96 } |
96 } |
97 |
97 |
108 template <typename Adapter, typename AP> |
108 template <typename Adapter, typename AP> |
109 void StreamWriterHost<Adapter, AP>::write_unbuffered(const void* buf, size_t len) { |
109 void StreamWriterHost<Adapter, AP>::write_unbuffered(const void* buf, size_t len) { |
110 this->flush(); |
110 this->flush(); |
111 assert(0 == this->used_offset(), "can only seek from beginning"); |
111 assert(0 == this->used_offset(), "can only seek from beginning"); |
112 while (len > 0) { |
112 while (len > 0) { |
113 const int n = MIN2<int>((int)len, INT_MAX); |
113 const unsigned int n = MIN2((unsigned int)len, (unsigned int)INT_MAX); |
114 _stream_pos += os::write(_fd, buf, n); |
114 _stream_pos += os::write(_fd, buf, n); |
115 len -= n; |
115 len -= n; |
116 } |
116 } |
117 } |
117 } |
118 |
118 |